【问题标题】:printing out source and destination ethernet addresses in C在 C 中打印出源和目标以太网地址
【发布时间】: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


【解决方案1】:

试试

printf("%s\n", ether_ntoa((struct ether_addr*) packet_data)); // prints source
printf("%s\n", ether_ntoa((struct ether_addr*) ((char*) packet_data) + 6))); // prints destination

【讨论】:

    猜你喜欢
    • 2016-10-14
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2023-03-22
    • 2016-10-24
    • 2021-06-21
    • 2012-08-10
    相关资源
    最近更新 更多