记录一下,以后有问题方便查找,后续再有问题可以记录在这里。
1、IPv6问题
WARNING: No route found for IPv6 destination :: (no default route?)
原因是用 from scapy.all import *的时候把ipv6相关的模块也导进去了,ipv6我们用不着,所以这警告不但不起作用,还很讨厌,我们打开scapy安装目录,打开all.py文件,把与ipv6相关的几行注释掉就OK了,如下,大概是在26行附近
#if conf.ipv6_enabled:
# from utils6 import *
# from route6 import
2、同一段代码,在IDLE中会出现如下错误:“OSError:[Erro 9] Bad file descriptor”
在命令行中运行、直接点击文件运行,则运行正常,数据包发出 (原因未知)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from scapy.all import *
import sys
import struct
data= struct.pack('=BHI',0x12,20,1000)
pkt = IP(src='172.20.1.150',dst='172.20.1.3')/UDP(sport=12345,dport=5555)/data
send(pkt,inter=1,count=5)s
3、OSError:Result too large
在使用scapy的过程中,这个问题经常遇到。这里记录几种情况。
1)plface = conf.route.route(routeip)[0]
pkt=conf.L2socket(plface)
...................
data=Ether(t)
pkt.send(data)
routeip用于选择网卡,需为被选择网卡对应网络上设备的IP地址。
如果routeip填写了被选择网卡的ip地址,则会报如下错误:
File "dnet.pyx",line 112,in dnet.eth.__init__
OSError:Result too large
2)如下情况:
t_hw = GetMac()
print t_hw
t_ip = GetIp()
print t_ip
gatemac = GetGateWay(t_ip,t_hw,False)
target = '192.168.3.25'
fakeip = t_ip
fakemac = t_hw
pack_ip = IP(dst = target,src =fakeip,proto = 1)
pack_icmp = ICMP(type = 8)
pack_ether = Ether(src = fakemac,dst = gatemac,type = 0x0800)
#add info
info = Raw('ip:'+t_ip+' mac:'+ t_hw +' ')
t = str(pack_ether/pack_ip/pack_icmp/info)
s = Ether(t)
plface=conf.route.route("172.20.14.2")[0]
pks=conf.L2socket(plface)
pks.send(s)
“172.20.14.2”---要和计算机所存在网卡的IP地址子网掩码之前的一致,否则会报错。(dnet.eth(iface))错误
继续补充:
python 使用scapy包告警WARNING: can't import layer inet: 'module' object has no attribute 'IPPROTO_IPIP'
根据提示,找到安装目录C:\Python27\Lib\site-packages\scapy-2.3.1-py2.7.egg\scapy\layers,修改inet6.py
bind_layers(IPv6, IP, nh = socket.IPPROTO_IPIP ) 替换为: bind_layers(IPv6, IP, nh = 4 ) ,删除inet6.pyc即可