Address,翻譯為“地址”,是計算機網絡中用於標識通信體的一個重要概念。
一、Address的概念
Address,可以理解為一種聯繫方式,用於唯一識別通信實體。在計算機網絡中,短語“Address”通常用於表示網絡層和傳輸層協議,包括IPv4和IPv6協議中的IP地址和MAC地址。Address可以直接讓計算機識別和定位設備,是計算機網絡通信的基礎。
二、Address的分類
Address按照其在計算機網絡中的作用和表現形式,可以分為兩大類,即:
1、網絡層地址:用於在全球範圍內唯一標識一個網絡節點,在Internet中常指IPv4和IPv6的地址。
2、數據鏈路層地址:用於在同一物理網絡的節點之間唯一標識一個設備,也稱MAC地址。
因為兩者的標識範圍不同,所以也具有不同的編寫方式。
三、Address的IPv4編寫
IPv4(Internet Protocol version 4,即Internet協議第四版)是目前仍在廣泛使用的網絡層協議,其地址表示為32位二進制數,通常以點分十進制的方式表現。
例如:192.168.10.10
其中,192.168.10.是網絡部分(Netowrk ID),10是主機部分(Host ID)。
//IPv4 Address示例代碼 - C++
#include
#include
int main() {
struct in_addr s; //IPv4地址結構體
inet_pton(AF_INET, "192.168.10.10", &s); //將點分十進制地址轉換為二進制形式
printf("Network ID: %u\n", ntohl(s.s_addr)); //輸出網絡部分
printf("Host ID: %u\n", ntohl(s.s_addr) & 0x000000ff); //輸出主機部分
return 0;
}
四、Address的IPv6編寫
IPv6(Internet Protocol version 6,即Internet協議第六版)是未來趨勢,地址有128位,採用冒號十六進制的方式表示,因為IPv6地址的位數太多,所以它的組成方式與整個網絡的組成吻合是必須的。IPv6地址由三部分組成,即路由前綴、子網標識和接口標識。
例如:2001:da8:1057:900:b45f:3c3d:f50b:8347
其中,2001:da8:1057:900為路由前綴,b45f:3c3d:f50b:8347為接口標識。
//IPv6 Address示例代碼 - C++
#include
#include
int main() {
struct in6_addr s; //IPv6地址結構體
inet_pton(AF_INET6, "2001:da8:1057:900:b45f:3c3d:f50b:8347", &s); //將冒號十六進制地址轉換為二進制形式
int i;
printf("IPv6 Address: ");
for (i = 0; i < 16; i++) {
printf("%02x", s.s6_addr[i]); //逐位輸出16進制數
if (i % 2 == 1 && i < 15) {
printf(":"); //每2位輸出一個冒號,不包括最後一位
}
}
return 0;
}
五、Address的MAC地址編寫
MAC(Media Access Control)地址,也稱物理地址,由硬件製造商設定,每個網絡接口都有一個獨特的MAC地址,用於在同一個局域網中尋找設備。
例如:76:AB:CD:FE:34:A9
//MAC Address示例代碼 - C++
#include
#include
#include
#include
int main() {
struct ifaddrs *ifap, *ifa;
struct sockaddr_dl *sdl;
u_char *ptr;
char mac[64]; //存放MAC地址的字符串
if (getifaddrs(&ifap) == -1) {
return 1; //獲取網卡列表失敗
}
for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
if ((ifa->ifa_flags & IFF_UP) == 0 || (ifa->ifa_flags & IFF_LOOPBACK) != 0) {
continue; //只處理已啟用且非環回網卡
}
if ((sdl = (struct sockaddr_dl *)ifa->ifa_addr) != NULL && sdl->sdl_family == AF_LINK && sdl->sdl_type == IFT_ETHER) {
ptr = (u_char *)LLADDR(sdl); //獲取MAC地址二進制形式
snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr + 1), *(ptr + 2), *(ptr + 3), *(ptr + 4), *(ptr + 5)); //轉換為十六進制字符串形式
printf("MAC Address: %s\n", mac); //輸出MAC地址
break; //已找到符合條件的網卡,退出循環
}
}
freeifaddrs(ifap); //釋放網卡列表
return 0;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/289212.html
微信掃一掃
支付寶掃一掃