什么是Scapy
Scapy是一个强大的,用Python编写的交互式数据包处理程序,它能让用户发送、嗅探、解析,以及伪造网络报文,从而用来侦测、扫描和向网络发动攻击。Scapy可以轻松地处理扫描(scanning)、路由跟踪(tracerouting)、探测(probing)、单元测试(unit tests)、攻击(attacks)和发现网络(network discorvery)之类的传统任务。它可以代替hping
,arpspoof
,arp-sk
,arping
,p0f
甚至是部分的Nmap
,tcpdump
和tshark
的功能。
基操
构造数据包
scapy能够很自由轻松的操作数据包,我们用from scapy.all import *
导入包,然后用IP()
就可以构造一个最简单的IP协议数据包数据包,然后可以用ls()
来查看参数:
对比一下我们熟悉的IP协议的报文结构,是不是突然对scapy的方便之处有了一丝理解呢
其他的协议也是同理
利用show()也可以查看数据包的内容
还有summary()方法查看概要信息,hexdump()方法查看数据包的字节信息,就不放图片了。
发送数据包
scapy发送数据包有常用的如下几种方法:
- send(pkt) 发送三层数据包,但不会受到返回的结果。
- sr(pkt) 发送三层数据包,返回两个结果,分别是接收到响应的数据包和未收到响应的数据包。
- sr1(pkt) 发送三层数据包,仅仅返回接收到响应的数据包。
- sendp(pkt) 发送二层数据包。
- srp(pkt) 发送二层数据包,并等待响应。
- srp1(pkt) 发送第二层数据包,并返回响应的数据包
写点小东西
SYN扫描
也叫“半开式扫描”(half-open scanning),因为它没有完成一个完整的TCP连接。这种方法向目标端口发送一个SYN分组(packet),如果目标端口返回SYN/ACK,那么可以肯定该端口处于检听状态;否则,返回的是RST/ACK
sr1(IP(dst="www.baidu.com")/TCP(dport=80,flags="S"))
我们运行上面这句代码,flags=”S”的含义是发送SYN数据包,端口返回的flag位为SA,表示这些端口是开放的。而RA表示reset ack, 说明这些端口是关闭的。如图: