[英]Python 2.7 + Scapy 2.3.1
我正在嘗試使用scapy
但我不知道為什么某些功能不起作用:
from scapy.layers.inet import *
a = Ether() / IP(dst='192.168.1.1') / ICMP()
a.show()
結果是:
Traceback (most recent call last):
File "/home/user/PycharmProjects/untitled/main.py", line 7, in <module>
a.show()
File "/usr/lib/python2.7/dist-packages/scapy/packet.py", line 819, in show
###[ Ethernet ]###
reprval = f.i2repr(self,fvalue)
File "/usr/lib/python2.7/dist-packages/scapy/fields.py", line 191, in i2repr
x = self.i2h(pkt, x)
File "/usr/lib/python2.7/dist-packages/scapy/layers/l2.py", line 88, in i2h
x = conf.neighbor.resolve(pkt,pkt.payload)
File "/usr/lib/python2.7/dist-packages/scapy/layers/l2.py", line 38, in resolve
return self.resolvers[k](l2inst,l3inst)
File "/usr/lib/python2.7/dist-packages/scapy/layers/inet.py", line 727, in <lambda>
conf.neighbor.register_l3(Ether, IP, lambda l2,l3: getmacbyip(l3.dst))
File "/usr/lib/python2.7/dist-packages/scapy/layers/l2.py", line 56, in getmacbyip
iff,a,gw = conf.route.route(ip)
AttributeError: 'NoneType' object has no attribute 'route'
如果沒有.show()
它將起作用並且:
pck = Ether()
pck.show()
也可以。
我嘗試了其他功能,例如.show
,但有時會出現此錯誤。 為什么?
您需要導入所有內容,因此請嘗試更改導入語句,如下所示:
$ sudo python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from scapy.all import *
WARNING: No route found for IPv6 destination :: (no default route?)
>>> a = Ether() / IP(dst='192.168.1.1') / ICMP()
>>> a.show()
###[ Ethernet ]###
dst = 74:11:d5:04:1b:82
src = 80:f6:df:59:3d:35
type = 0x800
###[ IP ]###
version = 4
ihl = None
tos = 0x0
len = None
id = 1
flags =
frag = 0
ttl = 64
proto = icmp
chksum = None
src = 192.168.0.5
dst = 192.168.1.1
\options \
###[ ICMP ]###
type = echo-request
code = 0
chksum = None
id = 0x0
seq = 0x0
>>>
我認為您錯過了一步,您的第一行指定了如何構造一個/一些數據包,展示了嘗試剖析接收到的數據包的方法。
嘗試類似:
from scapy.layers.inet import *
a = Ether() / IP(dst='192.168.1.1') / ICMP() # Rule for creating packets
s,r = sr1(a) # Send & Receive one packet(s)
r.show() # Show the recieved packet(s)
這使用您的規則構造單個數據包,發送該數據包並捕獲答復,然后顯示實際數據包。
試圖明智地在鏈接層中填寫有效的默認值是不明智的。 當您不導入整個模塊時,它不能很好地處理事情。
如果您只更改一點代碼,以使它不需要這樣做,那么它將檢查您的數據包。
from scapy.layers.inet import *
a = Ether(src='AA:AA:AA:AA:AA:AA', dst='BB:BB:BB:BB:BB:BB') / IP(src='192.168.1.1') / ICMP()
a.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.