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.*
答案 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地址(网卡更加精确)将保持不变。这种行为似乎就是你所观察到的。