Scapy是由python编写的工具,可使用这个模块来实现对网络数据包的发送、监听和解析,下面介绍的是在交互模式中scapy的使用。
1. Scapy安装
可直接使用pip进行安装,pip install scapy
2. Scapy使用
2.1. scapy启动
直接使用scapy命令启动,启动界面如下:
2.2. 常用命令介绍
- Lsc()查看支持的操作方法
以下为部分命令截图
- Ls()查看支持设置的报文头部(协议报文)
通过ls(协议类型)可查看到具体的参数信息
2.3. 定义报文
可先定义报文,不同层之间用/隔开,按协议由底到上的顺序从左到右的顺序排列,如下所示:
>>> send_pkt = Ether(src="52:54:00:be:da:0c", dst="cc:c1:cc:cc:cc:cc") / IP(ttl=10, src="12.0.0.1", dst="10.25.153.113") / (ICMP(type=0x08, code=0x00, id=0x0100, seq=0x000f) / "payload")
通过show()可查看定义的报文信息:
通过summary可查看报文的摘要信息
>>> send_pkt.summary()
'Ether / IP / ICMP 12.0.0.1 > 10.25.153.113 echo-request 0 / Raw'
定义的各字段可以是具体值或是一个范围,如定义sip变化的报文可如下定义
2.4. 发送报文
常用的发送方法为sendp()和send(),其中sendp()为二层发包,需要指定网卡接口,send()为三层发包,自动根据路由表进行路由发送。
Send()常用的参数介绍:
Inter:发送两个报文之间的时间(单位:秒),默认值为0
Loop: 默认为0,不持续发送;设置为大于0的值,可持续发送
Count: 要发送的数据包数,默认为1
Return_packets: 返回发送的数据包
Iface:发送数据包的接口
如下所示,指定发送报文的接口和个数:
2.5. 发送并接收报文
srp(): 二层发送包,返回答复和没有答复的包的数量
srp1(): 二层发送包,返回只答复或者发送的包的详细信息,显示这个参数的返回数据
sr( ):三层发送包,返回答复和没有答复的包的数量
sr1( ):三层发送包,返回只答复或者发送的包的详细信息,显示这个参数的返回数据
2.6. 抓包
Sniff():捕获经过本机网卡的数据包
Sniff()常用参数介绍:
Iface: 指定所要进行监听的网卡
Count: 指定监听到数据包的数量,达到指定的数量就会停止监听
Filter: 对数据包进行过滤,若要同时满足多个条件可用“and”“or”等关系运算符来表达
例:
查看捕获的报文:
或保存捕获的报文,之后下载查看
>>> wrpcap("rx.pcap",_)
确认该报文保存无误