java中获取本地IP地址

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中获取本地IP地址相关的知识,希望对你有一定的参考价值。

Enumeration<NetworkInterface> netInterfaces = null;
try
netInterfaces = NetworkInterface.getNetworkInterfaces();
while (netInterfaces.hasMoreElements())
NetworkInterface ni = netInterfaces.nextElement();
System.out.println("DisplayName:" + ni.getDisplayName());
System.out.println("Name:" + ni.getName());
Enumeration<InetAddress> ips = ni.getInetAddresses();
while (ips.hasMoreElements())
System.out.println("IP:"
+ ips.nextElement().getHostAddress());


catch (Exception e)
e.printStackTrace();


用了枚举,说是因为可以获取本地的所有IP地址,什么情况下会有多个IP地址?另外,如何在J2ME中获取嵌入式设备的IP地址?也要枚举吗?

谢谢!

方法如下:
方法一,使用CMD命令:
public static String getLocalIPForCMD()
StringBuilder sb = new StringBuilder();
String command = "cmd.exe /c ipconfig | findstr IPv4";
try
Process p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while((line = br.readLine()) != null)
line = line.substring(line.lastIndexOf(":")+2,line.length());
sb.append(line);

br.close();
p.destroy();
catch (IOException e)
e.printStackTrace();

return sb.toString();

方法二,使用Java方法:
public static String getLocalIPForJava()
StringBuilder sb = new StringBuilder();
try
Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
while (en.hasMoreElements())
NetworkInterface intf = (NetworkInterface) en.nextElement();
Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
while (enumIpAddr.hasMoreElements())
InetAddress inetAddress = (InetAddress) enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress()
&& inetAddress.isSiteLocalAddress())
sb.append(inetAddress.getHostAddress().toString()+"\\n");



catch (SocketException e)
return sb.toString();
参考技术A java.net.InetAddress.getLocalHost().getHostAddress() 参考技术B try
System.out.println(java.net.InetAddress.getLocalHost().getHostAddress());
catch (UnknownHostException e)
// TODO Auto-generated catch block
e.printStackTrace();
追问

这个是J2ME中的方法吗?不需要枚举吗?

追答

一个机器怎么可能有多个IP呢? 不会吧。。。

追问

我在网上看了好多都是我问题补充里的那个代码,都用到了枚举?为什么呢?

追答

啊,我才看到问题补充,不好意思,J2ME不太清楚。

参考技术C 这个情况很多了,比哪机器有双网卡的时候,或者你机器配了vpn的时候。。本回答被提问者采纳 参考技术D 当本地有多张网卡时可以有多个IP地址,

在PHP中获取本地机器IP地址[重复]

【中文标题】在PHP中获取本地机器IP地址[重复]【英文标题】:Get Local Machine IP Address in PHP [duplicate] 【发布时间】:2017-02-02 16:35:08 【问题描述】:

我希望获取特定设备必须在其上运行的本地机器 IP 地址。要运行该页面,我首先检查本地 IP 地址是否与指定的 IP 地址匹配,然后才会打开该页面。我正在用 PHP 编程。

我尝试过 $_SERVER 和 getenv,但它们提供的地址与我的计算机的 IP 地址不匹配。此外,每次连接刷新时它们都会改变。

请帮忙。

【问题讨论】:

您想要client 计算机(浏览器运行的地方)还是server 计算机(PHP 程序实际运行的地方)的地址?请记住,在大多数情况下,PHP 是一种服务器 端编程语言。 我想要客户端计算机的地址。我想检查是我的电脑,还是指定人的电脑,才可以打开页面。 这不是很好的安全性。如果您使用的是分配给您的地址不是静态和固定的宽带订阅,这也可能是不可能的。 $localIPAddress = getHostByName(getHostName()); 试试这个 客户端计算机(您的计算机)是否与服务器在同一个本地网络上?或者是通过互联网连接的客户端计算机。对于本地网络上的两者,您需要告诉路由器始终为每台计算机分配相同的 IP 地址。为此,您可以在路由器管理页面中按 MAC 地址分配 IP。这样,您的计算机和服务器将始终具有相同的 IP 地址。现在,如果您的客户通过互联网连接?那是另一个故事......还有更多的工作:) 【参考方案1】:

您可以使用$_SERVER['REMOTE_ADDR']$_SERVER['REMOTE_HOST'] 变量找到IP 地址。

或者你也可以试试:

来自 CLI

PHP

$myIp= getHostByName(php_uname('n'));
 echo $myIp;

PHP >= 5.3.0

$myIp = getHostByName(getHostName());
echo $myIp;

对于客户端 IP 地址,您可以点击以下链接: 来源:Get the client IP address using PHP

【讨论】:

以上是关于java中获取本地IP地址的主要内容,如果未能解决你的问题,请参考以下文章

如何在Node.js中获取本机本地IP地址

java 获取的是本地的IP地址

在PHP中获取本地机器IP地址[重复]

如何获取本地计算机的 IP 地址?

Python:获取linux中本地接口/ IP地址的默认网关

如何获取本地IP地址python?