【问题标题】:Format of MAC address sent over network通过网络发送的 MAC 地址格式
【发布时间】:2017-07-27 02:55:53
【问题描述】:

给定一个标准的 Mac 地址“xx:xx:xx:xx:xx:xx”它需要采用什么格式才能使用 libpcap 的数据包注入发送?

我将它加载到 srcMac 只是一个字符的以太网框架中:

memcpy(&ethernet.ether_src, srcMac, sizeof(ethernet.ether_src));

但是在wireshark中地址不正确。 Wireshark 中可见的 Mac 地址会根据字符串的内容而变化,因此不会被默认地址或其他任何内容覆盖。

【问题讨论】:

  • 天真和不知情的答案,但不是mac地址不是字符串吗?我以为它们只是以这种方式显示(实际上只是一个位字符串,但显示为十六进制)。你可能会使用一个字符数组,
  • 我不完全确定 libpcap 的要求,但 MAC 地址在以太网帧中的线路上表示为六个连续的八位字节(字节)。 17 个字符的冒号分隔形式(或有时空格或连字符分隔)只是人类可读性的约定。
  • "其中 srcMac 只是一个字符"请在此处更具体地说明 srcMac 的定义和初始化方式。
  • libpcap 很可能使用六个无符号字符的数组来保存 MAC 地址。
  • 另请注意,要使用的字节顺序是网络字节顺序(Big Endian)。

标签: c network-programming mac-address libpcap


【解决方案1】:

我想,在您的代码中 ethernet.ether_src 的类型为 struct ether_addr 所以它不仅仅是一个 char*-string。

因此您需要将 ASCII 字符串转换为以太网地址,例如函数声明为

extern struct ether_addr *ether_aton (__const char *__asc) __THROW;

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多