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地址@Testpublic 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.173System.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}// 查找本地機器地址@Testpublic void f2() throws Exception {InetAddress address = InetAddress.getLocalHost();System.out.println(address); // DESKTOP-E4IASRJ/192.168.163.1}// 查找本地機器的ip地址@Testpublic 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.3.2】多播
一組接口的標識符(通常屬于不同的節點,即多臺主機)。 發送到多播地址的數據包將傳送到該地址標識的所有接口。
【1.4】ipv4和ipv6地址
1)如何判斷一個地址是ipv4 還是ipv6 ?
// ip地址類型, ipv4 or ipv6 ?@Testpublic void f4_5() throws UnknownHostException {InetAddress address = InetAddress.getByName("www.oreilly.com");byte[] addressByteArr = address.getAddress();if (addressByteArr.length == 4) System.out.println("ipv4"); // ipv4if (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 類獲取所有網絡接口@Testpublic 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 類獲取單個網絡接口@Testpublic 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地址)
?
總結
以上是生活随笔為你收集整理的internet地址java表示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海高中排名(2021上海高考成绩最好的
- 下一篇: URLConnection-URL连接