0

我在检测连接到我构建的 Web 应用程序的客户端私有 IP 时遇到了一些麻烦。看看我的测试结果(在运行 Windows 的机器上): 1-在某些机器上(来自不同的位置,国家..)小程序给了我正确的 ip,但 2-在其他机器上我获得了 ip=127.0.0.1 : 我有什么办法解决这个问题?A- 例如:我已经停止了 avast 程序保护(网络防护),并且小程序开始给我正确的私有 IP。B- 在其他机器上,我尝试了“A 点”,但没有成功 C- 我也编辑主机文件,但效果不佳

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

我的小程序使用的部分源代码:

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;
}

我会告诉你更多信息:我已经训练了这个http://www.auditmypc.com/digital-footprint.asp以便从可能的其他方法获取 ip,但结果相同,我还运行了http: //www.auditmypc.com/firewall-test.asp并在我无法获得正确 ip 的机器中获得了一条消息,例如“恭喜您没有任何端口可以打开”xD ...

提前致谢!

4

1 回答 1

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 地址的列表。

于 2012-07-13T13:14:34.877 回答