Y a-t-il un moyen facile de convertir String en Inetaddress en Java?
j'essaie de convertir les cordes en Inetaddress
. Je n'essaie pas de résoudre les noms d'hôtes: les chaînes sont des adresses ipv4. Est-ce que InetAddress.getByName(String host)
fonctionne? Ou dois-je manuellement l'analyser?
5 réponses
com.google.common.net.InetAddresses.forString(String ipString)
est préférable car il ne fera pas de recherche DNS indépendamment de la chaîne qui lui est passée.
oui, ça va marcher. L'API est très claire à ce sujet ("le nom d'hôte peut être soit un nom de machine, comme "java.sun.com", ou une représentation textuelle de son adresse IP."), et bien sûr vous pourriez facilement vérifier vous-même.
attention: il semble que l'analyse d'une adresse non valide telle que InetAddress.getByName("999.999.999.999"
) entraînera et non une exception comme on pourrait s'y attendre de la phrase de la documentation:
la validité du format de l'adresse est vérifiée
empiriquement, je me retrouve à obtenir une instance Inetadress avec l'adresse IP brute de la machine locale et l'adresse IP invalide comme nom d'hôte. Certes ce n'était pas ce que Je m'attendais!
vous pouvez essayer en utilisant une expression régulière pour filtrer les adresses IP non numériques avant de passer le String
à getByName()
. Alors getByName()
ne tentera pas la résolution de nom.
la bibliothèque open-source D'IPAddress Java validera toutes les représentations standard D'IPv6 et IPv4 et le fera sans recherche DNS. Avertissement: je suis le chef de projet de la bibliothèque.
le code suivant fera ce que vous demandez:
String s = "1.2.3.4";
try {
IPAddressString str = new IPAddressString(s);
IPAddress addr = str.toAddress();
InetAddress inetAddress = addr.toInetAddress(); //IPv4 or IPv6
if(addr.isIPv4() || addr.isIPv4Convertible()) {//IPv4 specific
IPv4Address ipv4Addr = addr.toIPv4();
Inet4Address inetAddr = ipv4Addr.toInetAddress();
//use address
}
} catch(AddressStringException e) {
//e.getMessage has validation error
}