【发布时间】:2021-08-18 19:39:42
【问题描述】:
我正在解析 IP 标头并更改源 IP 地址...在我使用 NIPQUAD 宏但无法正常工作之前,我发现 inet_pton() 将字符串 IP 地址更改为网络字节顺序。没看懂:
- 如何使用 uint_32(无符号整数)来保存 IP 地址?
- 这个函数是如何从字符串 IP 转换为网络字节序的?
- 它是如何用于显示 IP 地址的?
NIPQUAD宏:
// use printf("%d.%d.%d.%d",NIPQUAD(iphdr->saddr));
#define NIPQUAD(addr) \
((unsigned char *)&addr)[0], \
((unsigned char *)&addr)[1], \
((unsigned char *)&addr)[2], \
((unsigned char *)&addr)[3]
【问题讨论】:
-
IPv4 的长度为 32 位。 1 个字节代表 IP 地址的 1 部分。所以对于 4 个部分,4 个字节。
-
更改字节顺序意味着反转字节。将字节 1 与 4、2 与 3 交换。
-
例如IP 地址 192.168.20.42 可以表示为 32 位(十六进制)的单个整数 0xc0a8142a。在十六进制中,c0 是 192,a8 是 168,14 是 20,2a 是 42。
-
对于上面的例子,颠倒字节顺序会导致:0x2a14a8c0。
-
@kiner_shah oookey...明白了!