Pcap数据包构造分析利器之scapy命令行

scapy是一个强大的Python包,用于交互式操纵和解析数据包。它可以用于发送、响应数据包,抓包,解析、修改和存储报文。本文介绍了scapy的安装方法,基本协议类的使用,以及如何通过命令行操作scapy,帮助读者理解和使用scapy进行网络报文构造和分析。
摘要由CSDN通过智能技术生成

scapy是一个开源项目,其开源地址这里,官方对于scapy的定义是

Scapy is a powerful Python-based interactive packet manipulation program and library.

即scapy是一个用来操作packet的可执行程序或者lib。

因此既可以使用scapy这个可执行程序进行命令行的操作,也可以在Python中引用scapy这个模块进行脚本的编写。scapy既可以用来发包,对报文进行响应,也可以用来抓包,还可以用来解析报文,修改报文,存储报文等等。虽然scapy提供了这么多的功能,我常用的还是使用scapy模拟一些实际的网络请求,从而构造特定的报文流量,这项功能是其他软件所缺少的。对于抓包,其实tcpdump以及tshark是比较强大的,报文解析更是首选wireshark。当然scapy将所有的功能进行了整合,在一些场景下,使用python脚本编写自动化工具是比较方便的。

安装
可以使用如下两种方式进行安装。

1,官方给定的安装方式:

git clone https://github.com/secdev/scapy
cd scapy
./run_scapy

源码安装的好处在于能够及时的跟踪最新版本的scapy,获取最新的功能。

2,对于linux系统,例如centos来说,通常的yum源都是有scapy的安装包的,可以直接进行安装,如下:

yum install scapy

不仅如此使用这种方式安装还会检查python的依赖,一般来说yum源中的scapy版本要求是python3,因此会在解析依赖的时候安装python3,这个也是很方便的,如图1:
在这里插入图片描述
图1

yum源中的版本可能不是最新的,安装完成后,可以如图2查看scapy的版本,同时校验scapy是否安装成功:
在这里插入图片描述

图2中还可以看出要想使用scapy提供的诸多功能,还需要安装python-cryptography v1.7+,matplotlib等模块,但是这些辅助功能并不影响主要功能的使用,可以根据实际的情况进行安装。其版本是某个commit提交对应的版本。

基本协议类的使用

进入到命令行模式之后,就可以进行报文的构造了。使用wireshark分析过报文的同学应该清楚,一个正常的报文具有如图3所示的结构:
在这里插入图片描述
图3

对应着数据链路层,网络层,传输层以及应用层。通常来说数据链路层,网络层,传输层都是由协议栈进行控制的,协议栈通常是操作系统的一项功能,因此我们基本感受不到传输层之下的影响。虽然应用层通常是由具体的应用控制的,同样的为了屏蔽对于上层业务程序员的底层复杂性,对于应用层来说,以HTTP为例。通常也是选用非常成熟的服务器应用来对传输协议进行屏蔽,包括Apache,Nginx等等,而web服务等程序员只需要关注传输的业务数据即可。使用scapy定义应用层,传输层,网络层的行为,因此对于这些网络传输协议的认识必不可少。网络协议的内容并不是本文的重点,需要自行补充。

针对网络传输协议,scapy提供了如下几个接口来表示具体的协议,和常见的协议具有一一对应的关系,包括Ether对应着数据链路层太网协议,IP对应着网络层协议,TCP和UDP对应着传输层协议,DNS对应着应用层协议。除此之外scapy对于ARP以及ICMP等常见的协议也提供了支持。一些使用的示例如图4:
在这里插入图片描述
图4

可以使用Ether,IP,TCP来直接生成对应的协议数据,同时提供了show,hexdump,summary等函数来对协议的各个字段从不同的角度进行显示。hexdump表示显示报文数据的16进制;summary对于报文进行一行的总结展示,对于网络层的数据来说最重要的就是IP地址,方向和应用层协议;show展示协议每一个字段的值,可以看到在没有指定协议字段的值的情况下,scapy会默认的付一些初值给协议字段。

其他常见函数

总的来说上述图4中函数分为两类,一类是hexdump这种通用的函数接口,另一类是summary和show这种特定协议类的函数。当然scapy还提供了数量繁多的其他函数,怎么记住能。因此第一步应该查看scapy提供了哪些命令函数,scapy提供了lsc()这样一个函数用来查看hexdump这样的用户命令,如图5:

在这里插入图片描述
图5

可以看到scapy提供了很多个函数命令,包括ls用来显示指定协议对象的协议字段,sr命令用来发送和接受数据包,tshark使用sniff命令进行抓包,并通过pkt.summary()进行显示。其中的很多命令在后续的使用中会频繁的使用到,最关键的是要记住lsc这个命令。

如何学习

上述简单的介绍了一下scapy的概念和基本的使用,要想了解scapy真正能够做哪些事情以及熟练的应用其提供的方法,则需要去实际的敲一敲其官方文档提供的示例,如图6:

在这里插入图片描述
图6

连接,这里。可以看到scapy在stacking layers中按照协议的层次对于该层次的协议字段等操作方法进行了演示,在Reading pcaps files中展示了离线文件读取接口的使用,在send相关的小节中展示了发包和收包的处理方法,当然还有在线嗅探以及数据包过滤器的使用方法。如果你曾经使用过wireshark,理解起来应该非常的容易。即使没有使用过wireshark,但是对于网络协议有所了解的话,配合着其注释,因该也没啥阻力。因此我建议初学者可以按照自己本身的需求,联系学习指定的小节,这样的目的性比较强,效率高。

以上便是对于scapy命令行的简单介绍,希望能够对你有所帮助。在通过命令行快速的了解scapy的功能之后,对于python脚本的使用以及在次基础上进行更为复杂的业务逻辑应该是水到渠成的事情。

本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村中少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值