如何在Java中区分在线IP地址与LAN上的本地IP /其他机器IP

时间:2012-01-31 13:02:47

标签: java eclipse

有没有办法区分在线IP地址与Java上的本地/其他机器IP?

我正在开发一个应用程序,需要识别用户输入的本地IP / LAN IP和在线IP地址。

提前致谢。

2 个答案:

答案 0 :(得分:3)

据我所知,没有办法完全基于IP(这不是特定于Java,而是基于网络的工作方式)。

但是,如果您有其他信息,则可以执行此操作。互联网上没有三个IP地址网络。那些是:

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

如果您知道LAN IP地址将来自特定范围(包括运行您的应用程序的主机所在的网络),您可以区分;然而 - 并且不要在家里试试这个孩子,因为它会让你头疼 - 如果你在局域网中使用也在互联网上使用的IP地址,你不仅会遇到地址冲突,而且还有麻烦要区分在线和局域网的IP。


其他的东西;如果您的用户尝试通过互联网“连接”,但是在NAT后面,您的应用程序只会将其流量来源视为为您的用户执行NAT的网关的公共IP。因此,例如,如果您的两个用户位于局域网中,IP为10.0.1.0/24,但其网关的公共IP为123.123.123.123,则您的应用程序将看到两个用户拥有IP 123.123.123.123 < / p>

如果您打算以类似于VPN的方式使用此方法,或者您必须知道NAT后面所有用户的所有网关的所有公共IP,则可能必须提出不同的身份验证方式。


关于术语的说明,正如Marcelo指出的那样:afaik,“在线”和“离线”不是通常与IP一起使用的术语。我们宁愿谈论“公共”(在互联网上看到的)和“私人”IP(在互联网上没有人在你自己的网络中看到的)。

答案 1 :(得分:0)

您可以使用某些API(例如http://automation.whatismyip.com/n09230945.asp)获取外部IP。如果您可以访问该API并获得IP,那么您就是“在线” - 即连接到互联网。如果你不能,你就“离线”(除非主机关闭等)。

如果您需要本地主机,可以使用

InetAddress thisIp =InetAddress.getLocalHost();
System.out.println("IP:"+thisIp.getHostAddress())

请澄清您认为的“离线IP地址”,因为我之前从未听说过这样的概念。