【发布时间】:2017-12-02 00:51:32
【问题描述】:
当我使用 ether_ntoa 时,它首先打印出目标地址,然后是源地址(因为前 6 个字节用于目标)。我怎样才能扭转这个顺序?这是我的打印输出代码:
printf("%s",ether_ntoa((struct ether_addr*)packet_data)); //want to print source
printf(" -> ");
printf("%s \n",ether_ntoa((struct ether_addr*)packet_data)); //want to print destination
【问题讨论】:
-
您是否从未考虑过:检索和存储两个地址并然后以任意顺序打印它们?正如我在ether_ntoa(3) - Linux man page 中看到的那样:“字符串在静态分配的缓冲区中返回,后续调用将覆盖该缓冲区。”因此,您应该考虑在再次调用
ether_ntoa()之前复制检索到的内容(例如使用strdup())。 -
我希望两个 printfs 打印相同的地址。
-
啊,我试试那个 Scheff。
-
啊拍nvm,我搞错了。它只是打印出目的地,所以显然这个解决方案不起作用。那么有没有办法将字节 1 到 6(数组点 0 到 5)存储到传递给 ether_ntoa 的东西中。与字节 6 到 12 相同。当我尝试将数组索引传递给 ether_ntoa 函数时,编译时出现无效长度错误。 packet_data 的类型是 u_char*。
标签: c networking