internet地址java表示

【README】

本文主要总结 internet地址相关知识,及相关的 java 类 ;

0)ip地址是什么

  • 连接到internet的设备称为节点,计算机节点称为主机(host),每个节点至少由一个唯一的数(或数字串)来表示以便通讯,这个数就是ip地址 ;

1)ipv4地址

  • ipv4地址表示:4个无符号字节,点号分隔,每个字节从0~255,最高字节在前;如152.19.134.132;
  • 内部网ip, 以10.  172.16.   172.31.  和 192.168. 开头的ip地址都未分配到internet,可以在内部网使用;(127.0.0.1是回环地址,即指向本地机器节点)

2)ipv6地址

  • ipv6地址:16个字节, 冒号分隔的8个区块,每个区块是4个16进制数字;如 FEDC:BA98:9871:3210:ABCD:BA98:9876:ABCE, 可以简化0;
  • ipv4地址的个数为 40亿多一点(2^32=4G),无法做到每台计算机一个地址,所以为了增加ip地址个数,引入了ipv6地址 ;

3)域名

  • 因为ip地址全是数字,不方便记忆,所以引入了域名;以百度而言;其ip地址是 110.242.68.3,但这串数字不好记忆,所以引入了域名 www.baidu.com;

4)域名服务器-DNS SERVER

  • 路由器在进行路由前,需要把域名解析为ip地址, 这个功能是由 域名服务器完成的;

【1】InetAddress ip地址类

【1.1】InetAddress类说明

此类表示 Internet 协议 (IP) 地址
IP 地址是 IP 使用的 32 位或 128 位无符号数,IP 是构建 UDP 和 TCP 等协议的低级协议。
一个 InetAddress 的实例由一个 IP 地址和它对应的主机名组成(取决于它是否用主机名构造 或 它是否已经进行了主机名反向解析)。

【1.2】InetAddress ip地址测试用例

// 获取ip地址
    @Test
    public void f1() throws Exception {
        // 根据域名获取ip地址
        InetAddress address = InetAddress.getByName("www.oreilly.com");
        System.out.println(address); // www.oreilly.com/23.57.133.173

        // 根据ip地址字符串获取ip地址对象
        address = InetAddress.getByName("23.57.133.173");
        System.out.println(address); // /23.57.133.173
        System.out.println(address.getHostName()); // a23-57-133-173.deploy.static.akamaitechnologies.com

        // 获取一个主机域名的所有ip地址
        InetAddress[] addresses = InetAddress.getAllByName("www.baidu.com");
        Arrays.stream(addresses).forEach(System.out::println);
//        www.baidu.com/110.242.68.4
//        www.baidu.com/110.242.68.3

    }
    // 查找本地机器地址
    @Test
    public void f2() throws Exception {
        InetAddress address = InetAddress.getLocalHost();
        System.out.println(address); // DESKTOP-E4IASRJ/192.168.163.1
    }

    // 查找本地机器的ip地址
    @Test
    public void f4_4() throws Exception {
        InetAddress address = InetAddress.getLocalHost();
        String hostAddress = address.getHostAddress();
        System.out.println(hostAddress); // 192.168.163.1
    }

【1.3】ip地址类型

【1.3.1】单播

  1. 单个接口的标识符。 发送到单播地址的数据包将传送到由该地址标识的接口
  2. 未指定地址——也称为任何本地或通配符地址。 它绝不能分配给任何节点。 它表示没有地址。 它的一个例子是作为 bind 的目标,它允许服务器接受任何接口上的客户端连接,以防服务器主机有多个接口。未指定的地址不得用作 IP 数据包的目的地址。
  3. 环回地址(127.0.0.1)——这是分配给环回接口的地址。 发送到此 IP 地址的任何内容都会循环并成为本地主机上的 IP 输入。 该地址通常在测试客户端时使用。

【1.3.2】多播

一组接口的标识符(通常属于不同的节点,即多台主机)。 发送到多播地址的数据包将传送到该地址标识的所有接口。


【1.4】ipv4和ipv6地址

1)如何判断一个地址是ipv4 还是ipv6 ?

// ip地址类型, ipv4 or ipv6 ?
    @Test
    public void f4_5() throws UnknownHostException {
        InetAddress address = InetAddress.getByName("www.oreilly.com");
        byte[] addressByteArr = address.getAddress();
        if (addressByteArr.length == 4) System.out.println("ipv4"); // ipv4
        if (addressByteArr.length == 6) System.out.println("ipv6");
    }

补充,java使用了 Inet4Address,  Inet6Address 分别表示 ipv4和ipv6 地址; 


【2】NetWorkInterface类-网络接口类

0)api说明

此类表示由名称和分配给此接口的 IP 地址列表组成的网络接口。 用于标识加入组播组的本地接口。 接口通常以诸如“le0”之类的名称命名;

补充,如何理解网络接口? 狭隘理解就是一个物理上的网线插拔口, 广义上可以是虚拟网络接口,比如 vmnet8;

1)NetWorkInterface类实例表示一个本地ip地址,或者一个物理接口,或一个虚拟接口;

2)该类提供了枚举所有本地地址的方法,其返回值类型是  InetAddress ;

【2.1】NetworkInterface 类获取所有网络接口

// NetworkInterface 类获取所有网络接口
    @Test
    public void f4_8() throws SocketException {
        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        while(interfaces.hasMoreElements()) {
            NetworkInterface myinterface = interfaces.nextElement();
            System.out.println(myinterface);
        }
    }

打印结果如下:可以看到, NetworkInterfaces 获取的网络接口有有限网卡,无线网卡,以及虚拟网卡接口;

name:lo (Software Loopback Interface 1)
name:net0 (Microsoft 6to4 Adapter)
name:eth0 (VMware Virtual Ethernet Adapter for VMnet1)
name:net1 (WAN Miniport (SSTP))
name:net2 (Microsoft IP-HTTPS Platform Adapter)
name:eth1 (WAN Miniport (IPv6))
name:eth2 (WAN Miniport (IP))
name:ppp0 (WAN Miniport (PPPOE))
name:wlan0 (Intel(R) Dual Band Wireless-AC 8265)
name:eth3 (Bluetooth Device (Personal Area Network))
name:net3 (WAN Miniport (L2TP))
name:wlan1 (Microsoft Wi-Fi Direct Virtual Adapter #2)
name:net4 (WAN Miniport (PPTP))
name:eth4 (Intel(R) Ethernet Connection (5) I219-V)
name:wlan2 (Intel(R) Dual Band Wireless-AC 8265-WFP Native MAC Layer LightWeight Filter-0000)
name:net5 (Microsoft Teredo Tunneling Adapter)
name:eth5 (VMware Virtual Ethernet Adapter for VMnet8)
name:eth6 (WAN Miniport (Network Monitor))
name:net6 (WAN Miniport (IKEv2))
name:wlan3 (Microsoft Wi-Fi Direct Virtual Adapter)
name:eth7 (Microsoft Kernel Debug Network Adapter)
name:eth8 (Sangfor SSL VPN CS Support System VNIC)
name:wlan4 (Intel(R) Dual Band Wireless-AC 8265-Virtual WiFi Filter Driver-0000)
name:wlan5 (Intel(R) Dual Band Wireless-AC 8265-Native WiFi Filter Driver-0000)
name:eth9 (Intel(R) Ethernet Connection (5) I219-V-WFP Native MAC Layer LightWeight Filter-0000)
name:eth10 (Intel(R) Ethernet Connection (5) I219-V-QoS Packet Scheduler-0000)
name:eth11 (Intel(R) Ethernet Connection (5) I219-V-WFP 802.3 MAC Layer LightWeight Filter-0000)
name:wlan6 (Intel(R) Dual Band Wireless-AC 8265-QoS Packet Scheduler-0000)
name:wlan7 (Intel(R) Dual Band Wireless-AC 8265-WFP 802.3 MAC Layer LightWeight Filter-0000)
name:wlan8 (Microsoft Wi-Fi Direct Virtual Adapter-WFP Native MAC Layer LightWeight Filter-0000)
name:wlan9 (Microsoft Wi-Fi Direct Virtual Adapter-Native WiFi Filter Driver-0000)
name:wlan10 (Microsoft Wi-Fi Direct Virtual Adapter-QoS Packet Scheduler-0000)
name:eth12 (WAN Miniport (IP)-WFP Native MAC Layer LightWeight Filter-0000)
name:eth13 (WAN Miniport (IP)-QoS Packet Scheduler-0000)
name:eth14 (WAN Miniport (IPv6)-WFP Native MAC Layer LightWeight Filter-0000)
name:eth15 (WAN Miniport (IPv6)-QoS Packet Scheduler-0000)
name:eth16 (WAN Miniport (Network Monitor)-WFP Native MAC Layer LightWeight Filter-0000)
name:eth17 (WAN Miniport (Network Monitor)-QoS Packet Scheduler-0000)
name:wlan11 (Microsoft Wi-Fi Direct Virtual Adapter-WFP 802.3 MAC Layer LightWeight Filter-0000)
name:wlan12 (Microsoft Wi-Fi Direct Virtual Adapter #2-WFP Native MAC Layer LightWeight Filter-0000)
name:wlan13 (Microsoft Wi-Fi Direct Virtual Adapter #2-Native WiFi Filter Driver-0000)
name:wlan14 (Microsoft Wi-Fi Direct Virtual Adapter #2-QoS Packet Scheduler-0000)
name:wlan15 (Microsoft Wi-Fi Direct Virtual Adapter #2-WFP 802.3 MAC Layer LightWeight Filter-0000)

Process finished with exit code 0

【2.2】NetworkInterface 类获取单个网络接口

// NetworkInterface 类获取单个网络接口
    @Test
    public void f4_8_1() throws SocketException {
        NetworkInterface anInterface = NetworkInterface.getByName("eth0");
        System.out.println(anInterface); // name:eth0 (VMware Virtual Ethernet Adapter for VMnet1)
        // 获取分配给该接口的ip地址
        System.out.println("==== 分配给接口的所有ip地址");
        anInterface.getInterfaceAddresses().forEach(x->System.out.println(x.getAddress().getHostAddress()));
    }

运行结果:

name:eth0 (VMware Virtual Ethernet Adapter for VMnet1)
==== 分配给接口的所有ip地址
192.168.28.1
fe80:0:0:0:c1dd:f581:1222:fd2a%eth0   (ipv6地址)

猜你喜欢

转载自blog.csdn.net/PacosonSWJTU/article/details/121113299