What is my (local) IP ? Un serveur java

Publié le 20 mai 2011 par Romainbochet

Beaucoup d'entre vous on surement déjà utilisé un service du genre whatismyip (différentes déclinaisons coexistent en saturant le marché). La plupart de ces services, malgré des looks folkloriques et nombres de petites spécialités telles que la géolocalisation (approximative) ou la détermination du navigateur, ont deux points communs :

  1. Votre adresse IP sur Internet ;
  2. Un tonne de publicité dont vous vous seriez bien passée, surtout quand vous devez chercher l'adresse suscitée entre une pub sur les jeunes filles russes à marier et celle du dernier ebook décrivant gagner 5400$/mois sans rien faire.

En tant que développeur Android, j'ai souvent besoin de connaitre l'adresse du terminal que je suis en train d'utiliser, et plus souvent encore sur le réseau local (par exemple pour faire du streaming entre le terminal et le PC).

En terme de cahier des charges, je  cherche donc à obtenir l'IP du téléphone le plus facilement possible sur mon ordinateur. Pour la petite histoire, trouver l'adresse IP d'un téléphone sous Android n'est pas spécialement rapide ; au choix promenade dans les menus de settings ou utilisation de la cryptique commande ip link qui renvoie des résultat différent en fonction de la version, le chipset, le fait que le téléphone soit rooté...

Solution : tant qu'on est dans Eclipse, autant faire un bout de programme en Java.

Programme

Il s'agit d'un programme qui ouvre un port en TCP sur la machine (7380 pour être précis, le code ASCII de "IP") et qui attend que des clients se connectent. Quand un d'entre eux touche le serveur :

  • Le serveur écrit l'adresse IP du client ;
  • Il renvoie au client sa propre IP et ferme la connexion.

Ce qui permet de déterminer d'avoir les adresses des deux cotés :

Serveur :

$ java -jar ~/Desktop/gimmeYourIP.jar
GimmeMyIP started (host: MacBook-Romain.local/192.168.1.7) -- listen on port 7380
Command: telnet 192.168.1.7 7380
Client connected: /192.168.1.23

Client :

$ telnet 192.168.1.7 7380
Trying 127.0.0.1...
Escape character is '^]'.
192.168.1.23

Si cela vous intéresse, vous pouvez télécharger le jar. Pour le lancer, utilisez simplement la ligne de commande

java -jar par/la/le/fichier/gimmeYourIP.jar

Le code source est disponible sur cette gist. Comme il s'agit d'un programme mono classe, je n'ai pas fait de projet, vous devriez pouvoir le compiler sans trop de soucis.