如果是在windows环境: 使用InetAddress.getLocalHost()方法即可.

import java.net.InetAddress;public class Main {public static void main(String[] args) throws Exception {InetAddress addr = InetAddress.getLocalHost();System.out.println("Local HostAddress: "+addr.getHostAddress());String hostname = addr.getHostName();System.out.println("Local host name: "+hostname);}
}

代码运行结果:

Local HostAddress: 192.168.42.2
Local host name: f19ca2b695da

在linux下上述获取IP的方式有时候会得到127.0.0.1.

从JDK1.4开始,Java提供了一个NetworkInterface类。这个类可以得到本机所有的物理网络接口和虚拟机等软件利用本机的物理网络接口创建的逻辑网络接口的信息,NetworkInterface可以通过getNetworkInterfaces方法来枚举本机所有的网络接口。我们也可以利用getNetworkInterfaces得到的网络接口来枚举本机的所有IP地址。当然,也可以通过InetAddress类的getAllByName来得到本机的所有IP地址:

public static Enumeration<NetworkInterface> getNetworkInterfaces() throws SocketException

但getNetworkInterfaces方法可以按网络接口将这些IP地址进行分组,这对于只想得到某个网络接口上的所有IP地址是非常有用的。NetworkInterface类提供了三个方法可以分别得到网络接口名(getName方法)、网络接口别名(getDisplayName方法)以及和网络接口绑定的所有IP地址(getInetAddresses方法):

1. getName方法
这个方法用来得到一个网络接口的名称。这个名称就是使用getByName 方法创建NetworkInterface 对象时使用的网络接口名,如eth0 、ppp0 等。getName 方法的定义如下:
public String getName()
2. getDisplayName方法
这个方法可以得到更容易理解的网络接口名,也可以将这个网络接口名称为网络接口别名。在一些操作系统中(如Unix ),getDisplayName 方法和getName 方法的返回值相同,但在Windows 中getDisplayName 方法一般会返回一个更为友好的名字,如 Realtek RTL8139 Family PCI Fast Ethernet NIC 。getDisplayName 方法的定义如下:
public String getDisplayName()
3. getInetAddresses方法
NetworkInterface 类可以通过getInetAddresse 方法以InetAddress 对象的形式返回和网络接口绑定的所有IP 地址。getInetAddresses 方法的定义如下:
public Enumeration<InetAddress> getInetAddresses()

下面给出windows和linux下通用的获取本机IP的方法:

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;public class Main {public static void main(String[] args) {System.out.println("本机IP:" + getIpAddress());}public static String getIpAddress() {try {Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces();InetAddress ip = null;while (allNetInterfaces.hasMoreElements()) {NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();if (netInterface.isLoopback() || netInterface.isVirtual() || !netInterface.isUp()) {continue;} else {Enumeration<InetAddress> addresses = netInterface.getInetAddresses();while (addresses.hasMoreElements()) {ip = addresses.nextElement();if (ip != null && ip instanceof Inet4Address) {return ip.getHostAddress();}}}}} catch (Exception e) {System.err.println("IP地址获取失败" + e.toString());}return "";}}

表示对网络接口进行筛选,非回送接口 且 非虚拟网卡 且 正在使用中

注:

netInterface.isLoopback() || netInterface.isVirtual() || !netInterface.isUp() 用于排除回送接口,非虚拟网卡,未在使用中的网络接口.

本文参考:

http://www.runoob.com/java/net-localip.html

https://www.oschina.net/question/129471_39474

http://blog.51cto.com/androidguy/214458

java获取本机IP相关推荐

  1. 用java获取本机IP地址

    在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一下.突然之间很想把自己的IP地址给获取了,虽然用系统自带命令可以得到,但自己想写一个程序获取一下,到网上搜索了一下ja ...

  2. java获取本机ip地址_代码片段:获取系统所有IP

    问题 在Windows系统中,可以支持多个网卡,比如有线的以太网卡,无线网卡,虚拟网卡等.如下图所示: 每一张网卡由不同的类型,也可以分别被用户启用或禁用. 对于单独一张给定的网卡,其IP地址可以是D ...

  3. java获取本机ip和本机公网ip

    话不多少,有用请点赞 本机ip public static String getIpAddr(HttpServletRequest request) {if (request == null) {re ...

  4. java获取本机IP,系统随机分配端口号,获取当前线程ID

    ServerSocket serverSocket = null; //读取空闲的可用端口 String localIp = null; try {serverSocket = new ServerS ...

  5. 1.Java获取本机IP地址,主机名,域名

    1.如何在程序中获取本机的IP地址,主机名以及域名呢? 在java中,我们可以利用java.net.InetAddress这个类来实现. InetAddress 类提供了操作 IP 地址的各种方法.该 ...

  6. JAVA 获取本机IP(包括 内网IP 和 公网IP)

    Spring 获取客户端请求 IP,详见:https://blog.csdn.net/NRlovestudy/article/details/90900925 本文获取的是 项目所在系统的IP(本地I ...

  7. Java获取本机ip和服务器ip

    一.获取服务器IP InetAddress addr = InetAddress.getLocalHost();String ip=addr.getHostAddress();//获得本机IP 二.获 ...

  8. Java获取(外网)网络IP和本机真实IP Java获取真实IP Java获取真实ip Java获取本机ip Java获取 本机真实ip

    /*** IP地址相关工具类*/ public class IpUtil {private static final Logger logger = LoggerFactory.getLogger(I ...

  9. Java 获取本机IP和Mac以及网卡信息

    2019独角兽企业重金招聘Python工程师标准>>> 获取局域网ip和mac(如果电脑没有直接连接外网),否则获取公网ip 通过第三放获取公网ip public class Net ...

最新文章

  1. 【ACM】LightOJ - 1008 Fibsieve`s Fantabulous Birthday (找规律,找...)
  2. 统计简单学_常用统计量
  3. photo.php,EasyPhoto.php
  4. 剧情反转:今年AI要凉!薪资碾压全行,但人才缺500万!
  5. 小区信息发布服务器,基于串口服务器的智能小区信息发布系统
  6. 初次使用Apache、ip地址、防火墙、域名、DNS、hosts文件、端口、URL介绍、Apache配置文件、配置虚拟主机、请求响应、http协议、
  7. 【硬核干货】如何高效找到优质编程项目?
  8. jQuery 缩放 旋转 裁剪图片 Image Cropper
  9. 使用Python和Asyncio编写在线多人游戏(三)
  10. Java使用百度翻译api
  11. 【sketchup 2021】草图大师图像输出与渲染之Enscape渲染(优秀的实时渲染软件)的安装与软件说明,并在sketchup软件中调出Enscape软件和使用。
  12. java接入支付宝api实现支付宝手机扫码登录
  13. MaxEnt框架下的RL
  14. CDA Level2建模备考心得
  15. Comparable的compareTo
  16. C++顺序结构——小玉买文具
  17. vulnhub FristiLeaks: 1.3
  18. 2021-05-31 - Laravel - 搭建开发环境 - 学习/实践
  19. codeblocks卸载后再重装还是老样子
  20. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第十集

热门文章

  1. 33家国内外知名的手机广告平台的SDK名单汇总,吐血推荐
  2. AD142A0芯片程序空间资源空间分布的总结
  3. S6系统激活、软件升级和软件授权激活
  4. 【编程不良人】快速入门SpringBoot学习笔记06---RestFul、异常处理、CORS跨域、Jasypt加密
  5. 有道云笔记 - Markdown模板(文首附markdown源码,即.md文件)
  6. 使用windows引导的ubuntu双操作系统
  7. subprocess
  8. 西方艺术史-文艺复兴笔记(第四次考试)
  9. Android-谷歌语音识别之离线识别(二)
  10. 51单片机ADC0832模数转换+ LCD1602显示+Proteus仿真