Scapy基本使用

什么是Scapy

Scapy 是一个强大的网络数据包操作工具。

导入scapy模块

>>> from scapy.all import *

构造一个包

>>> from scapy.all import *
>>> ip_package = IP(dst='www.163.com', ttl=80)            #构造一个IP包
>>> package = IP(dst='www.163.com')/TCP(dport=80)/"GET / HTTP/1.1\r\n\r\n"  #构造TCP包
>>> package               #显示包的内容
<IP  frag=0 proto=tcp dst=Net('www.163.com') |<TCP  dport=http |<Raw  load='GET / HTTP/1.1\r\n\r\n' |>>>

发送方数据包send() 以及 sendp()

Scapy 提供了两个函数来发送数据包:send() 以及 sendp()。

send() :作用于第三层也就是网络层,也就是说它会帮你处理掉路由以及下面两层(即物理层和链路层)。
sendp(): 作用于第二层。

当指定管关键字参数 return_packets 为 True 是会返回发送的包列表。

>>> send(IP(dst="www.baidu.com")/TCP(dport=80), return_packets=True)
.
Sent 1 packets.
<PacketList: TCP:1 UDP:0 ICMP:0 Other:0>

发送并接收数据包 sr()

sr 函数负责发送数据包并接收应答,返回值是一对数据包以及其应答,还包括没有被应答的数据包,所以一共有两个列表。

sr1 函数是上面的一个变种,只返回一个应答数据包列表。这些发送的数据包必须位于第三层之上(IP、ARP 等等)。

srp 函数和 sr 类似,但是作用于第二层之上,如果没有任何响应,则当到达超时时间的时候将得到一个 None 的值。

导出导入 PCAP 文件

Scapy 可以读取 pcap 文件以及往 pcap 文件写入包数据

>>> a = rdpcap("/spare/captures/isakmp.cap")
>>> a
<isakmp.cap: UDP:721 TCP:0 ICMP:0 Other:0>
# 或者
>>> a = sniff(offline="isakmp.cap")

使用 Scapy 进行嗅探

使用 Scapy 进行嗅探操作,最核心的函数即是 sniff。它有一些常用的入参,如下表所示:

count	需要捕获的包的个数,0 代表无限
store	是否需要存储捕获到的包
filter	指定嗅探规则过滤,遵循 BPF (伯克利封包过滤器)
timeout	指定超时时间
iface	指定嗅探的网络接口或网络接口列表,默认为 None,即在所有网络接口上嗅探
prn	传入一个可调用对象,将会应用到每个捕获到的数据包上,如果有返回值,那么它不会显示
offline	从 pcap 文件读取包数据而不是通过嗅探的方式获得
# 嗅探实例
>>> sniff(filter="tcp and port 80 and target www.acfun.cn", count=3)
<Sniffed: TCP:3 UDP:0 ICMP:0 Other:0>
>>> a = _
>>> a.nsummary()
0000 Ether / IP / TCP 10.0.3.173:62061 > 202.105.176.96:https A / Raw
0001 Ether / IP / TCP 202.105.176.96:https > 10.0.3.173:62061 A
0002 Ether / IP / TCP 10.0.3.173:57087 > 59.110.88.58:https PA / Raw

猜你喜欢

转载自blog.csdn.net/qq_30247635/article/details/86258632