java 获取ip地址和网络接口
2023-09-11 14:18:06 时间
网络相关对象在java.net包中。
1.获取主机对象InetAddress
//获取本地主机对象
InetAddress host = InetAddress.getLocalHost();
//根据ip地址或主机名获取主机对象,以主机名获取主机时需要DNS解析
InetAddress host = InetAddress.getByName("192.168.100.124");
InetAddress host = InetAddress.getByName("www.baidu.com");
2.获取主机对象的ip地址和主机名(需要dns解析主机名)
host.getHostAddress();
host.getHostName();
3.获取本机所有接口NetworkInterface并遍历
//返回数据类型为Enumeration
Enumeration<NetworkInterface> enu = NetworkInterface.getNetworkInterfaces();
while(enu.hasMoreElements){
NetworkInterface inet = enu.nextElement();
String intName = inet.getName();
}
由于一个接口上可能有多个子接口(辅助ip,如eth0:1),因此根据某个接口,可以得到该接口的所有ip地址枚举集合(同时包括Ipv4和ipv6接口)。
Enumeration<InetAddress> net_list = inet.getInetAddresses();
while(net_list.hasMoreElements){
InetAddress net = net_list.nextElement();
String ip = net.getHostAddress();
}
可以使用Collections.list()方法将Enumeration类型转换为ArrayList集合的数据结构,然后使用Itreator遍历器遍历。
以下是获取本机所有接口名称和这些接口上的ipv4地址的方法(适用于Windows和Linux)。
import java.net.*;
import java.util.*;
public class EnumDemo {
public static void main(String[] args) {
try {
//获取所有接口,并放进枚举集合中,然后使用Collections.list()将枚举集合转换为ArrayList集合
Enumeration<NetworkInterface> enu = NetworkInterface.getNetworkInterfaces();
ArrayList<NetworkInterface> arr = Collections.list(enu);
for(Iterator<NetworkInterface> it = arr.iterator();it.hasNext();) {
NetworkInterface ni = it.next();
String intName = ni.getName(); //获取接口名
//获取每个接口中的所有ip网络接口集合,因为可能有子接口
ArrayList<InetAddress> inets = Collections.list(ni.getInetAddresses());
for(Iterator<InetAddress> it1 = inets.iterator();it1.hasNext();) {
InetAddress inet = it1.next();
//只筛选ipv4地址,否则会同时得到Ipv6地址
if(inet instanceof Inet4Address) {
String ip = inet.getHostAddress();
System.out.printf("%-10s %-5s %-6s %-15s\n", "InetfaceName:",intName,"| IPv4:",ip);
}
}
}
} catch (SocketException s) {
s.printStackTrace();
}
}
}
注:若您觉得这篇文章还不错请点击右下角推荐,您的支持能激发作者更大的写作热情,非常感谢!
相关文章
- java理论基础学习一
- java 生成12位随机数,解决The literal 9999999999999 of type int is out of range 问题
- SkipList和java中ConcurrentSkipListMap的实现
- Java 迭代器 Iterator
- 【JAVA】JAVA中的运算符及优先级(转)
- Java -- 获取MAC地址
- java aes_cbc_256 加密解密
- 从Java视角理解系统结构(三)伪共享
- Java Invoked OOM-Killer - OOM不一定是来自于java heap
- JAVA单元测试框架-12-java代码重复执行失败的测试用例
- 一套简单通用的Java后台管理系统,拿来即用,非常方便(附项目地址)
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- 第七节:详细讲解Java中的日期,java.util.date
- Java基础语法:1.第一个java程序
- Java Design Demo -简单的队列-异步多任务队列(java android)
- JAVA好书之《深入理解Java虚拟机》
- Java根据ip地址获取Mac地址,Java获取Mac地址
- java.lang.IllegalStateException——好头疼
- 【蓝桥杯Java组】省赛真题—K倍区间(前缀和,数学,思维)
- java判断字符必须包含大写字母、小写字母、数字、特殊符号且10位及以上
- JAVA NIO non-blocking模式实现高并发服务器(转)
- JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)
- java 编程思想-java运算符--曾经不太明确的
- 2014-5-22 java.lang.OutOfMemoryError: Java heap space的一次诊断
- 【Java】:Linux下JDK默认安装路径