什么是Scapy

Scapy是一个强大的,用Python编写的交互式数据包处理程序,它能让用户发送、嗅探、解析,以及伪造网络报文,从而用来侦测、扫描和向网络发动攻击。Scapy可以轻松地处理扫描(scanning)、路由跟踪(tracerouting)、探测(probing)、单元测试(unit tests)、攻击(attacks)和发现网络(network discorvery)之类的传统任务。它可以代替hping,arpspoof,arp-sk,arping,p0f 甚至是部分的Nmap,tcpdumptshark 的功能。

基操

构造数据包

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, 说明这些端口是关闭的。如图:

traceroute路由追踪

模拟TCP三次握手

搞事(操作PCAP文件以及利用ARP进行攻击)