【发布时间】:2012-11-11 11:38:11
【问题描述】:
我正在编写代码以通过SOCK_RAW 套接字与另一台计算机上的进程进行通信。
我知道另一台机器的 IP 地址。
我知道一次填充一个字节的 sockaddr_ll.sll_addr 值将解决问题,例如
socket_address.sll_addr[0] = 0x00;
socket_address.sll_addr[1] = 0x04;
socket_address.sll_addr[2] = 0x75;
socket_address.sll_addr[3] = 0xC8;
socket_address.sll_addr[4] = 0x28;
socket_address.sll_addr[5] = 0xE5;
但是当我有 6 个字节的字符数组具有另一台机器的十六进制地址时,我不知道如何做同样的事情。
我可以使用 ':' 格式打印十六进制地址
printf("%.2x",*ptr++ & 0xff);
其中ptr 是字符数组的一个数组。
但是如何使用这些值来填充sll_addr 字节呢?
【问题讨论】:
-
我很困惑,你为什么不能只做
socket_address.sll_addr[0] = ptr[0];等? -
你可能是对的。在发布我的答案时,我以某种方式忽略了提到 6 字节字符数组的 OP,但默默地假设源是一个字符串(这将是 17+1 个字节)。 @Wutz