Java轻松获取Linux主机IP,助力网络应用开发 (java获得linux主机ip)

在网络应用开发中,获取主机IP地址是非常常见的操作。对于Linux系统的开发者来说,获取主机IP地址也是必不可少的一步。在Java中,获取Linux主机IP地址可以使用InetAddress类,在Java 8中,还有更加简单的方法。本篇文章将介绍如何轻松获取Linux主机IP地址,为网络应用的开发提供帮助和便利。

使用InetAddress类获取Linux主机IP

InetAddress类是Java中用于处理IP地址和DNS相关操作的类。可以通过InetAddress类中的getByName()方法获取主机的IP地址。

示例代码:

“`

import java.net.*;

public class GetIP {

public static void mn(String[] args) throws UnknownHostException {

InetAddress ip = InetAddress.getByName(“localhost”);

System.out.println(“IP地址:” + ip.getHostAddress());

}

}

“`

运行以上示例代码,将输出:

“`

IP地址:127.0.0.1

“`

使用InetAddress类通过主机名获取IP地址是非常简单的。但是,在有些情况下我们需要获取Linux主机的本地IP地址,这时候,我们可以使用Java 8中的新特性。

使用Java 8中的新特性获取Linux主机IP

Java 8中提供了一个新特性,可以直接获取Linux主机的本地IP地址。这项新特性主要的实现类是NetworkInterface,可以使用NetworkInterface类的getByName()方法获取本地网络接口对象。

示例代码:

“`

import java.net.*;

import java.util.*;

public class GetLocalIP {

public static void mn(String[] args) throws Exception {

Enumeration interfaces = NetworkInterface.getNetworkInterfaces();

while(interfaces.hasMoreElements()){

NetworkInterface networkInterface = interfaces.nextElement();

Enumeration addresses = networkInterface.getInetAddresses();

while(addresses.hasMoreElements()){

InetAddress address = addresses.nextElement();

if(address instanceof Inet4Address && !address.isLinkLocalAddress()){

System.out.println(“本地IP:” + address.getHostAddress());

}

}

}

}

}

“`

运行以上示例代码,将输出:

“`

本地IP:192.168.0.100

“`

使用Java 8中的新特性获取Linux主机IP地址非常简便,只需调用getNetworkInterfaces()方法即可。通过NetworkInterface类的getInetAddresses()方法,可以获取当前网络接口中的所有IP地址,最后用if判断找到本地网络IP地址即可。

本篇文章介绍了如何使用Java获取Linux主机IP地址。通过InetAddress类可以获取主机名对应的IP地址,在Java 8中,使用getNetworkInterfaces()方法可以获取当前系统中的所有网络接口,再使用getInetAddresses()方法可以获取当前网络接口中的所有IP地址,通过if进行筛选,最终可以得到Linux主机的本地IP地址。

相关问题拓展阅读:

怎样通过Java程序 获取本机IP地址..试了几种方法都不行 获取的都是192.168.*.*这种.想得到网络IP那种,求

在P里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。

如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 192.168.1.110,而并不是客户端的真实IP。

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问 时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问 ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。

于是可得出获得客户端真实IP地址的方法一:

public String getRemortIP(HttpServletRequest request) {

if (request.getHeader(“x-forwarded-for”) == null) {

return request.getRemoteAddr();

}

return request.getHeader(“x-forwarded-for”);

}

可是当我访问 时,返回的IP地址始终是unknown,也并不是如上所示的127.0.0.1 或 192.168.1.110了,而我访问 :2023/index.jsp 时,则能返回客户端的真实IP地址,写了个方法去验证。原因出在了Squid上。squid.conf 的配制文件 forwarded_for 项默认是为on,如果 forwarded_for 设成了 off 则:X-Forwarded-For: unknown

于是可得出获得客户端真实IP地址的方法二:

public String getIpAddr(HttpServletRequest request) {

String ip = request.getHeader(“x-forwarded-for”);

if(ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {

ip = request.getHeader(“Proxy-Client-IP”);

}

if(ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {

ip = request.getHeader(“WL-Proxy-Client-IP”);

}

if(ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {

ip = request.getRemoteAddr();

}

return ip;

}

可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串Ip值,究竟哪个才是真正的用户端的真实IP呢?

答案是取X-Forwarded-For中之一个非unknown的有效IP字符串。

如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100用户真实IP为: 192.168.1.110

你应该是拔号上网

如果可以的话,请搜索一下网络,得到java怎么调用dos的方法,然后你可以解析ipconfig /all这个命令的结果,得到你想要的公网IP

大部分情况下,用户都是通过路由来上网的,也就是说,电脑根本不知道自己的公网IP是多少,他只知道路由分配给它的内网IP,这个时候,我们只能通过别的网站来判断。

下面是以前我以前写的一个小程序,通过

www.ip138.com

得到自己的公网IP

程序我就不解释了,既然你能懂J2EE,应该能看懂下面的代码,无非是访问网络资源,简单的IO操作,字符串解析等。

public static void main(String args) throws Exception {

//

URL url = new URL(“

www.ip138.com

/ip2city.asp”);

URLConnection conn = url.openConnection();

conn.setRequestProperty(

“User-Agent”,

“Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.15) Gecko/Firefox/3.6.15”);

conn.setRequestProperty(“Content-Type”, “text/html”);

conn.setRequestProperty(“Accept”,

“text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8”);

InputStream is = conn.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is,

“GB2312”));

String line = null;

while ((line = br.readLine()) != null) {

if (line.contains(“您的IP地址是”)) {

// System.out.println(line);

int start = line.indexOf(‘

int end = line.indexOf(‘>’);

System.out.println(line.substring(start, end));

}

}

br.close();

}

你怕麻烦就行了吗?纯java的是不管获取的!只有P里面的request.getRemoteAddr()请求服务器才行!因为你要获取IP地址,你要怎么做?你肯定是要发送一个请求告诉计算机我要获取IP了,可是是什么接收这个请求呢?当然是服务器啦!所以呀,学知识不能怕麻烦哦~加油!tomcat很容易的!

java获得linux主机ip的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java获得linux主机ip,Java轻松获取Linux主机IP,助力网络应用开发,怎样通过Java程序 获取本机IP地址..试了几种方法都不行 获取的都是192.168.*.*这种.想得到网络IP那种,求的信息别忘了在本站进行查找喔。


数据运维技术 » Java轻松获取Linux主机IP,助力网络应用开发 (java获得linux主机ip)