很多人跟我说wireshark抓取的是安装这个软件的主机收到或者发送的数据。这一点有道理,因为确实能在wireshark里看到目的地址或者原地址是本机IP地址的分组。
但是,我也看到了wireshark获取了目的地址和原地址都不是本机IP地址的分组。如图所示:
源地址和目的地址都不是本机的IP地址,却仍然被本机获取到
本机的IP地址是192.168.1.100,输入ipconfig命令可以看到,只有这台设备安装了wireshark:
而192.168.1.103是我的另一台设备的地址,但是那一台设备上没有安装wireshark,100和103这两台设备连接的都是我自己家的无线局域网。
难道说wireshark获取的不仅仅是本机收发的数据,还包括了局域网内其他主机的数据?我又用103这台设备访问了一个网页,同时打开wireshark,但是这个过程wireshark没有获取到任何源地址或者目的地址是192.168.1.103的分组。怎么回事?怎么刚刚还能获取的,现在就不能获取了?难道说wireshark能获取局域网内其他设备的数据,但是这完全是随机的,有时候能有时候不能?所以说,wireshark能抓取:
A、仅仅是本主机收发的数据
B、局域网内所有主机收发的数据
C、随机获取
答案当然是A,即本机收发的数据。题主可能会很疑惑,既然本机的IP地址=192.168.1.100,意味着只有IP报文目的地址= 192.168.1.100才会接收,可是为什么目的IP= 239.255.255.250的IP报文也抓到了?
239.255.255.250是一个组播地址,是SSDP(Simple Service Discovery Protocol )专用地址,只要订阅该地址的服务,都会接收。
组播地址239.255.255.250,可以看作公众号ID。大家订阅本公众号,公众号有文章更新会推送到订阅该公众号订阅者的微信。如果没有订阅该公众号,自然就无法接收。
如果你将本地运行的SSDP服务进程关闭,意味着不再关注该组播ID(239.255.255.250),那就无法接收该组播的报文了,这应该很好理解。239.255.255.250这个地址不属于任何机构和个人,它是一个组ID。计算机有什么服务想向外界发布,只要将该地址作为目的IP,作为投递目的地址,就可以将服务包裹发布出去。
问题来了,没有订阅SSDP的报文(目的IP= 239.255.255.250)的主机网卡,自然也会收到交换机广播扩散的SSDP报文,网卡会要吗?
不会要的,因为该报文的目的MAC= 01:00:5e:xx:xx:xx(xx:xx:xx为127.255.250换算成16进制),不在网卡MAC允许列表。所以未订阅主机网卡可以看到SSDP报文,但是不会接收,会扔掉,会在告诉Wireshark之前扔掉,所以Wireshark也是看不到的。
怎样才能让Wireshark看到未订阅的SSDP组播报文?
很简单,只要将网卡配置成混杂模式即可,那样的话,网卡不再检查目的MAC是否在允许之列,而是网卡只要看到的包,统统接收。当然还有一个例外,CRC校验出错死活是要扔的,所以,即使在混杂模式下,Wireshark也是看不到CRC出错的报文。
最后,计算机还会接收目的IP=255.255.255.255的广播报文,这点不奇怪吧,DHCP恰恰就是利用这一点来工作的。试想,在DHCP没有获得IP地址之前,是不是没有IP地址?但是依然可以通过接收目的IP=255.255.255.255 的DHCP报文与DHCP服务器通信。
最后的最后,计算机还会接收目的MAC= FF:FF:FF:FF:FF:FF的二层广播报文,比如ARP广播报文,来辅助TCP/IP协议栈完成IP地址与MAC地址的翻译工作。
作者|车小胖谈网络|公众号
留言与评论(共有 0 条评论) “” |