百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Scapy:用Python编写自己的网络抓包工具

off999 2024-12-06 18:13 22 浏览 0 评论


随着Python越来越流行,在安全领域的用途也越来越多。比如可以用requests 模块撰写进行Web请求工具;用sockets编写TCP网络通讯程序;解析和生成字节流可以使用struct模块。而要解析和处理网络包在网络安全领域更加普遍,时常

我们会使用tcpdump和wireshark(tshark)。但是如果要自己写程序进行处理,则需要更灵活的语言包(库),这就是本文要介绍的Scapy。

概述

Scapy 是一个用来解析底层网络数据包的Python模块和交互式程序,该程序对底层包处理进行了抽象打包,使得对网络数据包的处理非常简便。该类库可以在在网络安全领域有非常广泛用例,可用于漏洞利用开发、数据泄露、网络监听、入侵检测和流量的分析捕获的。Scapy与数据可视化和报告生成集成,可以方便展示起结果和数据。

Scapy的基本理念是提出一个基于领域特定语言,从而轻松快速地进行有线格式(Wire Format)管理。

安装运行

Scapy可以通过pip安装:

pip install scapy

也可以通过发行版的包管理器安装,比如yum,但是其版本可能太老已经过时。

也可以通过直接从官方仓库clone源码安装:

git clone github /secdev/scapy

然后,可以可以简单地运行:

cd scapy

./run_scapy

用法示例

解析PCAP抓包

用Scapy做的最简单的事情就是读取PCAP文件。让我们下载Wireshark的sip-rtp-opus-hybrid.pcap 示例PCAP数据包为例子:

用rdpcap()函数引入PCAP文件,读取其内容的函数:

>>> pkts = rdpcap("sip-rtp-opus-hybrid.pcap")

>>> pkts

<sip-rtp-opus-hybrid.pcap: TCP:0 UDP:7 ICMP:0 Other:0>

为了更详细读取PCAP文件中的数据,可以使用PcapReader从打开的文件句柄中迭代地读取数据包,一次一个包,bing实例化的对象:

>>> fd = open("sip-rtp-opus-hybrid.pcap", "rb")

>>> reader = PcapReader(fd)

>>> reader

<scapy.utils.PcapReader at 0x7f913c7c24e0>

>>> for CC in reader:

...: print(CC)

...:

>>> fd.close()

如上面所示,每个数据包都以有线格式提供。Scapy 将每个数据包以网络层的堆栈。Scapy层对象对应于网络协议及其有线格式。

获取第一个数据包并检查IP层是否可用:

>>> first= CC[0]

>>> first.haslayer(IP)

True

>>> IP in first

True

要解析来自特定层的数据包,可按想要的层对其进行索引,并让Scapy打印所有字段:

要以十六进制打印数据包,可以使用hexdump()功能:

>>> hexdump(first)

为了完全解析和完美地输出一个数据包,需要调用show()方法:

>>> first.show()

可以看到,上面未能有效地解析SI负载。这是因为Scapy主要处理二进制协议 网络堆栈的较低部分,而SIP不是。但是可以引入第三方模块来解析一些应用层协议,比如HTTP协议。

实时抓包解析

比如可以读取带有预先捕获的数据包的PCAP文件,如果要做一些数据包嗅探,如果系统准备好在混杂模式下使用网络接口,可以调用sniff()从网卡获取一些数据包的函数:

>>> for CC in sniff(count=5):

...: CC.show()

...:

Scapy中也可以使用和Wireshark(tshark)、tcpdump 相同BPF语法来过滤嗅探到的数据包和许多其他工具支持:

>>> for CC in sniff(filter="udp", count=5):

...: CC.show()

...:

要将捕获的数据包保存到 PCAP 文件中以供进一步分析,可以使用wrpcap()函数来导出到文件:

>>> capture = sniff(filter="udp", count=5)

>>> capture

<Sniffed: TCP:0 UDP:5 ICMP:0 Other:0>

>>> wrpcap("udp.pcap", capture)

发送ping包

除了可以嗅探(捕获和解析)网络数据包,但Scapy也支持生成数据包进行各种主动欺骗:网络扫描、服务器探测、通过发送攻击系统格式错误的请求等等。

下面尝试ping一个服务器,涉及到要给服务发送一个ICMP数据包:

>>> CC = IP(dst="XXX") / ICMP()

>>> CC.show()

然后调用sr1()函数,可以发送一个ICMP数据包(即ping),等待返回数据包返回:

>>> rr=sr1(CC)

Begin emission:

Finished sending 1 packets.

...*

Received 4 packets, got 1 answers, remaining 0 packets

>>> rr

上面得到了正确的ICMP回复。

为了发送多个数据包和接收响应(例如实现ping扫描),可以用sr()功能。发送多个数据包,但等待单个响应。还可以用sr1_flood()功能。

网络协议层乱序

Scapy通过重载了Python“/”运算符来实现层堆叠,不再不强制按照网络层顺序执行,以达到以预期人为顺序执行(这在某些测试和应用中很有用)。

>>> CC=ICMP() / UDP() / IP() / IP()

>>> CC

<ICMP |<UDP |<IP frag=0 proto=ipencap |<IP |>>>>

>>> CC.show()

###[ ICMP ]###

type= echo-request

code= 0

chksum= None

id= 0x0

seq= 0x0

###[ UDP ]###

sport= domain

dport= domain

len= None

chksum= None

###[ IP ]###

version= 4

ihl= None

tos= 0x0

len= None

id= 1

flags=

frag= 0

ttl= 64

proto= ipv4

chksum= None

src= 127.0.0.1

dst= 127.0.0.1

\options\

###[ IP ]###

version= 4

ihl= None

tos= 0x0

len= None

id= 1

flags=

frag= 0

ttl= 64

proto= hopopt

chksum= None

src= 127.0.0.1

dst= 127.0.0.1

\options\

>>> hexdump(CC)

WARNING: No IP underlayer to compute checksum. Leaving null.

0000 08 00 F7 65 00 00 00 00 00 35 00 35 00 30 00 00 ...e.....5.5.0..

0010 45 00 00 28 00 01 00 00 40 04 7C CF 7F 00 00 01 E..(....@.|.....

0020 7F 00 00 01 45 00 00 14 00 01 00 00 40 00 7C E7 ....E.......@.|.

0030 7F 00 00 01 7F 00 00 01

设计成这样,主要是为了可以生成任意的网络数据包(故意损坏的),用来进行漏洞测试研究或利用。当然对于对这一块不熟悉的用户,强烈建议不要轻易尝试,以免造成问题。

数据可视化

Scapy也支持通过PyX(需要预先安装模块)对数据进行可视化。可以输出为一个数据包或数据包列表的图形(PostScript/PDF格式):

>>> xxCC[404].pdfdump(layer_shift=1)

>>> xxCC[404].psdump("/tmp/xxCC.eps",layer_shift=1)

模糊测试

利用函数fuzz()可以利用快速构建生成随机测试值利用模糊模板并循环发送进行测试。以下示例中,IP层正常,UDP和NTP层被fuzz。UDP 校验和将正确,UDP 目标端口将被 NTP重载为123,并且NTP版本将被强制为4,所有其他端口将被随机化:

send(IP(dst="target")/fuzz(UDP()/NTP(version=4)),loop=1)

................^C

Sent 16 packets.

总结

抛砖引玉,我们在此介绍了一些基本的Scapy用途,当然这只是scapy庞大功能中的冰山一角,更多的用法请参考官方文档。

据虫虫所知目前有些工具已经使用了scapy包:

Trackerjacker: WiFi网络映射器

Wifiphisher: Wifi接入点创建工具

Sshame:SSH 公钥暴力破解器

ISF:工业系统的利用框架。

还有一些更特殊的用途则需要各位hacker来进一步发掘。

相关推荐

photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
win10下载应用商店(win10应用商店打不开)

1、点击Win10系统的开始菜单,然后在点击应用商店;2、打开Win10应用商店后,在搜索框里输入想要搜索的应用软件,然后点击检索;3、点击搜索到的应用,点击安装;4、点击安装后,系统会提示要切换到这...

dell电脑重装系统win10(dell 重装win10系统)

戴尔笔记本重装系统win10的步骤如下:制作好wepe启动盘之后,将win10系统iso镜像直接复制到U盘。在需要重装系统的戴尔电脑上插入pe启动盘,重启后不停按F12启动快捷键,调出启动菜单对话框,...

android升级包下载安装(android 升级包)

打开手机系统更新升级,前提是官方有新系统推送才能更新  哪个大不一定,但一般规律如下:  1、小版本的更新,通常越更新越大。比如3.1更新到3.2,通常是修复bug,代码量通常会增大,体积就会增大。 ...

hdd硬盘和ssd(ssd硬盘和hdd硬盘是什么意思)

HDD硬盘和SSD硬盘是两种不同类型的电脑存储设备,它们有着以下区别:1.工作原理:HDD硬盘使用机械旋转的磁盘和读写磁头来存储和读取数据,而SSD硬盘则使用闪存存储数据,类似于USB闪存盘。2....

电脑免费软件下载大全(电脑上免费的下载软件)

正常情况下,如果我们想要在自己的电脑上面下载一个不要钱的单机游戏,那么我们是可以直接在我们的软件管理中心进行一个下载的,这个时候我们只需要通过一个权限就能够正常的下载,当然我们也是可以在一些小游戏的软...

mpp文件转换excel(mpp转换成pdf)

要将Excel表格转换为MPP格式,您可以按照以下步骤操作:1.打开Excel表格并确保数据按照项目的不同阶段或任务进行组织。2.将Excel表格中的数据复制到一个新的MicrosoftProj...

win7旗舰版开机密码忘记按f2

方法如下:开始-控制面板-用户帐户;在打开的更改用户帐户界面点击要更改的帐户;然后点击帐户左面的更改密码按钮;在打开的页面上,输入一次当前使用的密码,输入2次要更改的新密码然后保存退出就可以了...

笔记本无音频输出设备(笔记本无音频输出设备)

1、没有声卡驱动,解决方法就是找到笔记本的官网,下载电脑声卡的驱动安装即可。2、没有外界的音频播放设备,解决方法就是买一个外界的音频播放设备插到电脑主机的音频接口上即可。笔记本电脑显示未安装任何音频输...

iso文件能用手机打开吗(iso文件能用手机打开吗安全吗)

一般的压缩软件就可以打开的,比如,好压软件,这个打开只是解压形式的,如果你说的是运行iso文件,这个没有,况且安卓系统也不支持iso运行ISO文件一般用于光盘镜像文件的存储,如果想要在手机上运行ISO...

win7系统卡顿怎么优化(win7很慢很卡怎么优化)

1、首先打开安全卫士,进入安全卫士首页,单击软件窗口右下角的“更多”图标,打开扩展应用程序。2、单击选择“我的工具”。3、在我的工具菜单里面找到“人工服务”单击打开人工服务。4、在人工服务对话框有很多...

如何查看c盘微信聊天记录(如何查看c盘微信聊天记录内存大小)

微信群中的消息只要没删除基本都能保存,想要找微信群中几个多月前的消息可以直接根据日期来查找聊天记录。操作如下:1、打开想要查找记录的微信群,点击右上角人形图标;2、点击查找聊天内容;3、选择按日...

office2016家庭版激活密钥(office家庭版激活码2019)

走淘宝吧,因为零售版的密钥只能用一次。大概几块钱就能激活2016。如果你不在乎钱的话可以向我一样,订阅一个office365.实在不行可以和几个人一起买一个家庭版的365.出现这个情况,找微软申诉是没...

移动硬盘驱动器下载安装(移动硬盘驱动器下载安装教程)

1、右键单击您的桌面,选择“新建文件夹”,并命名该文件夹(例如“usb驱动程序”);2、然后到本站下载驱动程序;3、将其解压缩至在您的桌面上刚刚创建的usb驱动程序文件夹;4、单击开始菜单,然后选择设...

电脑硬盘格式化工具(电脑 格式化硬盘)

硬盘格式化工具很多,PQMACGIG8.0(中文就叫硬盘分区魔法师)是比较好的一个,这个是在WINDOWS下比叫好用,(个人感觉)FDISK也是比较好的一个,这个一般用在DOS下分区格式化WIN...

取消回复欢迎 发表评论: