IPv6 hoe werkt het

  • ik heb een vraag hoe ga ik straks als ipv6 overal ingeschakeld is het adres opslaan in de database?


    ik lees dat dit vrij moeilijk is omdat php geen 128bit adressen ondersteund.


    bron : http://stackoverflow.com/quest…ith-ipv6-addresses-in-php



    hoe ga ik dit straks opslaan? gewoon zoals een ipv4 adres met? of toch anders.


    en blijf dit opvraagbaar met

    PHP
    GETENV('');



    ik las namelijk dat binnenkort de adressen op zijn dit is rond 17 juli en op 6 juni zullen de eerste grote bedrijven als google als facebook overstappen op ipv6.

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Dat is redelijk simpel naar mijn mening. Je maakt een kolom in je database met een varbinary( 16 ) aan. Deze kolom zal uiteindelijk je IP bevatten.


    Daarnaast moet IPv6 wel enabled staan in PHP. Bij zowel IPv4 en IPv6 haal je er een inet_ntop en inet_pton (PHP >= 5.1.0) overheen.


    Dus het zal dan als volgt zijn:


    PHP
    $_IPton = inet_pton($_SERVER['REMOTE_ADDR']); //Kan ook $_SERVER['HTTP_X_FORWARDED_FOR'] en $_SERVER['CLIENT_IP'] zijn dus gewoon een functie daarvoor maken.
    
    
    $_IP = inet_ntop($_IPton);


    Waarom doe je eerst inet_pton en daarna inet_ntop?
    Zo maak je de variabel een consistente string. Je kunt er namelijk niet vanuit gaan dat deze altijd consistent is.


    PHP Manual (inet_ntop):
    This function converts a 32bit IPv4, or 128bit IPv6 address (if PHP was built with IPv6 support enabled) into an address family appropriate string representation.


    PHP Manual (inet_pton):
    This function converts a human readable IPv4 or IPv6 address (if PHP was built with IPv6 support enabled) into an address family appropriate 32bit or 128bit binary structure.


    Als de hierboven code een error voor je oplevert probeer dan het volgende:


    Maak twee kolommen aan:
    - ipv4 (INT UNSIGNED)
    - ipv6 (BINARY 16)


    Dan wanneer je een insert doet met een IPv4 adres kun je als value het volgende doen:
    INET_ATON($_IP)


    Als je dan weer het IP uit de database wilt halen kun je dat in de select query doen door om de kolom INET_NTOA te zetten.


    Bij een IPv6 doe je het volgende in een insert query:
    mysql_real_escape_string(inet_pton($_IP))


    En om het weer uit de database te halen doe je gewoon een normale select query en in een variabel doe je inet_pton.


    E.g. $ipv6 = inet_ntop($select['ipv6']);


    Wat nou als ik ze gecombineerd wil hebben?
    Dan kun je een functie schrijven die checkt of het IP een IPv4 of een IPv6 type is. Dan kun je het bovenstaande gewoon hergebruiken alleen moet je voor de kolom waar het IP inkomt een geschikte kolomtype selecteren die beiden goed ondersteunen.

    Kast: HAF922 | CPU: I7-930 @ 4.0GHz | CPU Cooler: Noctua NH-D14 | HDD0: Crucial M4 128GB, HDD1: Kingston SSD 64GB, HDD2/3: WD Black & Green 1TB, HDD4: Seagate 1.5TB | Mem: Kingston HyperX 12GB @ 1600MHz | Graphics: Crossfire HD6970 | Res: 5760x1080

  • Tja, er is nooit gezegd dat programmeren even in vijf seconden kan.


    Een functie maken met:
    - De 3 server variabelen afgaat en de eerste die een ip heeft in een variabel plaatsen
    - IP checken of er een : in voor komt (strstr), zo ja? IPv6. Zo nee? IPv4
    - Is IP IPv4? Dan een ip2long erover heen gooien (hetzelfde als INET_ATON) of als je direct naar varbinary wilt converten gebruik je ook hier inet_pton en een mysql_real_escape_string
    - Is IP IPv6? Dan een mysql_real_escape_string en een inet_pton
    - Eruit halen? Checken of IPv4/6 is. Is IPv4? long2ip eroverheen. Is IPv6? inet_ntop eroverheen.


    Het is nu alleen een kunst er een geschikte kolom ervoor te vinden. Geen tijd op het te optimaliseren? Varchar is your friend :) Je zou ook voor een VARBINARY kunnen gaan. Bij die oplossing moet je alleen nog van de IPv4 adressen een binary maken.

    Kast: HAF922 | CPU: I7-930 @ 4.0GHz | CPU Cooler: Noctua NH-D14 | HDD0: Crucial M4 128GB, HDD1: Kingston SSD 64GB, HDD2/3: WD Black & Green 1TB, HDD4: Seagate 1.5TB | Mem: Kingston HyperX 12GB @ 1600MHz | Graphics: Crossfire HD6970 | Res: 5760x1080

  • Sja, momenteel krijg ik op mijn server ongeveer elk half uur wel iemand over de vloer met ipv6.
    Momenteel wordt dit denk ik nog niet goed afgehandeld, want ik krijg steeds een foutmelding in mijn var messages...
    Het lijkt dus stilletjes aan heel dichtbij te komen om inderdaad over te stappen op ipv6...

  • Kast: HAF922 | CPU: I7-930 @ 4.0GHz | CPU Cooler: Noctua NH-D14 | HDD0: Crucial M4 128GB, HDD1: Kingston SSD 64GB, HDD2/3: WD Black & Green 1TB, HDD4: Seagate 1.5TB | Mem: Kingston HyperX 12GB @ 1600MHz | Graphics: Crossfire HD6970 | Res: 5760x1080

  • Pfft dat gaat nog een gigantische klus worden want je moet straks ipv4 en ipv6 gaan scheiden van elkaar.
    misschien opslaan als text in de database.


    Nou ja als nederland overgaat op ipv6 zie ik dat dan wel weer, ik denk dat dit voor veel mensen en websites een doom dag word.


  • Speciaal voor jullie allemaal :) 3 simpele functies tot het maken van een binary IP en een Human readable IP.
    Dit zet een IPv4/6 om in een binary.


    Maak hiervoor in de database wel een kolom aan waar het IP in komt met VARBINARY(16).


    Let op: Je moet zelf nog kijken of er uberhaupt wat in staat anders zal er een in_addr error worden veroorzaakt. Kun je simpel oplossen door de empty functie te gebruiken.


    Ik heb het geschreven, getest en werkend verklaard. (Zowel IPv4 en IPv6)

    Kast: HAF922 | CPU: I7-930 @ 4.0GHz | CPU Cooler: Noctua NH-D14 | HDD0: Crucial M4 128GB, HDD1: Kingston SSD 64GB, HDD2/3: WD Black & Green 1TB, HDD4: Seagate 1.5TB | Mem: Kingston HyperX 12GB @ 1600MHz | Graphics: Crossfire HD6970 | Res: 5760x1080

  • ik denk dat ik al weet hoe ik ipv6 ga ondersteunen ik zorg gewoon dat een filter al die gekken tekens verwijderd en er alleen letters en getallen overblijven.

    Nieuwe reactie samengevoegd met originele reactie op 05.06.12 22:37:55:
    Gaat dit werken?


Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!