Obtenir le nom de l’ordinateur client LAN dans une application Web basée sur un servlet

J’ai une application Spring MVC, qui fonctionne en réseau local. Dans ces machines client, les adresses IP changent de temps en temps. Par conséquent, je veux obtenir les noms des machines clientes (le nom de leur machine est fixe), car je veux obtenir les détails de la machine client sans créer de connexion.

Est-ce possible d’obtenir le nom de la machine cliente? si c’est possible comment ?? Ou existe-t-il un autre moyen d’obtenir ces informations utilisateur?

Edit: codes que j’ai essayés jusqu’ici

Dans HttpServlet

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { Ssortingng hostname = request.getRemoteUser(); //this gives null Ssortingng hostname = request.getRemoteHost(); //This gives host machine name } 

Edit: répondre à @Eugeny Loy In web.xml

  jcifs.smb.client.username username  

Dans la classe serverlet

 Ssortingng username = config.getInitParameter("username");//This gives client IP address 

J’ai trouvé le moyen d’obtenir le nom de la machine cliente.

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { Logger.getLogger(this.getClass()).warning("Inside Confirm Servlet"); response.setContentType("text/html"); Ssortingng hostname = request.getRemoteHost(); // hostname System.out.println("hostname"+hostname); Ssortingng computerName = null; Ssortingng remoteAddress = request.getRemoteAddr(); System.out.println("remoteAddress: " + remoteAddress); try { InetAddress inetAddress = InetAddress.getByName(remoteAddress); System.out.println("inetAddress: " + inetAddress); computerName = inetAddress.getHostName(); System.out.println("computerName: " + computerName); if (computerName.equalsIgnoreCase("localhost")) { computerName = java.net.InetAddress.getLocalHost().getCanonicalHostName(); } } catch (UnknownHostException e) { } System.out.println("computerName: " + computerName); } 

Est-ce possible d’obtenir le nom de la machine cliente?

Vous faites probablement référence au nom NetBIOS ici. Si tel est le cas – vous devez utiliser une bibliothèque qui implémente NetBIOS / SMB / CIFS dans Java pour ce faire.

si c’est possible comment ??

Jetez un coup d’œil à JCIFS . Je ne vous donnerai pas l’extrait de code exact, mais c’est la direction que vous devez suivre pour résoudre ce problème.

Ou existe-t-il un autre moyen d’obtenir ces informations utilisateur?

Pour autant que je comprenne votre problème, ce dont vous avez besoin est un moyen d’identifier l’hôte et vous ne pouvez pas compter sur l’adresse IP pour cela.

Si tel est le cas, l’une des autres options consisterait à utiliser une adresse MAC, mais vous ne pourrez probablement pas le faire avec pure java car il s’agit d’un protocole de bas niveau auquel Java traite normalement, il sera donc probablement moins portable. Ce tutoriel pourrait vous aider.

METTRE À JOUR

Je trouve la stack NetBIOS / SMB / CIFS mais je n’ai pas travaillé avec Java et JCIFS . C’est pourquoi je ne vous donnerai pas de code spécifique qui résoudra votre problème, mais plutôt la direction à suivre.

Découvrez les documents de la classe NbtAddress . Semble être ce que vous recherchez. Consultez également les exemples pour savoir comment l’utiliser.