java - 如何使用Java获取客户端的LAN IP?

标签 java ip ip-address lan

如何使用 Java 获取计算机的 LAN IP 地址?我想要连接到路由器和网络其余部分的 IP 地址。

我试过这样的:

Socket s = new Socket("www.google.com", 80);
String ip = s.getLocalAddress().getHostAddress();
s.close();

这似乎在某些情况下有效,但有时它会返回环回地址或完全不同的东西。此外,它需要互联网连接。

有没有人有更准确的方法来做到这一点?

编辑: 认为在这里提问比在评论中提问更好..

如果你有很多接口(interface)怎么办?例如,一个用于电缆,一个用于 wifi 和一个用于虚拟盒子等等。是不是无法真正看到哪一个连接到网络?

最佳答案

试试 java.net.NetworkInterface

import java.net.NetworkInterface;

...

for (
    final Enumeration< NetworkInterface > interfaces =
        NetworkInterface.getNetworkInterfaces( );
    interfaces.hasMoreElements( );
)
{
    final NetworkInterface cur = interfaces.nextElement( );

    if ( cur.isLoopback( ) )
    {
        continue;
    }

    System.out.println( "interface " + cur.getName( ) );

    for ( final InterfaceAddress addr : cur.getInterfaceAddresses( ) )
    {
        final InetAddress inet_addr = addr.getAddress( );

        if ( !( inet_addr instanceof Inet4Address ) )
        {
            continue;
        }

        System.out.println(
            "  address: " + inet_addr.getHostAddress( ) +
            "/" + addr.getNetworkPrefixLength( )
        );

        System.out.println(
            "  broadcast address: " +
                addr.getBroadcast( ).getHostAddress( )
        );
    }
}

关于java - 如何使用Java获取客户端的LAN IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2845279/

相关文章:

java - Mahout:缺少创建序列文件的类

java - 如何在 Java 中设置数组?

java - spring-boot 在多模块应用程序上失败

google-app-engine - Google App Engine - IP 地址列表?

c++ - C 中的多位 Trie 实现

java - 如何将一个简单的 GUI java 类转换为 applet?

java - 如何检查IP地址范围是否属于A类、B类、C类

c++ - 如何在 C++ 中找到映射网络驱动器的 IP 地址?

browser - 在 Vaadin 14 应用程序的服务器端通过 Java 获取用户 Web 浏览器的 IP 地址

asp.net - 无法获取用户 IP 地址(代理/防火墙/负载均衡器)