当前位置: 首页 > 面试题库 >

在不连接互联网的情况下获取本地IP地址

严项明
2023-03-14
问题内容

因此,我正在尝试获取本地网络中本机的IP地址(应该是192.168.178.41)。

我的初衷是使用这样的东西:

InetAddress.getLocalHost().getHostAddress();

但它只会返回127.0.0.1,这是正确的,但对我却没有太大帮助。

我四处搜索并找到了这个答案http://codingdict.com/questions/121424,它仅创建了Socket到某些网页的-
connection(例如“ google.com”),并从套接字获取了本地主机地址:

Socket s = new Socket("google.com", 80);
System.out.println(s.getLocalAddress().getHostAddress());
s.close();

这确实适用于我的机器(返回192.168.178.41),但需要连接到互联网才能工作。由于我的应用程序不需要互联网连接,并且每次启动应用程序都尝试连接到Google时似乎“可疑”,所以我不喜欢使用它的想法。

因此,在进行了更多研究之后,我偶然发现了NetworkInterface-class,它(也做了一些工作)也返回了所需的IP地址:

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()){
    NetworkInterface current = interfaces.nextElement();
    System.out.println(current);
    if (!current.isUp() || current.isLoopback() || current.isVirtual()) continue;
    Enumeration<InetAddress> addresses = current.getInetAddresses();
    while (addresses.hasMoreElements()){
        InetAddress current_addr = addresses.nextElement();
        if (current_addr.isLoopbackAddress()) continue;
        System.out.println(current_addr.getHostAddress());
    }
}

在我的机器上,这将返回以下内容:

name:eth1 (eth1)
fe80:0:0:0:226:4aff:fe0d:592e%3
192.168.178.41
name:lo (lo)

它会找到我的两个网络接口并返回所需的IP,但是我不确定其他地址(fe80:0:0:0:226:4aff:fe0d:592e%3)的含义。

另外,我还没有找到一种方法来从返回的地址中过滤掉它(通过使用isXX()-object的-
方法InetAddress),然后再使用RegEx,我发现它很“脏”。

除了使用RegEx或互联网之外,还有其他想法吗?


问题答案:

fe80:0:0:0:226:4aff:fe0d:592e是您的ipv6地址;-)。

使用此检查

if (current_addr instanceof Inet4Address)
  System.out.println(current_addr.getHostAddress());
else if (current_addr instanceof Inet6Address)
  System.out.println(current_addr.getHostAddress());

如果您只关心IPv4,则只需丢弃IPv6情况。但是请注意,IPv6是未来的^^。

PS:检查您break的某些s是否应该是continues。



 类似资料:
  • 问题内容: 我有一个项目,必须将其部署到无法连接到Internet的客户端Windows系统。我目前在D:\ NODE中有一个文件夹,其中包含node.exe和npm.cmd以及一个node_modules文件夹。为了能够从命令行运行节点,我将D:\ NODE添加到PATH变量中。 我可以将大多数模块本地安装在项目的node_modules内部。但是,只有一个-节点窗口-需要全局安装才能运行。 按

  • 我希望在连接到wifi网络时,在运行我的应用程序的手机上获取用户的本地IPv4地址。使用以下代码: 我可以得到一些接近IPv4地址的信息,但与命令行中的IPv4地址相比,它并不完全相同。有更好的办法吗?我知道formatIpAddress已被弃用,但在我找到获取IPv4地址的方法之前,我暂时不太担心这个问题。 编辑: 我发现手机wifi设置中的ip地址是我在使用建议的解决方案获取ip地址时得到的。

  • 问题内容: 在Linux上,如何使用python查找本地IP地址/接口的默认网关? 我看到了“如何获取UPnP的内部IP,外部IP和默认网关”的问题,但是公认的解决方案仅显示了如何获取Windows网络接口的本地IP地址。 谢谢。 问题答案: 对于那些不想额外依赖并且不喜欢调用子流程的人,可以通过直接阅读以下内容来自己做: 我没有要测试的大端字节序计算机,因此我不确定字节序是否取决于您的处理器体系

  • 我正在开发一款嵌入式设备,它可以通过WiFi与iPad(仅限WiFi)进行通信。但是,这些设备未连接到internet。它们只是连接到一个特定的端口,该端口不断地转发某些信息。iPad连接到接入点,从DHCP接收IP地址,现在可以到达所需的位置 我看到的是频繁的断开连接,或连接中断。 我的怀疑是iPad无法连接到导致它重新扫描WiFi网络或以其他方式暂时中断连接。 有没有办法禁用这种行为,或者确保

  • 问题内容: 我的机器上运行了一个简单的node.js程序,我想获取运行该程序的PC的本地IP地址。如何使用node.js获得它? 问题答案:

  • 本文向大家介绍Shell脚本获取本地网卡IP、mac地址、子网掩码、dns IP、外网IP,包括了Shell脚本获取本地网卡IP、mac地址、子网掩码、dns IP、外网IP的使用技巧和注意事项,需要的朋友参考一下