理想下载站 手游攻略 新游动态 Python网络抓包工具开发:Scapy实践指南

Python网络抓包工具开发:Scapy实践指南

时间:2025 12 11 20:54:10 来源: 浏览:60

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

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

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

>>>reader = PcapReader(fd)

>>>reader

>>>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

>>>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

>>>

>>>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:工业系统的利用框架。

用户评论

冷青裳

终于找到了学习网络安全的利器!之前总是看别人的抓包神器,现在有了 Scapy 可以自己写了,太激动了!想要了解一下 Scapy 的数据结构和协议解析过程,有推荐的教程吗?

    有11位网友表示赞同!

莫飞霜

Python 写网络工具真的方便啊!Scapy 虽然功能强大,上手却比 ThinkPHP 简单得多。最近在学习网络安全,打算用它来练习一些基本的网络攻击防御技术。

    有14位网友表示赞同!

你瞒我瞒

这篇文章写的很详细,对 Scapy 的基本语法和常用方法我都有一个大概了解了。我以前用其他工具抓包都感觉不够灵活,期待可以用 Python 编程定制属于自己的抓包神器!

    有8位网友表示赞同!

颜洛殇

Python 好强大啊!我一直想学习一下网络安全相关的知识,现在可以用 Scapy 轻松地编写抓包工具,可以尝试一些更深入的攻击防御实践。不过这种方法是不是有技术门槛?需要一定的Python基础才能入门吗?

    有20位网友表示赞同!

旧事酒浓

文章说的很对,用 Python 写网络脚本确实方便快捷,比那些图形界面工具灵活得多。Scapy 支持众多协议类型,我可以根据自己的需求定制抓包规则,这功能太棒了!

    有6位网友表示赞同!

陌上花

我一直在寻找一个轻便灵活的网络抓包工具,正好看到这个文章介绍了 Scapy。不过作为一个 Python 初学者,感觉这个工具的学习曲线有点陡峭啊!希望有更多入门级别的教程或者。。教学。

    有6位网友表示赞同!

不离我

网上关于 Scapy 的资源少得可怜,这篇文章才算是第一次系统地了解它的功能和应用场景。 现在网络安全越来越重要,学习这种编程工具很有意义,有机会试试自己动手写个抓包脚本。

    有11位网友表示赞同!

来瓶年的冰泉

文章写的太棒了!我之前用其他的抓包工具总觉得不够灵活,可以定制功能,可扩展性很差。Scapy 的特点让我深深感受到了 Python 的强大之处。 希望能更详细地介绍一下特定协议的构建和解析方法。

    有15位网友表示赞同!

疲倦了

Scapy 看起来不错,但是我不太懂怎么用它来分析网络流量。我需要一个清晰的教程来帮助我理解如何使用 Scapy 来实现具体的抓包场景,以及如何解剖抓取到的数据包。

    有6位网友表示赞同!

←极§速

Python 写网关?感觉还是得交给专业的工具吧,学习这方面的知识太难了,我现在只想用 Wireshark 抓包就够了。

    有20位网友表示赞同!

灼痛

这个 Python 工具能帮你写网络脚本吗? 如果是这样的话,那也太方便了吧!我最近一直在尝试搭建一个简单的网络安全测试平台,如果能够利用 Scapy 来编写抓包工具的话,就能更有效地监测网络流量了。

    有5位网友表示赞同!

清原

我对Python不太了解,这篇文章让我感觉像是用另一种语言在讲话。希望有更多关于 Scapy 的入门教程和实例代码讲解,让初学者更容易理解和上手。

    有19位网友表示赞同!

我家的爱豆是怪比i

我听说 Python 可以做到很多事情,我现在就想知道 Python 能帮我干些什么! 如果真的可以用Python写抓包工具,那真是太棒了!我要赶紧去学习一下Python,这样才能在网络安全这条道路上有所发展。

    有9位网友表示赞同!

青墨断笺み

文章介绍的 Scapy 功能很强大,我能想象它在网络安全领域的应用潜力。希望更多的人了解这种强大的工具,并利用它来提高网络安全水平。

    有9位网友表示赞同!

盲从于你

这个文章介绍了学习如何用 Python 写自己的网络抓包工具,我之前一直想要尝试这个但是还没有机会。现在看到了这个教程,感觉可以去实践一下,看看自己能不能写出一个实用的抓包工具

    有15位网友表示赞同!

红尘烟雨

我一直想了解一下网络安全的工作原理,现在有了个好方法了!我可以学习这个文章中介绍的 Scapy ,用 Python 写一个简单的抓包工具来分析网络流量。这样不仅可以学习新知识,还能实践操作,更能加深理解。

    有12位网友表示赞同!

有你,很幸福

Scapy 的名字听起来很有意思,不过感觉太专业了。我还是比较喜欢使用传统的抓包工具,比如 Wireshark 。

    有14位网友表示赞同!

标题:Python网络抓包工具开发:Scapy实践指南
链接:https://www.ltthb.com/news/xydt/125369.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
三角洲行动11月19日密码是什么

三角洲行动每个地图里的密码门每天都会按时更新密码。你要收集各种线索串联起来再去密码门输入正确的密码才

2025-11-19
心动小镇11月19日溜溜橡木和无暇荧石采集位置在哪

心动小镇溜溜橡木和无暇荧石可是每日必采的稀有资源,不过要是想收集它们的话,得先完成【寻找星灵】主线任务解

2025-11-19
星际战甲伤害值查看方法攻略-伤害值在哪看

星际战甲里打出伤害后有很多小伙伴都还找不到查看具体数值的地方,不过毕竟要了解自己的输出数据,才能更好规划

2025-11-19
荒原曙光战宠图文详情介绍

荒原曙光一份实力实用又强力的战宠名单给大家,输出辅助等等系别的战宠全都有,轻轻松松帮你根据不同的战斗场景

2025-11-19
[!--temp. The end of the content page--]