Trouver toutes les adresses IP dans le réseau local
Je veux trouver toutes les adresses IP des périphériques du réseau local, je suis actuellement connecté à l'aide de code Java. L'utilitaire utile Advanced IP Scanner
est capable de trouver des adresses IP dans mon sous-réseau de 192.168.178/24
:
Selon cette réponse, j'ai construit mon code de la manière suivante:
import java.io.IOException;
import java.net.InetAddress;
public class IPScanner
{
public static void checkHosts(String subnet) throws IOException
{
int timeout = 100;
for (int i = 1; i < 255; i++)
{
String host = subnet + "." + i;
if (InetAddress.getByName(host).isReachable(timeout))
{
System.out.println(host + " is reachable");
}
}
}
public static void main(String[] arguments) throws IOException
{
checkHosts("192.168.178");
}
}
Malheureusement, cela ne veut pas imprimer tous les résultats, ce qui signifie qu'aucune adresse IP n'est accessible. Pourquoi? Il existe des appareils dans mon réseau local, comme vu dans le Advanced IP Scanner
scan.
J'ai vérifié que le code sur mon réseau, à l'aide de diffusion, que le mien IP ou d'essayer "www.google.com". Dit toujours "non accessible". Cochez cette réponse: stackoverflow.com/questions/9922543/...
Double Possible de Comment obtenir une liste d'IP connecté au même réseau (sous-réseau) à l'aide de Java
Double Possible de Comment obtenir une liste d'IP connecté au même réseau (sous-réseau) à l'aide de Java
OriginalL'auteur BullyWiiPlaza | 2015-09-10
Vous devez vous connecter pour publier un commentaire.
Essayer d'augmenter le délai d'attente. J'ai utilisé environ 5000 ms, cela m'a aidé.
Dans le cas où vous ne voulez pas attendre 5000ms * 254 = 21 minutes, essayez aussi de ce code avec en parallèle une requête ping à l'adresse:
A fonctionné parfaitement pour moi.
OriginalL'auteur The_Programmer
InetAddress.isReachable va utiliser de REQUÊTE d'ÉCHO ICMP (comme quand tu fais un ping) ou de la demande sur le port 7 (echo port): http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#isReachable%28int%29
Advance IP scanner peut-être utiliser une autre façon de découvrir les hôtes (comme une demande sur radmin port ou une demande sur http).
Un hôte peut être mais ne pas répondre à la REQUÊTE d'ÉCHO ICMP.
avez vous essayez un ping de l'hôte à partir de la ligne de commande?
OriginalL'auteur seneque
Peut-être essayer d'utiliser
InetAddress.getByAddress(host)
au lieu degetByName
, comme ceci:J'ai pris cet exemple pour la détection automatique de code à partir d'ici
OriginalL'auteur vgm
Java 8 flux de solution
/24
réseaux, mais il y a d'autres réseau tailles, trop.OriginalL'auteur Ivo Skalický