kiddie
.:: @OREL ::.

Par convention, on note une adresse IPv4 sous forme de 4 nombres décimaux allant de 0 à 255 
séparés par des points. Ainsi, si je souhaite ping ma machine, j'utiliserai l'adresse 127.0
.0.1 ou toute autre adresse située dans la plage 127.0.0.0/8. 

Vous vous en doutez, cette notation n'est qu'une représentation d'une suite d'octets qui s-
erait bien plus contraignante à manipuler dans sa représentation binaire par exemple :

$ ping 01111111000000000000000000000001(127.0.0.1)

Sur Linux, c'est la routine inet_aton() qui est responsable de cette conversion de notation
décimale à point vers un format binaire. Voici quelques extraits du man de cette commande : 

int inet_aton(const char *cp, struct in_addr *inp); ... inet_aton() converts the Internet host address cp from the IPv4 numbers-and-dots notation into binary form (in network byte order) and stores it in the structure that inp points to. inet_aton() returns nonzero if the addressis valid, zero if not. The address supplied in cp can have one of the following forms: a.b.c.d Each of the four numeric parts specifies a byte of the address; the bytes are assigned in left-to-right order to produce the binary address. a.b.c Parts a and b specify the first two bytes of the binary address. Part c is interpreted as a 16-bit value that defines the rightmost two bytes of the binary address. This notation is suitable for specifying (out‐ moded) Class B network addresses. a.b Part a specifies the first byte of the binary address. Part b is interpreted as a 24-bit value that defines the rightmost three bytes of the binary address. This notation is suitable for specifying (outmoded) Class A network addresses. a The value a is interpreted as a 32-bit value that is stored directly into the binary address without any byte rearrangement. In all of the above forms, components of the dotted address can be specified in decimal, octal (with a leading 0), or hexadecimal, with a leading 0X). Addresses in any of these forms are collectively termed IPV4 numbers-and-dots notation. The form that uses exactly four decimal numbers is referred to as IPv4 dotted-decimal notation (or sometimes: IPv4 dotted-quad notation).
Cette page du manuel nous apprend notamment qu'une adresse IPv4 peut être donnée sous les formes a, a.b, a.b.c et a.b.c.d et que les variables a,b,c,d peuvent être notées sous la forme décimal, héxadécimal avec le préfixe 0x et octal avec le préfixe 0. Avec ces spécifications, je peux par exemple remplacer 127.0.0.1 par 0x7f.01, la commande suivante est donc valide et équivalente à ping 127.0.0.1 : $ ping 0x7f.01 PING 0x7f.01 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.073 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.055 ms ... Au lieu de représenter 127.0.0.1 avec 4 blocs de 8 bits(127, 0, 0 et 1) notés sous la forme décimal, nous avons comme nous l'autorise le manuel, utilisé 2 blocs de 16 bits(0x7f et 01) l'un noté en héxadécimal(0x7f -> a) et l'autre en octal(01 -> b). Ces différentes notations offrent pas mal de possiblités pour ping le localhost : $ ping 127.0.0.1 $ ping 127.1 $ ping 2130706433 $ ping 0x7f000001 $ ping 0x7f.00.00.01 $ ping 0177.0.0.0x1 etc.. Toutes ces commandes sont aussi valables sur Windows et peuvent j'image être utilisées pour outrepasser certains mécanismes de sécurité qui ne prennent pas en compte ces notations.

Tout est faux tout est conforme.