Python Scapy 详解

基本介绍

我曾经写过一篇关于Scapy使用的文章,但是那篇文章已经是数年前发布的了。而计算机技术发展是爆炸性的,我在发布那篇文章的时候,我常用的 Python 版本是python 2.7,而知道我现在发出这篇文章的时候,其最新版已经是python 3.12了。所以几年没上 CSDN 写文章,今天再次回来,我觉得应该首先先再次写一篇这个 Python 之中最为强大的网络编程第三方库——Scapy的介绍和使用的文章。

那么,接下来便是最首要的几个问题:

1. Scapy是什么?

Scapy是一个功能强大且灵活的Python库,用于操作和探索计算机网络中的数据包。它允许用户构建各种类型的网络数据包,并支持多种网络协议,如TCP、UDP、ICMP、ARP等。Scapy不仅可以发送和接收数据包,还可以捕获、修改和解析网络流量,使用户能够深入研究网络通信并进行网络安全测试。

2. Scapy 的主要功能?

  1. 构建数据包:Scapy允许用户使用简单的Python代码构建自定义的网络数据包,从头开始创建各种协议的数据包,以满足特定的需求。
  2. 发送和接收数据包:用户可以使用Scapy发送和接收数据包,通过网络与其他设备进行交互,检查网络服务的可用性或执行自动化网络任务。
  3. 网络流量捕获:Scapy支持在网络接口上进行实时数据包捕获,并可以将捕获到的流量进行分析和展示。
  4. 网络流量解析:Scapy可以解析捕获的数据包,从中提取有用的信息,比如源地址、目标地址、协议类型等。
  5. 网络协议支持:Scapy支持大量网络协议,包括但不限于TCP、UDP、ICMP、ARP、IPv4、IPv6等。

Scapy 使用

构建数据包

你可以使用Scapy构建任何形式的数据包,它可以使得你无需使用socket库进行直接定义一个协议的数据包。后者可能常常使得你构建的数据包标识头错误而导致你的数据包失效,而使用Scapy可以轻松避免这一点。

在使用Scapy之前,注意不要忘记使用from scapy.all import *来导入Scapy中的函数,当然,你也可以指定你需要的内容,譬如from scapy.all import IP, TCP

然而,Scapy这个库的导入比较特殊,事实上,在你指明要从scapy.all导入的时候,Python 已经完全初始化并导入了所有的Scapy函数,所以你可以放心大胆的使用*这么一个通配符来导入Scapy

1. 构建一个 ACK 数据包

ack_packet = IP(src=source_ip, dst=target_ip)/TCP(sport=RandShort(), dport=target_port, flags="A")

IP类指明以下信息:

  1. src:数据包的来源
  2. dst:数据包的发送目的地址
  3. sport:指明发出该数据包的本地端口,RandShort()表示使用随机的未占用端口
  4. dport:指明该数据包发送的目标端口
  5. flags:声明该数据包为ACK数据包

事实上,这里面s或者d开头的其实就是source(来源)destination(目的地)的单词缩写。

黑客常常将src设置成一个未知的 IP 地址来伪造攻击源,如果你在进行网络安全测试,你可以将dport设置为80或者443来干扰破坏正常计算机的网络访问,因为我们常常使用80443端口作为HTTPHTTPS协议的出端口。

有趣的是,在我数年前写Scapy的时候,它似乎还并不能像这样创建ACK数据包。

2. 构建一个 ARP 数据包

arp = ARP()
arp.psrc = selfip
arp.hwsrc = selfmac
arp.pdst = target
arp.op = 2

当然,你也可以这样:

arp = ARP(
    psrc=selfip,
    hwsrc=selfmac,
    pdst=target
    op=2
    )

这两者是等效的,选择哪一种方式纯粹看个人喜好。前者是先声明ARP类,随后在设置ARP数据包的相关参数,后者是直接传入所需的参数,但是结果是相同的。

今天先更新到这里,明天再继续

你可能感兴趣的:(Python,网络编程,python,开发语言,Scapy)