Convertir une adresse IP en un int/long en Java

Dans ce tutoriel, nous allons voir les méthodes pour obtenir un nombre décimal(base 10) à partir d'une adresse IP. L'utilisation du codage d'une adresse IP en décimal (base 10) est un peu bizarre bien que autorisé dans le navigateur.

Comment coder l'adresse IP en décimal

Une adresse IP est composée d'un groupe de 4 nombres. Par exemple, si on veut coder 192.168.1.1 en décimal, il faut détecter en java les nombres séparés par "." de l'adresse IP avec la fonction split et mettre chacun dans une case du tableau. L'adresse IP est de base 256, voici la formule de conversion:

192 x 256^3 + 168 x 256^2 + 1 x 256^1 + 1 x 1
3221225472 + 11010048 + 256 + 1 = 3232235777
On peut le vérifier en allant sur le navigateur
http://3232235777
Deux manières pour exprimer l'adresse IP en un nombre décimal:

1- Adresse IP en bit shift

On décale n*8 bits à gauche, c'est une méthode pour faire la puissance de façon binaire. Voici un exemple de décalage avec 8 bits du dernier nombre de 192.168.1.1:

bit shifting décalage de 8 bits adresse IP
Exemple de calcul de (1 x 256^1) en binaire

public class IP_Decimale {

public static void main(String[] zero) {
String ip = "192.168.1.1";
//l'adresse IP en décimal
long iplong = IPenBase10(ip);
System.out.println(iplong);
}

public static long IPenBase10(String adresseIP) {

long decimal = 0;

//les nombres sont séparés par des points
//mettre chacun dans une case du tableau
String[] tableauIP = adresseIP.split("\\.");

//de la droite vers la gauche
for (int i = 3; i >= 0; i--) {
//convertir en long
long ip = Long.parseLong(tableauIP[3 - i]);
//décaler de (i*8) bits à gauche et faire la somme
long bitshift= ip << (i * 8);
decimal += bitshift;
System.out.println(ip+" << "+(i*8)+" : "+bitshift);
}
return decimal;
}
}
Sortie
192 << 24 : 3221225472
168 << 16 : 11010048
1 << 8 : 256
1 << 0 : 1
résulat: 3232235777

2- Adresse IP en puissance de 256

Cette méthode consiste à calculer la puissance avec la fonction Math.pow et multiplier par le digit de l'adresse IP.

public static long IPenBase10puiss(String adresseIP) {

long decimal = 0;
String[] tableauIP = adresseIP.split("\\.");

//de la droite vers la gauche
for (int i = 0; i<=3; i++) {
long ip = Long.parseLong(tableauIP[i]);
long puiss= ip * (long) Math.pow(256, 3-i);
decimal += puiss;
System.out.println(tableauIP[i] +" : "+puiss);
}
return decimal;
}
Références:
Réseau en Java: manipulation des adresses IP
assiste: Comment coder une adresse IP en décimal ?
Wikipedia: Bit shifts
rice University: Java Bit Manipulation Guide
StackOverFlow: IP address conversion to decimal and vice versa