gpt4 book ai didi

c - 为什么我收到的IP地址是反的?给定 - 12.0.0.100,在 C 中收到为 100.0.0.12

转载 作者:行者123 更新时间:2023-11-30 14:49:07 34 4
gpt4 key购买 nike

我正在测试 RADIUS-DISCONNECT 选项。

服务器发送断开连接请求以断开连接(Cmd:cat packet.txt | radclient -c 10 -i 40 -x 12.0.0.1:3799 disconnect "Secret")

我的 RAIDUS 服务器配置为 12.0.0.100。 RADIUS客户端IP配置为12.0.0.1。

从服务器发送的数据包使用数据包捕获命令捕获相同的数据包。数据包捕获显示源 IP 为:源:12.0.0.100 (12.0.0.100)。

但是在接收时,当打印我的服务器 IP 时,它是 100.0.0.12,因此,我无法跟踪或验证服务器详细信息。我不知道是否是由于小端、大端问题。

GDB 在服务器 IP 上打印:{0xc, 0x0, 0x0, 0x64, 0x0 <repeats 12 times>}但实际上必须是{0x64, 0x0, 0x0, 0xc, 0x0 <repeats 12 times>}

如果是由于小端或大端问题,谁能告诉我如何解决该问题。

请有人帮忙。

最佳答案

绝大多数协议(protocol)中 IP 地址的有线格式都是大端格式,而您似乎希望 IP 地址采用小端格式。

htonl(主机到网络长)和ntohl(网络到主机长)用于将字节序从大字节序转换为主机使用的任何字节序(大字节序) ,很少或混合)。

uint8_t  *packet;
uint32_t ip_net;
uint32_t ip_host;

memcpy(&ip_net, packet, sizeof(ip_net)); /* Assuming packet is a buffer of at least 4 bytes */
ip_host = ntohl(ip_net);

您可能会在其他代码中看到指向数据包缓冲区的指针被转换为 uint32_t 的实例,并且该指针被传递到字节顺序转换函数中。这可能适用于某些体系结构 (x86),但可能会导致其他体系结构 (Sparc) 上的内存访问不对齐。

通常最好的做法是从正在处理的缓冲区中 memcpy 到中间变量,因为 memcpy 将处理对齐问题,并且保证堆栈变量适当对齐。

对这些问题和可用方法进行了快速总结 here

关于c - 为什么我收到的IP地址是反的?给定 - 12.0.0.100,在 C 中收到为 100.0.0.12,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49936679/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com