2017-09-21 78 views
1

我想向第二層廣播地址在Scapy中的默認網關發送回聲請求。向第二層廣播地址的默認網關發送回聲請求

我寫了這個代碼:

packet = Ether(dst='FF:FF:FF:FF:FF:FF')/IP(dst='192.168.1.1')/ICMP() 
sendp(packet) 

,但沒有響應返回

據我瞭解發送網絡內部的數據包的過程中,框架應該已經由於IP地址去了開關的目的地在同一個網絡中,然後交換機應該將它發送給連接到它的每個人,因爲它看到廣播地址。

這個理論有什麼問題?

順便說一句,我嗅探使用wireshark的流量,我可以看到捕獲的ping請求,但無法找到答案的答案,這可能意味着這是一個網絡問題,而不是軟件問題。

+0

我不確定假設是否正確,交換機將只使用第2層地址來處理分佈(作爲簡單網橋工作)。我預計它會使用IP來決定... –

回答

0

首先,有兩個「Scapy相關」點可能會阻止您看到潛在的響應。

  • 如果要發送一個數據包,並得到答案(或None如果沒有收到應答),使用srp1()sendp()將發送數據包,但不會等待答案。

  • 當使用2個命令(*p()功能),不要忘了指定要使用的接口,爲iface=參數,當它是不是您的默認界面(conf.iface)。

然後,有一個「網絡」的原因可以解釋,你沒有得到任何答覆:您要發送的數據包是「廣播」第2層和「單播我」(從網關的觀點)在第3層。

一些IP協議棧(至少是OpenBSD)丟棄了這樣的數據包,其他一些(至少Linux)接受它。

您可以嘗試發送一個單播數據包到網關地址,看看會發生什麼:srp1(Ether()/IP(dst='192.168.1.1')/ICMP())或(讓Scapy處理第2層,假設您的路由表正確到達192.168.1.1:sr1(IP(dst='192.168.1.1')/ICMP()))。