Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中区分局域网上的在线IP地址与本地IP/其他机器IP_Java_Eclipse - Fatal编程技术网

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

如何在Java中区分局域网上的在线IP地址与本地IP/其他机器IP,java,eclipse,Java,Eclipse,在Java中,是否有任何可能的方法将在线IP地址与局域网上的本地/其他机器IP区分开来 我正在开发一个应用程序,需要识别用户输入的本地IP/LAN IP和在线IP地址 提前感谢。您可以使用一些API(如http://automation.whatismyip.com/n09230945.asp。如果您可以访问该API并获得IP,那么您就是“在线的”——即连接到internet。如果你不能,你就“离线”(除非主机关机等) 如果需要本地主机,可以使用 InetAddress thisIp =Inet

在Java中,是否有任何可能的方法将在线IP地址与局域网上的本地/其他机器IP区分开来

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


提前感谢。

您可以使用一些API(如
http://automation.whatismyip.com/n09230945.asp
。如果您可以访问该API并获得IP,那么您就是“在线的”——即连接到internet。如果你不能,你就“离线”(除非主机关机等)

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

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

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

< P>我意识到,没有办法仅仅基于IP(这不是java专用的,而是基于网络工作方式)来做的。 但是,如果您有其他信息,您可以这样做。有三个IP地址网络未在internet上使用。这些是:

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
如果您知道LAN IP地址将来自特定范围(包括运行应用程序的主机所在的网络),您可以区分;但是,不要在家里尝试,因为这会让你头疼。如果你在局域网中使用的IP地址也在互联网上使用,你不仅会有地址冲突,而且很难区分在线IP和局域网IP


不过,还有别的事情;如果您的用户试图通过internet“连接”,但在NAT之后,您的应用程序将只看到他们的流量来源,即为您的用户进行NAT的网关的公共IP。因此,例如,如果您的两个用户位于IP为10.0.1.0/24的LAN中的某个位置,但他们的网关的公共IP为123.123.123.123,则您的应用程序将看到这两个用户都具有IP 123.123.123.123

如果您打算以类似于VPN的方式使用身份验证,或者您必须了解NAT背后所有用户的所有网关的所有公共IP,那么您可能必须想出一种不同的身份验证方式



关于术语的说明,正如Marcelo所指出的:afaik,“在线”和“离线”不是IPs通常使用的术语。我们更喜欢谈论“公共”IP(在internet上看到的)和“私有”IP(在您自己的网络中,internet上没有人可以看到的)。

不太清楚,您想从外部WAN获取机器的LAN IP吗?如果是这样,你不能;当您使用NAT时,您只能看到外部IP。不,我需要知道如何区分应用程序中的在线和离线IP地址,以同时在线和离线工作。用户只需提供IP、名称和密码。您必须按IP地址的子网进行检查,并将其与主机的IP地址进行比较。如果它在同一子网中,则该IP地址与您的IP地址在同一本地子网中。否则,它位于远程子网上。你说的在线和离线到底是什么意思?@Kishore但你为什么要区分?局域网和广域网需要什么不同的行为?在我看来,说“局域网地址”和“广域网地址”更好。至于这个问题,区分LAN地址的唯一方法是检查它们是否在这三个范围内,例如Bach指定的范围内。LAN和WAN可能与Kishore描述的含义一起使用;严格地说,虽然我认为这是不合适的使用,因为你也可以有一个私人的广域网。拥有一个WAN可能会很昂贵,但在我看来,WAN并不是公共的同义词,LAN也不是私人的同义词。我也有点不喜欢WAN和LAN这两个术语,因为它们很模糊,并且没有暗示除了internet连接之外可能还有访问障碍。但这些都是我个人对这些条款的问题;在社区中,它们可能比私有和公共更广泛。事实上,用户的局域网和互联网之间也可能有一个或多个广域网:意大利最大的高速ISP使用这样一个广域网(这当然会给P2P和游戏带来很多问题,但我离题了);拥有嵌套的LAN并非不可能(例如在大学中)。这就是为什么我问他为什么他需要区分这两种情况。能给我一个否决票的理由吗?我看不出马塞洛说错了什么。