Socket笔记之Networklnterface

URLConnection

  1. URL代表一个网络地址,抽象类URLConnection是表示应用程序和URL之间的通信链接的所有类的超类。该类的实例可以用于从URL引用的资源中读取和写入。URLConnection本身依赖Socket类实现网络连接,是对Socket更高级的网络连接抽象
  2. 创建与URL的连接的步骤
    • 通过在URL上调用openConnection方法创建连接对象。
    • 设置参数和一般请求属性。
    • 使用connect方法实现与远程对象的实际连接。
    • 远程对象变得可用。可以访问头字段和远程对象的内容
  3. HttpURLConnectionJarURLConnectionURLConnection的两个实现子类

Networklnterface

  1. java.net.NetworkInterface类表示由名称组成的网络接口和分配给此接口的IP地址列表。该类提供访问网卡设备的相关信息,比如网卡名称、IP地址和子网掩码等。

    @Test
    public void testNetworkInterface() throws Exception {
        //返回该主机每一个网络接口对应的NetworkInterface实例
        Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
        if (networkInterfaces != null) {
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                System.out.println("设备在操作系统中显示的名称: " + networkInterface.getDisplayName());
                System.out.println("网络设备在操作系统中的名称: " + networkInterface.getName());
                System.out.println("网络接口是否已经开启并正常工作: " + networkInterface.isUp());
                System.out.println("网络接口的最大传输单元(MTU): " + networkInterface.getMTU());
                System.out.println("网络接口是是否是环回接口: " + networkInterface.isLoopback());
                Enumeration<InetAddress> inetAddressesList = networkInterface.getInetAddresses();
                System.out.print("网络接口的硬件地址(MAC地址): ");
                byte[] hardwareAddress = networkInterface.getHardwareAddress();
                if (hardwareAddress != null && hardwareAddress.length > 0) {
                    System.out.println(bytesToHexMac(hardwareAddress));
                } else {
                    System.out.println();
                }
                while (inetAddressesList.hasMoreElements()) {
                    InetAddress address = inetAddressesList.nextElement();
                    System.out.println("主机地址: " + address.getHostAddress());
                }
    
                System.out.println("=============分隔=============");
            }
        }
    }
    
    public static String bytesToHexMac(byte[] bytes) {
        StringBuilder buf = new StringBuilder(bytes.length * 2);
        for (int i = 0; i < bytes.length; i++) {
            buf.append(String.format("%02x", new Integer(bytes[i] & 0xff)));
            if (i != bytes.length - 1) {
                buf.append(":");
            }
        }
        return buf.toString();
    }
    
  2. 输出结果

    设备在操作系统中显示的名称: utun1
    网络设备在操作系统中的名称: utun1
    网络接口是否已经开启并正常工作: true
    网络接口的最大传输单元(MTU): 1380
    网络接口是是否是环回接口: false
    网络接口的硬件地址(MAC地址): 
    主机地址: fe80:0:0:0:7986:26a3:cee8:8e41%utun1
    =============分隔=============
    设备在操作系统中显示的名称: utun0
    网络设备在操作系统中的名称: utun0
    网络接口是否已经开启并正常工作: true
    网络接口的最大传输单元(MTU): 2000
    网络接口是是否是环回接口: false
    网络接口的硬件地址(MAC地址): 
    主机地址: fe80:0:0:0:54e8:b97a:274d:c3ab%utun0
    =============分隔=============
    设备在操作系统中显示的名称: awdl0
    网络设备在操作系统中的名称: awdl0
    网络接口是否已经开启并正常工作: true
    网络接口的最大传输单元(MTU): 1484
    网络接口是是否是环回接口: false
    网络接口的硬件地址(MAC地址): e2:82:be:9b:e2:1f
    主机地址: fe80:0:0:0:e082:beff:fe9b:e21f%awdl0
    =============分隔=============
    设备在操作系统中显示的名称: en0
    网络设备在操作系统中的名称: en0
    网络接口是否已经开启并正常工作: true
    网络接口的最大传输单元(MTU): 1500
    网络接口是是否是环回接口: false
    网络接口的硬件地址(MAC地址): 34:36:3b:c6:06:6c
    主机地址: 2010:0:0:0:81c8:7b1:e03c:e8eb
    主机地址: 2010:0:0:0:425:7018:707d:bcd3
    主机地址: fe80:0:0:0:1468:5b3e:77a4:3df9%en0
    主机地址: 192.168.1.4
    =============分隔=============
    设备在操作系统中显示的名称: lo0
    网络设备在操作系统中的名称: lo0
    网络接口是否已经开启并正常工作: true
    网络接口的最大传输单元(MTU): 16384
    网络接口是是否是环回接口: true
    网络接口的硬件地址(MAC地址): 
    主机地址: fe80:0:0:0:0:0:0:1%lo0
    主机地址: 0:0:0:0:0:0:0:1
    主机地址: 127.0.0.1
    =============分隔=============
    
    

InetAddress

  1. InetAddress代表IP地址,它有两个子类Inet4Address(IPv4)和Inet6Address(IPv6),InetAddress类没有公共的的构造方法,所以不能实例化,需要借助静态方法创建实例

    @Test
    public void testInetAddress() throws Exception {
        Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
        if (networkInterfaces != null) {
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                Enumeration<InetAddress> inetAddressesList = networkInterface.getInetAddresses();
                if (inetAddressesList != null) {
                    while (inetAddressesList.hasMoreElements()) {
                        InetAddress inetAddress = inetAddressesList.nextElement();
                        System.out.println("IP地址的完全限定域名:" + inetAddress.getCanonicalHostName());
                        System.out.println("文本显示中的IP地址字符串:" + inetAddress.getHostAddress());
                        System.out.println("IP地址的主机名:" + inetAddress.getHostName());
                        byte[] address = inetAddress.getAddress();
                        if (address != null && address.length > 0) {
                            StringBuilder sb = new StringBuilder();
                            for (int i = 0; i < address.length; i++) {
                                sb.append(address[i]);
                                if (i != address.length) {
                                    sb.append(".");
                                }
                            }
                            System.out.println("原始IP地址:" + sb.toString());
                        } else {
                            System.out.println("原始IP地址:");
                        }
    
                    }
    
                }
            }
            System.out.println("=============分隔=============");
        }
    }
    
  2. 输出结果

    IP地址的完全限定域名:fe80:0:0:0:7986:26a3:cee8:8e41%utun1
    文本显示中的IP地址字符串:fe80:0:0:0:7986:26a3:cee8:8e41%utun1
    IP地址的主机名:fe80:0:0:0:7986:26a3:cee8:8e41%utun1
    原始IP地址:-2.-128.0.0.0.0.0.0.121.-122.38.-93.-50.-24.-114.65.
    =============分隔=============
    IP地址的完全限定域名:fe80:0:0:0:54e8:b97a:274d:c3ab%utun0
    文本显示中的IP地址字符串:fe80:0:0:0:54e8:b97a:274d:c3ab%utun0
    IP地址的主机名:fe80:0:0:0:54e8:b97a:274d:c3ab%utun0
    原始IP地址:-2.-128.0.0.0.0.0.0.84.-24.-71.122.39.77.-61.-85.
    =============分隔=============
    IP地址的完全限定域名:fe80:0:0:0:e082:beff:fe9b:e21f%awdl0
    文本显示中的IP地址字符串:fe80:0:0:0:e082:beff:fe9b:e21f%awdl0
    IP地址的主机名:fe80:0:0:0:e082:beff:fe9b:e21f%awdl0
    原始IP地址:-2.-128.0.0.0.0.0.0.-32.-126.-66.-1.-2.-101.-30.31.
    =============分隔=============
    IP地址的完全限定域名:2010:0:0:0:81c8:7b1:e03c:e8eb
    文本显示中的IP地址字符串:2010:0:0:0:81c8:7b1:e03c:e8eb
    IP地址的主机名:2010:0:0:0:81c8:7b1:e03c:e8eb
    原始IP地址:32.16.0.0.0.0.0.0.-127.-56.7.-79.-32.60.-24.-21.
    IP地址的完全限定域名:2010:0:0:0:425:7018:707d:bcd3
    文本显示中的IP地址字符串:2010:0:0:0:425:7018:707d:bcd3
    IP地址的主机名:2010:0:0:0:425:7018:707d:bcd3
    原始IP地址:32.16.0.0.0.0.0.0.4.37.112.24.112.125.-68.-45.
    IP地址的完全限定域名:jannal-macbook-pro.local
    文本显示中的IP地址字符串:fe80:0:0:0:1468:5b3e:77a4:3df9%en0
    IP地址的主机名:jannal-macbook-pro.local
    原始IP地址:-2.-128.0.0.0.0.0.0.20.104.91.62.119.-92.61.-7.
    IP地址的完全限定域名:jannal-mbp
    文本显示中的IP地址字符串:192.168.1.4
    IP地址的主机名:jannal-mbp
    原始IP地址:-64.-88.1.4.
    =============分隔=============
    IP地址的完全限定域名:fe80:0:0:0:0:0:0:1%lo0
    文本显示中的IP地址字符串:fe80:0:0:0:0:0:0:1%lo0
    IP地址的主机名:fe80:0:0:0:0:0:0:1%lo0
    原始IP地址:-2.-128.0.0.0.0.0.0.0.0.0.0.0.0.0.1.
    IP地址的完全限定域名:localhost
    文本显示中的IP地址字符串:0:0:0:0:0:0:0:1
    IP地址的主机名:localhost
    原始IP地址:0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.
    IP地址的完全限定域名:localhost
    文本显示中的IP地址字符串:127.0.0.1
    IP地址的主机名:localhost
    原始IP地址:127.0.0.1.
    =============分隔=============
        
    
  3. 根据主机名称获取IP地址

    @Test
    public void testInetAddress2() throws Exception {
        //根据主机名获取ip地址
        InetAddress inetAddress = InetAddress.getByName("www.baidu.com");
        //111.13.100.92
        System.out.println(inetAddress.getHostAddress());
        inetAddress = InetAddress.getByName("111.13.100.92");
        //111.13.100.92
        System.out.println(inetAddress.getHostName());
    
        //根据主机名获取所有的ip地址
        InetAddress[] inetAddresses = InetAddress.getAllByName("www.baidu.com");
        Arrays.stream(inetAddresses).forEach(inetAddress1 -> {
            System.out.println(inetAddress1.getHostAddress());
        });
    }
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值