1

我有在 LAN 中运行的 spring MVC 应用程序。在那里,客户端机器的 IP 地址会不时更改。因此我想获取客户端机器名称(它们的机器名称是固定的),因为我想在不创建登录的情况下获取客户端机器的详细信息。

是否有可能获得客户端机器的名称?如果有可能怎么办?或者有没有其他方法可以获取该用户详细信息

编辑:到目前为止我尝试过的代码

在 HttpServlet 中

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

编辑:在 web.xml 中回复@Eugeny Loy

<init-param>
    <param-name>jcifs.smb.client.username</param-name>
    <param-value>username</param-value>

</init-param>

在 serverlet 类中

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

2 回答 2

1

我找到了获取客户端机器名称的方法。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 

    Logger.getLogger(this.getClass()).warning("Inside Confirm Servlet");  
    response.setContentType("text/html");

    String hostname = request.getRemoteHost(); // hostname
    System.out.println("hostname"+hostname);

    String computerName = null;
    String 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);
}    
于 2014-01-08T09:27:38.390 回答
0

是否有可能获得客户端机器的名称?

您可能在这里指的是 NetBIOS 名称。如果是这种情况 - 您应该使用一些在 java 中实现 NetBIOS/SMB/CIFS 的库来执行此操作。

如果有可能怎么办?

看看JCIFS。我不会给你确切的代码片段,但这是你应该解决这个问题的方向。

或者有没有其他方法可以获取该用户详细信息

据我了解您的问题,您需要的是一种识别主机的方法,而您不能依赖 IP 地址。

如果是这种情况,其他选项之一是使用 MAC 地址,但您可能无法使用纯 java 执行此操作,因为这是 java 通常处理的更底层协议,因此它可能不太便携。本教程可能会有所帮助。

更新

我遇到了 NetBIOS/SMB/CIFS 堆栈,但我没有在 Java 和 JCIFS 中使用过它。这就是为什么我不会给你具体的代码片段来解决你的问题,而是给你应该看的方向。

查看NbtAddress类文档。似乎是您正在寻找的东西。另请查看示例以了解如何使用它。

于 2013-12-10T12:30:08.863 回答