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?

22
demandé sur user207421 2010-02-22 08:42:35

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.

17
répondu John Gardiner Myers 2016-12-10 11:01:31

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.

13
répondu Matthew Flaschen 2014-12-02 00:06:06

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!

3
répondu wu-lee 2013-11-18 16:10:34

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.

1
répondu Raedwald 2017-05-23 12:25:55

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
      }
0
répondu Sean F 2017-12-18 02:27:12