Wireshark抓取的是本主機收到的數據,還是局域網內所有的數據?
很多人跟我說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,作為投遞目的地址,就可以將服務包裹發布出去。
- 如果計算機連接的網絡(交換機、路由器)配置了組播(PIM、RP),SSDP組播會推送給整個局域網網絡。以至于局域網內的每一臺主機(已訂閱)都可以收到SSDP服務發布。
- 如果計算機連接的網絡沒有配置組播,SSDP服務報文依然會在廣播域內擴散,所以廣播域內(VLAN/同一個網段)所有訂閱主機依然可以接收。無論二層交換機是否支持IGMP Snooping,訂閱主機都可以接收。區別在于,不支持IGMP Snooping的交換機會廣播擴散SSDP報文,以至于連沒有訂閱的主機也會接收。
問題來了,沒有訂閱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地址的翻譯工作。