scapy.utils

通用实用程序功能.

class scapy.utils.ContextManagerCaptureOutput

Bases: object

拦截控制台输出的上下文管理器.

示例:>>>,其中ContextManagerCaptureOutput()作为cmco:…print(" hey")…assert cmco.get_output()==" hey"

get_output(eval_bytes=False)
class scapy.utils.ContextManagerSubprocess(prog, suppress=True)

Bases: object

上下文管理器,可轻松检查未知命令,而不会崩溃.

示例:>>>使用ContextManagerSubprocess(" tcpdump"):>>> subprocess.Popen([[" tcpdump"," – version"])错误:无法执行tcpdump,是否已安装?

class scapy.utils.EDecimal(value='0', context=None)

Bases: decimal.Decimal

扩展十进制

这实现了算术运算并与float进行比较以实现向后兼容性

class scapy.utils.EnumElement(key, value)

Bases: object

class scapy.utils.Enum_metaclass(name, bases, dct)

Bases: type

element_class

EnumElement别名

get(attr, val=None)
class scapy.utils.PcapNgReader(filename)

Bases: scapy.utils.RawPcapNgReader

alternative

PcapReader别名

read_all(count=- 1)
read_packet(size=65535)
recv(size=65535)
class scapy.utils.PcapReader(filename)

Bases: scapy.utils.RawPcapReader

alternative

PcapNgReader别名

read_all(count=- 1)
read_packet(size=65535)
recv(size=65535)
class scapy.utils.PcapReader_metaclass(name, bases, dct)

Bases: type

(Raw)Pcap(Ng)Readers的元类

static open(filename)

打开(如果需要)文件名,然后阅读魔术.

class scapy.utils.PcapWriter(filename, linktype=None, gz=False, endianness='', append=False, sync=False, nano=False, snaplen=65535)

Bases: scapy.utils.RawPcapWriter

比wrpcap()具有更多控制权的流PCAP编写器

class scapy.utils.PeriodicSenderThread(sock, pkt, interval=0.5)

Bases: threading.Thread

run()
stop()
class scapy.utils.RawPcapNgReader(filename)

Bases: scapy.utils.RawPcapReader

有状态的pcapng阅读器. 每个数据包以字节为单位返回.

class PacketMetadata(linktype, tsresol, tshigh, tslow, wirelen)

Bases: tuple

property linktype

字段编号0的别名

property tshigh

字段2的别名

property tslow

字段编号3的别名

property tsresol

字段编号1的别名

property wirelen

字段编号4的别名

alternative

RawPcapReader别名

read_block_epb(block, size)

增强分组块

read_block_idb(block, _)

接口描述块

read_block_pkt(block, size)

(已过时)数据包块

read_block_spb(block, size)

简单数据包块

read_options(options)

段标题块

read_packet(size=65535)

读取块,直到到达EOF或数据包,然后返回None或(数据包,(链接类型,秒,usec,wir​​elen)),其中packet是字符串.

class scapy.utils.RawPcapReader(filename)

Bases: object

有状态的pcap读取器. 每个数据包都以字符串形式返回

class PacketMetadata(sec, usec, wirelen, caplen)

Bases: tuple

property caplen

字段编号3的别名

property sec

字段编号0的别名

property usec

字段编号1的别名

property wirelen

字段2的别名

alternative

RawPcapNgReader别名

close()
dispatch(callback)

为每个读取的数据包调用指定的回调例程

这只是主循环的一项便利功能,它允许在线程中轻松启动数据包处理.

fileno()
next()

在pcap文件中的一组数据包上实现迭代器协议pkt是RawPcapReader.read_packet()中定义的元组(pkt_data,pkt_metadata)

nonblocking_socket = True
read_all(count=- 1)

返回pcap文件中所有数据包的列表

read_allowed_exceptions = ()
read_packet(size=65535)

从文件读取的单个数据包作为包含(pkt_data,pkt_metadata)的元组返回

没有更多数据包时引发EOFError

recv(size=65535)

模拟套接字

static select(sockets, remain=None)
class scapy.utils.RawPcapWriter(filename, linktype=None, gz=False, endianness='', append=False, sync=False, nano=False, snaplen=65535)

Bases: object

比wrpcap()具有更多控制权的流PCAP编写器

close()
fileno()
flush()
write(pkt)

将Packet,SndRcvList对象或字节写入pcap文件.

Parameters

pkt可迭代的 [ scapy.packet.Packet ] scapy.packet.Packet bytes )–要写入的数据包(每个数据包一个记录),或要写入的原始字节(作为一个记录).

class scapy.utils.SingleConversationSocket(o)

Bases: object

send(x)
sr(*args, **kargs)
sr1(*args, **kargs)
scapy.utils.atol(x)
scapy.utils.binrepr(val)
scapy.utils.checksum(pkt)
scapy.utils.checksum_endian_transform(chk)
scapy.utils.chexdump(x, dump=False)

建立每个字节的十六进制表示形式

Example

>>> chexdump(IP())
0x45, 0x00, 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x7c, 0xe7, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01  # noqa: E501
Parameters
  • x –一个数据包

  • dump –如果为False,则打印视图

Returns

仅当dump = True时才为字符串

scapy.utils.colgen(*lstcol, **kargs)

返回一个生成器,该生成器将永远混合提供的数量trans:一个将三个参数转换为颜色的函数. lambda x,y,z:默认为(x,y,z)

scapy.utils.corrupt_bits(s, p=0.01, n=None)

从字符串中翻转给定的百分比(至少一位)或位数

scapy.utils.corrupt_bytes(s, p=0.01, n=None)

Corrupt a given percentage (at least one byte) or number of bytes from a string

scapy.utils.do_graph(graph, prog=None, format=None, target=None, type=None, string=None, options=None)

使用外部软件处理图形描述. 此方法用于将graphviz格式转换为图像.

Parameters
  • – GraphViz图说明

  • –使用哪个graphviz程序

  • 格式 –输出类型(svg,ps,gif,jpg等),传递给点的" -T"选项

  • 字符串 –如果不是None,则只需返回图形字符串

  • 目标 –文件名或重定向. 默认管道到Imagemagick的显示程序

  • options –要传递给程序的选项

scapy.utils.export_object(obj)
scapy.utils.fletcher16_checkbytes(binbuf, offset)

计算作为2字节二进制字符串返回的Fletcher-16校验字节.

将字节包括到缓冲区中(在偏移标记的位置),缓冲区的#noqa:E501全局Fletcher-16校验和将为0.因此,很容易在接收方验证#noqa:E501缓冲区的完整性. .

有关该算法的详细信息,请参阅RFC 2328第12.1.7章和RFC 905附件B.#noqa:E501

scapy.utils.fletcher16_checksum(binbuf)

计算给定缓冲区的Fletcher-16校验和.

注意:如果缓冲区包含从Fletcher-16校验和#noqa:E501派生的两个校验字节,则此函数的结果必须为0.否则缓冲区已损坏. #noqa:E501

scapy.utils.get_temp_dir(keep=False)

创建一个临时文件,并返回其名称.

Parameters

keep –如果为False(默认),则在Scapy退出时将递归删除目录.

Returns

临时目录的完整路径.

scapy.utils.get_temp_file(keep=False, autoext='', fd=False)

创建一个临时文件.

Parameters
  • keep –如果为False,则在Scapy退出时自动删除文件.

  • autoext –添加到生成的文件名的后缀.

  • fd –如果为True,则返回打开了临时文件的类似文件的对象. 如果为False(默认),则返回文件路径.

scapy.utils.get_terminal_width()

如果在窗口中,则获取终端宽度(字符数).

注意:这将尝试几种方法,以支持尽可能多的终端和操作系统.

scapy.utils.hexdiff(x, y)

显示2个二进制字符串之间的差异

scapy.utils.hexdump(x, dump=False)

建立一个类似十六进制视图的tcpdump

Parameters
  • x –一个数据包

  • 转储 –定义结果是否必须打印或以变量形式返回

Returns

仅当dump = True时为字符串

scapy.utils.hexedit(pktlist)

Run hexedit on a list of packets, then return the edited packets.

scapy.utils.hexstr(x, onlyasc=0, onlyhex=0, color=False)

从字节构建像十六进制这样的精美tcpdump.

scapy.utils.import_hexcap(input_string=None)

导入类似十六进制视图的tcpdump

例如:通过hexdump()或tcpdump导出,或者通过wirehark的"导出为hex"导出

Parameters

input_string –包含要分析的十六进制转储输入的字符串. 如果为None,则从标准输入中读取.

scapy.utils.import_object(obj=None)
scapy.utils.incremental_label(label='tag%05i', start=0)
scapy.utils.issubtype(C, B) → bool

返回C是否为类,是否为B的子类.当使用元组作为第二个参数时,issubtype(X,(A,B,…))是issubtype(X,A)或issubtype( X,B)或…(等).

scapy.utils.itom(x)
scapy.utils.lhex(x)
scapy.utils.linehexdump(x, onlyasc=0, onlyhex=0, dump=False)

在一行上构建hexdump()的等效视图

请注意,将onlyasc和onlyhex都设置为1会导致输出为空

Parameters
  • x –一个数据包

  • onlyasc – 1仅显示ascii视图

  • onlyhex – 1仅显示十六进制视图

  • dump –如果为False,则打印视图

Returns

仅当dump = True时为字符串

scapy.utils.load_object(fname)

解开Python对象

scapy.utils.long_converter(s)
scapy.utils.ltoa(x)
scapy.utils.mac2str(mac)
scapy.utils.make_lined_table(*args, **kargs)
scapy.utils.make_table(*args, **kargs)
scapy.utils.make_tex_table(*args, **kargs)
scapy.utils.pretty_list(rtlst, header, sortBy=0, borders=False)

漂亮的列表以适合终端,并添加标题

scapy.utils.randstring(length)

返回长度为(长度> = 0)的随机字符串

scapy.utils.rdpcap(filename, count=- 1)

读取pcap或pcapng文件并返回数据包列表

Parameters

count –只读<count>数据包

scapy.utils.repr_hex(s)

将提供的位串转换为简单的十六进制数字串

scapy.utils.restart()

重新启动scapy

scapy.utils.sane(x)
scapy.utils.sane_color(x)
scapy.utils.save_object(fname, obj)

腌制Python对象

scapy.utils.str2mac(s)
scapy.utils.strand(s1, s2)

返回提供的2个字符串s1和s2的二进制与. s1和s2的长度必须相同.

scapy.utils.strxor(s1, s2)

返回提供的2个字符串s1和s2的二进制XOR. s1和s2的长度必须相同.

scapy.utils.tcpdump(pktlist=None, dump=False, getfd=False, args=None, flt=None, prog=None, getproc=False, quiet=False, use_tempfile=None, read_stdin_opts=None, linktype=None, wait=True, _suppress=False)

在数据包列表上运行tcpdump或tshark.

在OSX上使用tcpdumpprog == conf.prog.tcpdump )时, prog == conf.prog.tcpdump使用一个临时文件来存储数据包. 这可以解决Apple的tcpdump版本中的一个错误: http : //apple.stackexchange.com/questions/152682/

否则,数据包将以标准输入传递.

可以使用use_tempfile参数显式启用或禁用此功能.

当使用wireshark ,它会与被称为-ki -从标准输入立即开始捕获数据包.

否则,该命令将运行-r - (这是正确tcpdumptshark ).

可以使用read_stdin_opts覆盖read_stdin_opts . 当use_tempfile=True或以其他方式从常规文件读取数据包时,这无效.

Parameters
  • pktlist –数据包实例,PacketList实例或数据包实例列表. 也可以是文件名(作为字符串),打开的类似文件的对象,该对象必须是tshark(Pcap,PcapNg等)可读的文件格式或无(嗅探)

  • flt –与tcpdump一起使用的过滤器

  • dump –设置为True时,返回一个字符串而不显示它.

  • getfd –设置为True时,返回一个类似文件的对象,以从tcpdump或tshark中读取数据.

  • getproc –设置为True时,返回subprocess.Popen对象

  • args –传递给tshark的参数(作为列表)(tshark的示例:args = ["-T"," json"]).

  • prog –要使用的程序(默认为tcpdump,将与tshark一起使用)

  • 安静 –设置为True时,将丢弃stderr进程

  • use_tempfile –设置为True时,始终使用临时文件存储数据包. 设置为False时,通过stdin传递数据包. 当设置为None(默认)时,仅在OSX上使用带有tcpdump的临时文件.

  • read_stdin_opts –设置后,需要从stdin捕获的参数列表. 否则,尝试猜测.

  • linktype –自定义的DLT值或名称,用于覆盖默认值.

  • wait –如果为True(默认),则在返回Scapy之前等待进程终止. 如果为False,则该过程将脱离后台. 如果dump,getproc或getfd为True,则它们的作用与wait=False相同.

Examples:

>>> tcpdump([IP()/TCP(), IP()/UDP()])
reading from file -, link-type RAW (Raw IP)
16:46:00.474515 IP 127.0.0.1.20 > 127.0.0.1.80: Flags [S], seq 0, win 8192, length 0  # noqa: E501
16:46:00.475019 IP 127.0.0.1.53 > 127.0.0.1.53: [|domain]

>>> tcpdump([IP()/TCP(), IP()/UDP()], prog=conf.prog.tshark)
  1   0.000000    127.0.0.1 -> 127.0.0.1    TCP 40 20->80 [SYN] Seq=0 Win=8192 Len=0  # noqa: E501
  2   0.000459    127.0.0.1 -> 127.0.0.1    UDP 28 53->53 Len=0

要获取tshark解析的PacketList()的JSON表示,可以执行以下操作:

>>> import json, pprint
>>> json_data = json.load(tcpdump(IP(src="217.25.178.5",
...                                  dst="45.33.32.156"),
...                               prog=conf.prog.tshark,
...                               args=["-T", "json"],
...                               getfd=True))
>>> pprint.pprint(json_data)
[{u'_index': u'packets-2016-12-23',
  u'_score': None,
  u'_source': {u'layers': {u'frame': {u'frame.cap_len': u'20',
                                      u'frame.encap_type': u'7',
[...]
                                      },
                           u'ip': {u'ip.addr': u'45.33.32.156',
                                   u'ip.checksum': u'0x0000a20d',
[...]
                                   u'ip.ttl': u'64',
                                   u'ip.version': u'4'},
                           u'raw': u'Raw packet data'}},
  u'_type': u'pcap_file'}]
>>> json_data[0]['_source']['layers']['ip']['ip.ttl']
u'64'
scapy.utils.tdecode(pktlist, args=None, **kwargs)

在数据包列表上运行tshark.

Parameters

args –如果未指定,则默认为tshark -V .

有关更多参数,请参见tcpdump() .

scapy.utils.tex_escape(x)
scapy.utils.valid_ip(addr)
scapy.utils.valid_ip6(addr)
scapy.utils.valid_mac(mac)
scapy.utils.valid_net(addr)
scapy.utils.valid_net6(addr)
scapy.utils.whois(ip_address)

Python的Whois客户端

scapy.utils.wireshark(pktlist, wait=False, **kwargs)

在数据包列表上运行Wireshark.

有关更多参数说明,请参见tcpdump() .

注意:默认情况下,wait = False,以在后台运行Wireshark.

scapy.utils.wrpcap(filename, pkt, *args, **kargs)

将数据包列表写入pcap文件

Parameters
  • filename –要向其写入数据包的文件的名称,或者是一个可写的类似文件的开放对象. 文件描述符将在调用结束时关闭,因此不要使用您不想关闭的对象(例如,以交互方式运行wrpcap(sys.stdout,[])将使Scapy崩溃).

  • gz –设置为1以保存压缩后的捕获

  • 链接类型 –强制链接类型值

  • 字节序 –" <"或">",强制字节序

  • 同步 –不缓冲对捕获文件的写入

scapy.utils.zerofree_randstring(length)

返回长度为零(长度> = 0)的随机字符串.