scapy使用笔记

记录一下,以后有问题方便查找,后续再有问题可以记录在这里。


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即可


scapy使用笔记_第1张图片scapy使用笔记_第2张图片

    




你可能感兴趣的:(脚本语言)