scapy.sendrecv

发送和接收数据包的功能.

class scapy.sendrecv.AsyncSniffer(*args, **kwargs)

Bases: object

嗅探数据包并返回数据包列表.

Parameters
  • count –要捕获的数据包数量. 0表示无穷大.

  • 存储 –是存储嗅探的数据包还是丢弃它们

  • prn –应用于每个数据包的功能. 如果返回了某些内容,则会显示出来. –例如:prn = lambda x:x.summary()

  • 会话 –会话=用于处理数据包流的流解码器. 例如:IPSession(对流进行碎片整理)或NetflowSession

  • 过滤器 - BPF过滤器适用.

  • lfilter –应用于每个数据包的Python函数,以确定是否可以执行进一步的操作. –例如:lfilter = lambda x:x.haslayer(Padding)

  • 脱机 – PCAP文件(或PCAP文件列表)从中读取数据包,而不是嗅探它们

  • 超时 –在给定的时间后停止嗅探(默认值:无).

  • L2socket –使用提供的L2socket(默认值:使用conf.L2listen).

  • opens_socket –提供一个可以使用.recv()的对象(或对象列表).

  • stop_filter –应用到每个数据包的Python函数,以确定是否必须在此数据包之后停止捕获. –例如:stop_filter = lambda x:x.haslayer(TCP)

  • iface –接口或接口列表(默认值:无(在所有接口上嗅探)).

  • 监视器 –使用监视器模式. 可能并非在所有操作系统上都可用

  • starts_callback –嗅探器开始嗅探后立即调用(默认值:无).

iface,offline和opend_socket参数可以是元素,元素列表或将元素映射到标签的dict对象(请参见下面的示例).

Examples: synchronous
>>> sniff(filter="arp")
>>> sniff(filter="tcp",
...       session=IPSession,  # defragment on-the-flow
...       prn=lambda x: x.summary())
>>> sniff(lfilter=lambda pkt: ARP in pkt)
>>> sniff(iface="eth0", prn=Packet.summary)
>>> sniff(iface=["eth0", "mon0"],
...       prn=lambda pkt: "%s: %s" % (pkt.sniffed_on,
...                                   pkt.summary()))
>>> sniff(iface={"eth0": "Ethernet", "mon0": "Wifi"},
...       prn=lambda pkt: "%s: %s" % (pkt.sniffed_on,
...                                   pkt.summary()))
Examples: asynchronous
>>> t = AsyncSniffer(iface="enp0s3")
>>> t.start()
>>> time.sleep(1)
>>> print("nice weather today")
>>> t.stop()
join(*args, **kwargs)
start()

在异步模式下启动AsyncSniffer

stop(join=True)

如果不在异步模式下,则停止AsyncSniffer

class scapy.sendrecv.SndRcvHandler(pks, pkt, timeout=None, inter=0, verbose=None, chainCC=False, retry=0, multi=False, rcv_pks=None, prebuild=False, _flood=None, threaded=False, session=None)

Bases: object

用于发送/接收数据包,由sr *()使用. 不要直接使用.

这与请求和答案匹配.

Notes::
  • 线程模式:启用线程模式可能会破坏数据包时间戳,但在发送大量数据包时可能会导致加速. 默认禁用

  • DEVS:在发送数据包之前将输出时间戳存储在正确的位置,以避免可能导致负等待时间的竞争. 我们不是Stadia

results()
scapy.sendrecv.bridge_and_sniff(if1, if2, xfrm12=None, xfrm21=None, prn=None, L2socket=None, *args, **kargs)

在接口if1和if2之间转发流量,嗅探并返回交换的数据包.

Parameters
  • if2if1 )–要使用的接口(接口名称或打开的套接字).

  • xfrm12 –将数据包从if1转发到if2时调用的函数. 如果返回True,则按原样转发数据包. 如果返回False或None,则丢弃该数据包. 如果返回一个数据包,则转发此数据包,而不是原始数据包.

  • xfrm21 –对于从if2转发到if1的数据包,与xfrm12相同.

  • 其他参数与函数sniff The )相同-除了被忽略的offline,opend_socket和iface. 有关更多信息,请参见help(sniff).

class scapy.sendrecv.debug

Bases: object

crashed_on = None
match = []
recv = []
sent = []
scapy.sendrecv.send(x, inter=0, loop=0, count=None, verbose=None, realtime=None, return_packets=False, socket=None, *args, **kargs)

在第3层发送数据包

Parameters
  • x –数据包

  • -两个分组(默认为0)之间的时间(以秒)

  • 循环 –不确定地发送数据包(默认为0)

  • count – number of packets to send (default None=1)

  • 详细 –详细模式(默认为None = conf.verbose)

  • 实时 –在发送下一个之前检查包是否已发送

  • return_packets –返回发送的数据包

  • socket –要使用的套接字(默认为conf.L3socket(kargs))

  • iface –发送数据包的接口

  • 监视器 –(不是在Linux上)以监视器模式发送

Returns

None

scapy.sendrecv.sendp(x, inter=0, loop=0, iface=None, iface_hint=None, count=None, verbose=None, realtime=None, return_packets=False, socket=None, *args, **kargs)

在第2层发送数据包

Parameters
  • x – the packets

  • -两个分组(默认为0)之间的时间(以秒)

  • 循环 –不确定地发送数据包(默认为0)

  • count –要发送的数据包数量(默认为None = 1)

  • 详细 –详细模式(默认为None = conf.verbose)

  • 实时 –在发送下一个之前检查包是否已发送

  • return_packets –返回发送的数据包

  • socket –要使用的套接字(默认为conf.L3socket(kargs))

  • iface –发送数据包的接口

  • 监视器 –(不是在Linux上)以监视器模式发送

Returns

None

scapy.sendrecv.sendpfast(x, pps=None, mbps=None, realtime=None, loop=0, file_cache=False, iface=None, replay_args=None, parse_results=False)

使用tcpreplay在第2层发送数据包以提高性能

Parameters
  • pps每秒数据包

  • mpbs –每秒MBits

  • 实时 –使用数据包的时间戳,将弯曲时间与实时值一起使用

  • 循环 –处理数据包列表的次数

  • file_cache –将数据包缓存在RAM中,而不是在每次迭代时从磁盘读取

  • iface –输出接口

  • replay_args –其他tcpreplay args列表(列表[str])

  • parse_results –返回tcpreplay输出的信息字典(默认= False)

Returns

stdout,stderr,使用的命令

scapy.sendrecv.sndrcv(*args, **kwargs)

Scapy raw函数发送数据包并接收其答案. 警告:这是一个内部功能. 在许多情况下,使用sr / srp / sr1 / srp更合适.

scapy.sendrecv.sndrcvflood(pks, pkt, inter=0, verbose=None, chainCC=False, timeout=None)

sndrcv等效于泛洪.

scapy.sendrecv.sniff(*args, **kwargs)

嗅探数据包并返回数据包列表.

Parameters
  • count –要捕获的数据包数量. 0表示无穷大.

  • 存储 –是存储嗅探的数据包还是丢弃它们

  • prn –应用于每个数据包的功能. 如果返回了某些内容,则会显示出来. –例如:prn = lambda x:x.summary()

  • 会话 –会话=用于处理数据包流的流解码器. 例如:IPSession(对流进行碎片整理)或NetflowSession

  • 过滤器 - BPF过滤器适用.

  • lfilter –应用于每个数据包的Python函数,以确定是否可以执行进一步的操作. –例如:lfilter = lambda x:x.haslayer(Padding)

  • 脱机 – PCAP文件(或PCAP文件列表)从中读取数据包,而不是嗅探它们

  • 超时 –在给定的时间后停止嗅探(默认值:无).

  • L2socket –使用提供的L2socket(默认值:使用conf.L2listen).

  • opens_socket –提供一个可以使用.recv()的对象(或对象列表).

  • stop_filter –应用到每个数据包的Python函数,以确定是否必须在此数据包之后停止捕获. –例如:stop_filter = lambda x:x.haslayer(TCP)

  • iface –接口或接口列表(默认值:无(在所有接口上嗅探)).

  • 监视器 –使用监视器模式. 可能并非在所有操作系统上都可用

  • starts_callback –嗅探器开始嗅探后立即调用(默认值:无).

iface,offline和opend_socket参数可以是元素,元素列表或将元素映射到标签的dict对象(请参见下面的示例).

Examples: synchronous
>>> sniff(filter="arp")
>>> sniff(filter="tcp",
...       session=IPSession,  # defragment on-the-flow
...       prn=lambda x: x.summary())
>>> sniff(lfilter=lambda pkt: ARP in pkt)
>>> sniff(iface="eth0", prn=Packet.summary)
>>> sniff(iface=["eth0", "mon0"],
...       prn=lambda pkt: "%s: %s" % (pkt.sniffed_on,
...                                   pkt.summary()))
>>> sniff(iface={"eth0": "Ethernet", "mon0": "Wifi"},
...       prn=lambda pkt: "%s: %s" % (pkt.sniffed_on,
...                                   pkt.summary()))
Examples: asynchronous
>>> t = AsyncSniffer(iface="enp0s3")
>>> t.start()
>>> time.sleep(1)
>>> print("nice weather today")
>>> t.stop()
scapy.sendrecv.sr(x, promisc=None, filter=None, iface=None, nofilter=0, *args, **kargs)

在第3层发送和接收数据包

Parameters
  • pks –用于发送/接收数据包的SuperSocket实例

  • pkt –要发送的数据包

  • rcv_pks –如果设置,将代替pks用于接收数据包. 数据包仍将通过pks发送

  • nofilter –放置1以避免使用BPF过滤器

  • 重试 –如果为正,则为多少次重新发送未应答的数据包;为否,当没有更多的数据包被应答时为多少次重试

  • 超时 –在发送最后一个数据包后要等待多少时间

  • 详细 –设置详细程度

  • 多重 –是否对同一刺激接受多个答案

  • store_unanswered –是否存储未应答的数据包. 将其设置为False将提高速度,并将unes作为unans列表返回.

  • process –如果指定,则仅存储来自process(pkt)的结果. 该函数应遵循以下格式: lambda sent, received: (func(sent), func2(received))如果未应答数据包,则接收为None. 如果store_unanswered为False,则不会在未应答的数据包上调用该函数.

  • prebuild –在开始发送数据包之前预先构建数据包. 当生成器作为数据包传递时自动启用

scapy.sendrecv.sr1(x, promisc=None, filter=None, iface=None, nofilter=0, *args, **kargs)

在第3层发送数据包,仅返回第一个答案

Parameters
  • pks –用于发送/接收数据包的SuperSocket实例

  • pkt –要发送的数据包

  • rcv_pks –如果设置,将代替pks用于接收数据包. 数据包仍将通过pks发送

  • nofilter –放置1以避免使用BPF过滤器

  • 重试 –如果为正,则为多少次重新发送未应答的数据包;为否,当没有更多的数据包被应答时为多少次重试

  • 超时 –在发送最后一个数据包后要等待多少时间

  • 详细 –设置详细程度

  • 多重 –是否对同一刺激接受多个答案

  • store_unanswered –是否存储未应答的数据包. 将其设置为False将提高速度,并将unes作为unans列表返回.

  • process –如果指定,则仅存储来自process(pkt)的结果. 该函数应遵循以下格式: lambda sent, received: (func(sent), func2(received))如果未应答数据包,则接收为None. 如果store_unanswered为False,则不会在未应答的数据包上调用该函数.

  • prebuild –在开始发送数据包之前预先构建数据包. 当生成器作为数据包传递时自动启用

scapy.sendrecv.sr1flood(x, promisc=None, filter=None, iface=None, nofilter=0, *args, **kargs)

在第3层泛洪并接收数据包,仅返回第一个答案

Parameters
  • prn –功能应用于收到的数据包

  • 详细 –设置详细程度

  • nofilter –放置1以避免使用BPF过滤器

  • 过滤器 –提供BPF过滤器

  • iface –仅在给定的界面上收听答案

scapy.sendrecv.sr_func(x, promisc=None, filter=None, iface=None, nofilter=0, *args, **kargs)

在第3层发送数据包,仅返回第一个答案

Parameters
  • pks –用于发送/接收数据包的SuperSocket实例

  • pkt –要发送的数据包

  • rcv_pks –如果设置,将代替pks用于接收数据包. 数据包仍将通过pks发送

  • nofilter –放置1以避免使用BPF过滤器

  • 重试 –如果为正,则为多少次重新发送未应答的数据包;为否,当没有更多的数据包被应答时为多少次重试

  • 超时 –在发送最后一个数据包后要等待多少时间

  • 详细 –设置详细程度

  • 多重 –是否对同一刺激接受多个答案

  • store_unanswered –是否存储未应答的数据包. 将其设置为False将提高速度,并将unes作为unans列表返回.

  • process –如果指定,则仅存储来自process(pkt)的结果. 该函数应遵循以下格式: lambda sent, received: (func(sent), func2(received))如果未应答数据包,则接收为None. 如果store_unanswered为False,则不会在未应答的数据包上调用该函数.

  • prebuild –在开始发送数据包之前预先构建数据包. 当生成器作为数据包传递时自动启用

scapy.sendrecv.srflood(x, promisc=None, filter=None, iface=None, nofilter=None, *args, **kargs)

在第3层泛洪并接收数据包

Parameters
  • prn –功能应用于收到的数据包

  • 唯一的 –仅考虑其打印的数据包

  • nofilter –放置1以避免使用BPF过滤器

  • 过滤器 –提供BPF过滤器

  • iface –仅在给定的界面上收听答案

scapy.sendrecv.srloop(pkts, *args, **kargs)

循环发送第3层的数据包,并在每次srloop(pkts,[prn],[inter],[count],…)时打印答案–>无

scapy.sendrecv.srp(x, promisc=None, iface=None, iface_hint=None, filter=None, nofilter=0, type=3, *args, **kargs)

在第2层发送和接收数据包

Parameters
  • pks –用于发送/接收数据包的SuperSocket实例

  • pkt –要发送的数据包

  • rcv_pks –如果设置,将代替pks用于接收数据包. 数据包仍将通过pks发送

  • nofilter –放置1以避免使用BPF过滤器

  • 重试 –如果为正,则为多少次重新发送未应答的数据包;为否,当没有更多的数据包被应答时为多少次重试

  • 超时 –在发送最后一个数据包后要等待多少时间

  • 详细 –设置详细程度

  • 多重 –是否对同一刺激接受多个答案

  • store_unanswered –是否存储未应答的数据包. 将其设置为False将提高速度,并将unes作为unans列表返回.

  • process –如果指定,则仅存储来自process(pkt)的结果. 该函数应遵循以下格式: lambda sent, received: (func(sent), func2(received))如果未应答数据包,则接收为None. 如果store_unanswered为False,则不会在未应答的数据包上调用该函数.

  • prebuild –在开始发送数据包之前预先构建数据包. 当生成器作为数据包传递时自动启用

scapy.sendrecv.srp1(*args, **kargs)

在第2层发送和接收数据包,仅返回第一个答案

Parameters
  • pks –用于发送/接收数据包的SuperSocket实例

  • pkt –要发送的数据包

  • rcv_pks –如果设置,将代替pks用于接收数据包. 数据包仍将通过pks发送

  • nofilter –放置1以避免使用BPF过滤器

  • 重试 –如果为正,则为多少次重新发送未应答的数据包;为否,当没有更多的数据包被应答时为多少次重试

  • 超时 –在发送最后一个数据包后要等待多少时间

  • 详细 –设置详细程度

  • 多重 –是否对同一刺激接受多个答案

  • store_unanswered –是否存储未应答的数据包. 将其设置为False将提高速度,并将unes作为unans列表返回.

  • process –如果指定,则仅存储来自process(pkt)的结果. 该函数应遵循以下格式: lambda sent, received: (func(sent), func2(received))如果未应答数据包,则接收为None. 如果store_unanswered为False,则不会在未应答的数据包上调用该函数.

  • prebuild –在开始发送数据包之前预先构建数据包. 当生成器作为数据包传递时自动启用

scapy.sendrecv.srp1flood(x, promisc=None, filter=None, iface=None, nofilter=0, *args, **kargs)

在第2层泛洪并接收数据包,仅返回第一个答案

Parameters
  • prn –功能应用于收到的数据包

  • 详细 –设置详细程度

  • nofilter –放置1以避免使用BPF过滤器

  • 过滤器 –提供BPF过滤器

  • iface – listen answers only on the given interface

scapy.sendrecv.srpflood(x, promisc=None, filter=None, iface=None, iface_hint=None, nofilter=None, *args, **kargs)

在第2层泛洪并接收数据包

Parameters
  • prn –功能应用于收到的数据包

  • 唯一的 –仅考虑其打印的数据包

  • nofilter –放置1以避免使用BPF过滤器

  • 过滤器 –提供BPF过滤器

  • iface –仅在给定的界面上收听答案

scapy.sendrecv.srploop(pkts, *args, **kargs)

循环发送第2层的数据包,并在每次srloop(pkts,[prn],[inter],[count],…)时打印答案–>无

scapy.sendrecv.tshark(*args, **kargs)

嗅探数据包并打印它们,调用pkt.summary(). 这试图复制文本-wireshark(tshark)的外观