scapy常用接口
get_if_list() 获取接口列表
支持自动被全函数集的功能。1
2 > get_if_list()
['lo', 'eth0', 'eth1', 'eth2']
help() 获取帮助
1 | >>> help(sendp) |
发送/接收接口
- 只发不收
- send(),三层发包
- sendp(),二层发包
- 发且收
- sr(),sr1(), srloop(),三层发包
- srp(),srp1(),srploop,二层发包
The send and receive functions family will not only send stimuli and sniff responses but also match sent stimuli with received responses.
Function sr(),sr1(),and srloop() all work at layer 3.
Sr() is for sending and receiving packets,it returns a couple of packet and answers,and the unanswered packets.but sr1() only receive the first answer.srloop() is for sending a packet in loop and print the answer each time
常用操作
发送pcap格式的报文
- 读取pcap文件
- 以二层的形式发包。
1 | from scapy.all import * |
发送 raw 报文
使用 Raw
类。
1 | $ sudo scapy |
发送特定长度报文
使用 RandString(size=xxx)
。
1 | >>> a=IP(dst="76.200.0.2",ttl=1)/TCP(sport=176)/Raw(RandString(size=8000)) |
发送 ARP 报文
op 还有 is-at
。
1 | from scapy.all import * |
抓包并基于该包构造、发送新包
以下样例抓特定接口 ARP 请求报文,并返回 ARP 响应报文,类似 proxy ARP 功能。
1 | from scapy.all import * |
查看报文
见 https://thepacketgeek.com/scapy-p-04-looking-at-packets/:
1 | pkts[0].summary() |
常见问题
发包慢
- 一个一个发包,比按 pkts list 发包慢很多,原因为一个一个发,会一直在 bind socket。
使用 send 发送三层报文提示 MAC 未解析
使用 send
发送三层报文的时候,Ethernet 的信息由 PF_PACKET 自行解析,不需要提供,否则会提示 WARNING: Mac address to reach destination not found. Using broadcast.
。
1 | $ sudo scapy3k |