Comment puis-je déterminer l'adresse IP de mon routeur / passerelle en Java?
Comment puis-je déterminer l'adresse IP de mon routeur/passerelle en Java? Je peux obtenir mon IP assez facilement. Je peux obtenir mon IP internet à l'aide d'un service sur un site web. Mais comment puis-je déterminer mon IP de la passerelle?
C'est un peu facile .NET si vous connaissez votre chemin autour. Mais comment voulez-vous le faire en Java?
source d'informationauteur Frank Krueger | 2008-08-15
Vous devez vous connecter pour publier un commentaire.
Java n'est pas aussi agréable que dans d'autres langues, malheureusement. Voici ce que j'ai fait:
Cela suppose que la passerelle est le deuxième jeton et pas le troisième. Si elle est, vous devez ajouter un supplément de
st.nextToken();
à l'avance le tokenizer un plus de place.Sur Windows, OSX, Linux, etc puis Chris Bunch réponse peut être beaucoup améliorée par l'utilisation de
en place d'un
traceroute
commande.Adresse IP de votre passerelle apparaît dans le deuxième champ de la ligne qui commence soit
default
ou0.0.0.0
.Cela permet de contourner un certain nombre de problèmes avec le fait d'essayer d'utiliser
traceroute
:traceroute
est en faittracert.exe
donc il n'y a pas besoin d'O/S dépendances dans le codetraceroute
est parfois bloqué par le réseauLe seul inconvénient c'est qu'il va être nécessaire de continuer la lecture des lignes de la
netstat
de sortie jusqu'à ce que la ligne droite est trouvé, depuis, il y a plus d'une ligne de sortie.EDIT: La Passerelle par Défaut l'Adresse IP est dans le deuxième champ de la ligne qui commence par "par défaut" si vous êtes sur un MAC (testé sur Lion), ou dans le troisième champ de la ligne qui commence par '0.0.0.0' (testé sur Windows 7)
Windows:
Mac:
Sur windows analyse de la sortie de la commande IPConfig, vous obtiendrez la passerelle par défaut, sans attendre une trace.
Vous feriez mieux d'utiliser quelque chose comme checkmyip.org qui permettra de déterminer votre adresse IP publique - pas nécessairement votre premier saut routeur: à l'Uni, j'ai une "vraie" adresse IP, alors que chez moi c'est mon local adresse IP publique du routeur.
Vous pouvez analyser la page qui renvoie la, ou trouver un autre site qui vous permet de simplement obtenir l'adresse IP comme la seule chaîne.
(Je suis sens de la charge cette URL dans Java/whatever, et ensuite obtenir l'info dont vous avez besoin).
Cela devrait être totalement indépendant de la plateforme.
Concernant UPnP: soyez conscient que tous les routeurs prennent en charge l'UPnP. Et si ils le font, il peut être éteint (pour des raisons de sécurité). Si votre solution ne peut pas toujours travailler.
Vous devriez aussi jeter un oeil à NatPMP.
Une simple bibliothèque pour UPnP peut être trouvé à http://miniupnp.free.fr/si c'est en C...
À surmonter les problèmes mentionnés avec traceroute (basée sur ICMP, vaste zone hit) vous pourriez envisager:
sortie de la commande netstat -rn paramètres régionaux spécifiques.
sur mon système (locale=fr) la sortie ressemble à ceci:
...
Standardgateway: 10.22.0.1
donc il n'y a pas de ligne commençant par 'défaut'.
donc, à l'aide de la commande netstat peut-être pas une bonne idée.
Cette Version se connecte à http://www.whatismyip.com lit le contenu du site et des recherches via des expressions régulières, l'adresse ip et l'imprime pour le cmd. Son un peu d'amélioration de MosheElishas Code
Qui n'est pas aussi facile qu'il y paraît. Java est indépendant de la plateforme, donc je ne suis pas sûr de savoir comment faire en Java. Je suis deviner.NET contacts quelques sites web qui vous le rend. Il ya un couple de façons de le faire. Tout d'abord, un regard plus profond dans le protocole ICMP peut vous donner les informations dont vous avez besoin. Vous pouvez également tracer l'adresse IP que vous passer à travers (itinéraire). Lorsque vous rencontrez une IP qui n'est pas dans les plages suivantes:
c'est l'IP d'un saut loin de la vôtre, et probablement actions de quelques octets d'informations avec votre adresse IP.
Meilleur de la chance. Je serai curieux d'entendre une réponse définitive à cette question.
Essayez les bombardements de traceroute, si vous en avez.
"traceroute -m 1 http://www.amazon.com' émet quelque chose comme ceci:
Analyser la deuxième ligne. Oui, c'est moche, mais ça va vous aider à aller jusqu'à ce que quelqu'un poste quelque chose de plus sympa.
Matthieu: Oui, c'est ce que je voulais dire par "je peux avoir mon IP internet à l'aide d'un service sur un site web." Désolé d'être simple.
Brian/Pseudo: Traceroute serait bien sauf pour le fait que beaucoup de ces routeurs ont ICMP désactivé et donc il décroche toujours.
Je pense qu'une combinaison de traceroute et uPnP marchera. C'est ce que j'avais l'intention de le faire, j'en espérant juste qu'il me manquait quelque chose d'évident.
Merci à tous pour vos commentaires, donc ça sonne comme je ne suis pas manque rien d'évident. J'ai commencé la mise en œuvre de certains bits de l'uPnP afin de découvrir la passerelle.
Vous pouvez interroger l'URL "http://whatismyip.com/automation/n09230945.asp".
Par exemple:
Dans windows, vous pouvez simplement utiliser la commande suivante:
Qui vous donnera de sortie comme:
Cependant, je ne peut pas exécuter cette commande avec Java, va poster quand je comprendre cela.
Vous pouvez utiliser
netstat -rn
de commande qui est disponible sur Windows, OSX, Linux, etc plate-forme. Voici mon code: