如何通过Java获取linux上电脑的ip?
如何通过Java获取linux下电脑的ip?
我在网上搜索了一些例子,我发现了一些有关 NetworkInterface 类的内容,但我无法理解如何获取 Ip 地址。
如果我同时运行多个网络接口,会发生什么情况? 将返回哪个 IP 地址。
我真的很感激一些代码示例。
PS:到目前为止,我一直使用 InetAddress 类,这对于跨平台应用程序来说是一个糟糕的解决方案。 (win/Linux)。
How to get the ip of the computer on linux through Java ?
I searched the net for examples, I found something regarding NetworkInterface class, but I can't wrap my head around how I get the Ip address.
What happens if I have multiple network interfaces running in the same time ? Which Ip address will be returned.
I would really appreciate some code samples.
P.S: I've used until now the InetAddress class which is a bad solution for cross-platform applications. (win/Linux).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
不要忘记环回地址,这些地址在外部是不可见的。 这是一个提取第一个非环回 IP(IPv4 或 IPv6)的函数
Do not forget about loopback addresses, which are not visible outside. Here is a function which extracts the first non-loopback IP(IPv4 or IPv6)
来自 Java 教程
为什么是
InetAddress< /code> 不是一个好的解决方案吗? 我在文档中没有看到有关跨平台兼容性的任何内容?
此代码将枚举所有网络接口并检索它们的信息。
以下是示例程序的示例输出:
From Java Tutorial
Why is
InetAddress
not a good solution? I don't see anything in the docs about cross platform compatibility?This code will enumerate all network interfaces and retrieve their information.
The following is sample output from the example program:
这段代码在 4me 上有效:
This code worked 4me:
只返回第一个非环回接口是不行的,因为它可能是由 Parallels 等软件创建的。 尝试钓鱼 eth0 是更好的选择。
It's not ok to just return the first non-loopback interface as it might have been created by some software like Parallels. It's a better bet to try fishing for the eth0.
在我的例子中,最简单的解决方案是
Socket.getLocalAddress()
。 我必须专门为此目的打开套接字,但对于我的 Ubuntu 10.04 计算机上的所有网络接口,这是获取外部 IP 地址的唯一方法。The simplest solution in my case was
Socket.getLocalAddress()
. I had to open the Socket specifically for that purpose, but with all the NetworkInterfaces on my Ubuntu 10.04 machine it was the only way to get the external IP address.我发现的最好的解决方案是在 linux / ubuntu 机器上运行命令。
所以我运行这个命令
hostname -I | 使用 java.cut -d' ' -f1
注意 - 方法的第二部分只是收集输出。
The best solution i've found is to run command on linux / ubuntu machine.
So I run this command
hostname -I | cut -d' ' -f1
using java.note - second part of method is just to collect the output.