2013-10-22 98 views
1

我想從一個python腳本中發送一個ICMPv6回聲請求。當我在Scapy環境中完成這個過程時,它完美地工作。我可以在Wireshark中看到數據包交換。然而,當我有這樣的代碼:我的python腳本Scapy ICMPv6EchoRequest從Scapy命令提示符發送但不是從腳本內發送?

#Spacy commands 
ip = IPv6() 
ip.dst = "fe80::ba8d:12ff:fe42:98c8" 
ip.show() 
print'-----------------------------------------' 
request = ICMPv6EchoRequest() 
request.id=98 
request.show() 
print'-----------------------------------------\n' 

send(request/ip) #send Echo Request w/ IPv6 Header 

,然後調用腳本,我得到這個:

WARNING: Mac address to reach destination not found. Using broadcast. 
WARNING: No IPv6 underlayer to compute checksum. Leaving null. 
. 
Sent 1 packets. 

但沒有數據包實際發送的......沒有任何人有任何想法我做錯了什麼?

編輯:我應該提到,發送節點是一個虛擬的Ubuntu Linux機器和嘗試Receiver是橋接網絡適配器上的Macbook。

+0

以管理權限運行兩者? – RyPeck

+0

是的,我是!我想我應該提到發送節點是虛擬Ubuntu Linux機器,而嘗試的Receiver是橋接網絡上的Macbook。 – geeoph

回答

1

在Scapy中,當您使用/運算符時,左邊的操作數封裝或將操作數放在右側,因爲它是數據或底層。這將是數據包中接下來的內容。

你的問題是你送線 -

send(request/ip) 

你讓他們逆轉。這會產生一個IP層是ICMPv6層數據的數據包。這就是爲什麼你得到了錯誤WARNING: No IPv6 underlayer to compute checksum. Leaving null,,因爲你實際上沒有放置任何東西,因爲你的圖層順序錯誤。

這就是你的意思。

send(ip/request) 

更改那一個發送行,你應該看到你期望的結果。

+0

就是這樣!非常感謝! – geeoph