我尝试通过 Wireshark 查看 Wi-Fi (802.11) 数据包。
这是我的无线接口的信息:
$ ifconfig
wlan1 Link encap:Ethernet HWaddr c0:f8:da:21:ce:68
# and so on blahblah
$ iwconfig
wlan1 IEEE 802.11abgn ESSID:"myAccessPoint"
Mode:Managed Frequency:2.432 GHz Access Point: 00:26:66:C4:80:FC
#and so on blahblah
当我执行 Wireshark 并将模式更改为wlan1
“监视”以使用“802.11 plus radiotap header”时,ifconfig
显示iwconfig
不同的东西:
$ ifconfig
wlan1 Link encap:UNSPEC HWaddr C0-F8-DA-21-CE-68-00-00-00-00-00-00-00-00-00-00
# and so on blahblah
$ iwconfig
wlan1 IEEE 802.11abgn Mode:Monitor Frequency:2.432 GHz Tx-Power=16 dBm
# and so on blahblah
(即,硬件地址已附加十个00
八位字节。而且,奇怪的是,它现在显示大写字母而不是小写字母。)我注入了几个空数据帧并aireplay-ng
用 Wireshark 捕获它们(EfmNetwo_... 是一个接入点):
我很确定这e0:99:71:57:9b:3a
是我的机器上无线接口的 MAC 地址,因为数据包的内容似乎就是我注入的。
奇怪的是,我从来没有在ifconfig
和中看到过这样的MAC地址iwconfig
。我认为生成了类似虚拟接口的东西,并且该接口有这样的MAC地址。
我说的对吗?如果对,还有其他方法可以从 Wireshark 之外查看该 MAC 地址吗?
如果我说的不对,有人能解释一下这个奇怪的 MAC 地址吗?
答案1
而且,奇怪的是,它现在以大写字母显示,而不是小写字母。
这完全无关紧要。人们可以在应用程序中选择用大写字母或小写字母显示十六进制数字,也可以选择使用冒号或破折号作为八位字节之间的分隔符;这完全取决于开发人员的个人喜好,或为软件建立的约定。(请注意,两个 Linux 命令和ifconfig
具有iwconfig
不同的约定 -ifconfig
使用小写字母表示接口 MAC 地址,而iwconfig
使用大写字母表示接入点 MAC 地址。)
当我执行 Wireshark 并将 wlan1 的模式更改为“监控”以使用“802.11 plus radiotap header”时,ifconfig 和 iwconfig 显示不同的东西:
我认为这要么是 Linux 内核或 中的一个错误ifconfig
。要么是内核没有将 MAC 地址报告为 6 个八位字节的 IEEE 样式 MAC 地址,仅仅是因为接口处于监控模式,这完全是愚蠢的,要么是它报告了一些有意义的东西,但让人误ifconfig
以为它不是 IEEE 样式 MAC 地址,而只是将其视为未知类型的最大长度硬件地址。
请注意,前 6 个八位字节与非监控模式时相同,再加 10 个八位字节则总共 16 个八位字节,这是 2 的幂(最大字段大小的常见选择),因此ifconfig
可能以某种方式(无论是由于 Linux 内核错误还是错误ifconfig
)确信地址长度为 16 个八位字节,并且打印 10 个额外方便清零的填充八位字节。
所以不用担心,开心就好——在监控模式下,适配器的 MAC 地址仍然是 c0:f8:da:21:ce:68 或 C0-F8-DA-21-CE-68,或者各种程序可能选择表示它的方式。