关于使用applet检测私有IP地址的建议

时间:2012-07-13 12:37:10

标签: java tomcat web-applications applet ip

我遇到一些麻烦来检测客户端的私有IP,它与我构建的Web应用程序相关。  看一下我的测试结果(在运行windows的机器中): 1 - 在一些机器(来自不同的位置,国家..)applet给我正确的IP但是 2 - 在其他人中我获得了ip = 127.0.0.1:          我试图解决这个问题?               A-例如:我已经停止了avast程序保护(网络防护),小程序开始给我正确的私人IP。               B-在其他机器上我试过“A点”,但它没有用               C-我也编辑主机文件,但我没有工作

我需要你帮助我理解发生了什么?在哪里寻找以解决这个问题...... 请不要回答“你为什么需要私有IP?它可能会改变......”......我知道所有要连接到我的Web应用程序的机器,所以我可以配置它们。

我的applet使用的部分源代码:

private String PrivateIP(boolean flag)
{
    String s1 = "unknown";
    String s2 = getDocumentBase().getHost();
    int i = 80;
    if(getDocumentBase().getPort() != -1)
        i = getDocumentBase().getPort();
    try
    {
        String s = (new Socket(s2, i)).getLocalAddress().getHostAddress();
        if(!s.equals("255.255.255.255"))
            s1 = s;
    }
    catch(SecurityException _ex)
    {
        s1 = "FORBIDDEN";
    }
    catch(Exception _ex)
    {
        s1 = "ERROR";
    }
    if(flag)
        try
        {
            s1 = (new Socket(s2, i)).getLocalAddress().getHostName();
        }
        catch(Exception _ex)
        {
            Stat = "Cannot Lookup this IP";
        }
    return s1;
}

我会告诉你更多信息:  为了从可能的其他方法获得ip,我已经对此http://www.auditmypc.com/digital-footprint.asp进行了训练,但结果相同,我还运行了http://www.auditmypc.com/firewall-test.asp并在机器中获得了我无法获得正确的ip a像“祝贺你没有任何打开的端口”xD ...

这样的消息

提前致谢!

1 个答案:

答案 0 :(得分:1)

首先,如果有多个网络接口,则客户端上可以有多个IP地址。您的方法返回哪一个取决于new Socket()用于打开哪个。

现在,您无需打开套接字即可获取客户端的IP。你可以做的是这样列举它们:

String host = InetAddress.getLocalHost().getHostName();

InetAddress[] addressArray = InetAddress.getAllByName(host);

String[] ipArray = new String[addressArray.length];
for (int i = 0; i < addressArray.length; i++) {
    InetAddress addr = addressArray[i];
    ipArray[i] = addr.getHostAddress();
}

return ipArray;

现在ipArray将在客户端工作站上保存可用IP地址列表。