在linux中打印源mac地址有问题

时间:2011-09-18 03:35:55

标签: c network-programming

etherheader指向以太网数据包的标头,顾名思义:

    printf("Source MAC address: "
           "%02x:%02x:%02x:%02x:%02x:%02x\n",
           etherheader[0],etherheader[1],etherheader[2],
           etherheader[3],etherheader[4],etherheader[5]);

struct ether_header {
    u_int8_t ether_dhost[6];
    u_int8_t ether_shost[6];
    u_int16_t ether_type;
}

事实证明以上代码始终打印:

Source MAC address: 40:40:8d:40:b8:f4

怎么了?

更新

Destination MAC address: 40:40:8d:40:b8:f4
Source MAC address: 88:43:e1:7c:46:7f
Source host 123.126.50.73
Dest host *.*.27.*
----------
Destination MAC address: 40:40:8d:40:b8:f4
Source MAC address: 88:43:e1:7c:46:7f
Source host 114.62.80.83
Dest host *.*.27.*

2 个答案:

答案 0 :(得分:1)

如果数据包来自目的地的广播域(AKA子网)之外,则源MAC地址将始终是将网关提供到该广播域的路由器的MAC地址。虽然40:40:8d似乎不是一个有效的OUI(见http://standards.ieee.org/develop/regauth/oui/oui.txt),所以可能只是编程错误。

88:43:e1是思科的一个OUI,它对上一段提供了一些权重,解释了为什么源MAC地址没有改变。

答案 1 :(得分:1)

Ethernet是局域网的协议(套件)。如果您的计算机是静态连接的,点对点,连接到为其提供Internet访问的单个路由器/交换机,那么这就是所有传入数据包来自的地方(最后一跳,用于您的入口交通)。这意味着无论您尝试与之建立IP通信的互联网上的IP,所有数据包都将遍历您的计算机与路由器/交换机之间的链路(通过以太网)。

如果您连接到单个网络元素,并且您的网络配置和网络配置都没有更改,则这两台计算机的MAC地址(网卡更加精确)将保持不变。这种行为似乎就是你所观察到的。