• java 获取ip地址和网络接口


    网络相关对象在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
    ", "InetfaceName:",intName,"| IPv4:",ip);
                        }
                    }
                }
            } catch (SocketException s) {
                s.printStackTrace();
            }
        }
    }
    

    注:若您觉得这篇文章还不错请点击右下角推荐,您的支持能激发作者更大的写作热情,非常感谢!

  • 相关阅读:
    Delphi DbgridEh实现鼠标拖动选中列,并使复选框选中
    什么是运行期包与设计期包
    组件事件大全
    sql: 查找约束
    delphi Ctrl+鼠标左键或者Find Declaration不能定位到源文件
    delphi7 编译的程序在win7下请求获得管理员权限的方法
    DELPHI中build和compile有什么区别?
    线程安全的单件模式(单例模式)
    [Selenium]通过Selenium实现在当前浏览器窗口点击一个图标之后,弹出另外一个窗口,关闭这个窗口,再回到原来的窗口进行操作
    两种读写配置文件的方案(app.config与web.config通用)
  • 原文地址:https://www.cnblogs.com/f-ck-need-u/p/8243496.html
Copyright © 2020-2023  润新知