Une adresse IP (v4) peut être encodée au format décimal, mais aussi octal, ou hexadécimal. Dans ce cas, les point “.” ne sont même plus nécessaires.

Encoder l’IP

Au détour de la lecture d’une CVE, je suis tombé sur l’encodage des adresses IP. Saviez-vous que 192.168.56.1 peut être encodé d’un paquet de manières différentes? Et pointer, au final, sur le même serveur?
Par exemple:

  • En démical, classique avec des points, http://192.168.56.1 renvoie sur la machine correspondant à cet IP (si cette machine existe sur le )
  • En octal: http://0300.0250.070.01 renvoie aussi sur http://192.168.56.1
  • En hexadécimal http://0xC0.0xA8.0x38.0x01 renvoie également sur 192.168.56.1
  • En hexadécimal, les séparateurs “.” peuvent être supprimés, à condition de garder 2 chiffres hexadécimaux à chaque place: http://0xC0A83801 renvoie là encore sur http://192.168.56.1

Quel intérêt?

Outre la curiosité, l’intérêt pour ce genre d’encodage est lié à la sécurité. Bon, normalement, vous ne devriez pas utiliser les IP sur vos jeux ou de manière générale, mais dans le cas où vous avez besoin de “blacklister” certaines IP, sachez que celles-ci peuvent être encodés de différentes manières, et qu’il vous faudra adapter votre black liste en conséquence.

Par exemple, si vous souhaitez laisser l’utilisateur insérer des liens (dans votre jeu, sur votre forum, peu importe), mais interdire les liens pointant vers certaines plages d’IP (127.0.0.1 ou 192.168.*.* disons) alors vous devrez aussi faire gaffe aux versions octales, hexadécimale, avec ou sans séparateur. Un simple strpos($ip, '192.168.') !== 0 ne suffira donc pas.

Pensez aussi qu’une IP v4 peut être écrite en IP v6!

Voilà pour ce court billet de curiosité (et c’est la première fois que j’utilise la nouvelle interface d’écriture de WordPress 5… Mouais, moyennement convaincu, mais bon).