Scapy是一个强大的交互式数据包处理程序(使用python编写)。它能够伪造或者解码大量的网络协议数据包,能够发送、捕捉、匹配请求和回复包等等。
最重要的他还有很多更优秀的特性——发送无效数据帧、注入修改的802.11数据帧、在WEP上解码加密通道(VOIP)、ARP缓存攻击(VLAN) 等,这也是其他工具无法处理完成的。
用scapy构造数据包
在 Scapy 中可以用特别简单的方法来构造一个数据包,比如构造一个 IP 包,并传入一些参数
from scapy.all import *
ip_packet = IP(dst="10.60.17.46",ttl=80)
ls(ip_packet)
- version:版本号
- ihl:头长度
- tos:服务类型
- len:IP数据包总长
- id:标识符
- flags:标记
- flag:片偏移
- ttl:生存时间
- proto:协议类型
- chksum:头部校验
- src:源IP地址
- dst:目的IP地址
- options:可选项
小明对小红一片痴情,他们总是相互写信沟通,一封信就是一个ip包裹。但是我们这次想要搞点恶作剧,比如代小明给小红发消息,下面的payload里装的就是我们的消息。
from scapy.all import *
ming_ip = "10.60.17.46" # 我们要代替小明发信息
hong_ip = "192.168.209.153" # 收信人小红
ming_port = 9999 # source port (sport)
hong_port = 80 # destination port (dport)
payload = "Xiao Hong, I love you!" # packet payload 包的载荷,我们的嘿嘿嘿
spoofed_packet = IP(src=ming_ip, dst=hong_ip) / TCP(sport=ming_port, dport=hong_port) / payload
#我们制作了一个ip包,
#这个包假冒小明的名字(源地址source/src),
#发给了小红(目的地址destination/dst)
#包里装的是我们仿造的小明的表白信
print(spoofed_packet)
send(spoofed_packet)
‘/’符号被重载为“叠加”,上面我们把IP()/TCP()/payload很自然的表示这个ip包里边儿是个tcp,tcp里边装了我们的payload内容。而这个spoofed_packet就像汉堡一样,是一层一层累好了的IP包,非常方便。举一反三,
send(IP(dst="192.168.1.1")/ICMP())
这条程序其实就可以理解为在命令行中ping