Python实现Windows环境下的网络抓包与数据包解析

半杯拿铁
半杯拿铁
发布时间:2026-10-13| 2人浏览过
原创

本文介绍在Windows 7环境下,利用Python 2.7及Scapy、Dpkt库实现网络数据包的捕获与解析。通过两行核心代码完成抓包,并详细展示如何解析TCP/IP协议栈中的IP、TCP及HTTP层信息,包括TTL值等关键参数分析,为网络流量监控提供基础方案。

系统环境设定为Windows 7,选择该操作系统的原因在于希望监控个人日常使用计算机时的网络流量情况。

Python环境选用版本2.7,未选择Python 3的主要原因是Scapy包在Python 3中的安装过程相对繁琐。若用户习惯使用Python 3,数据包的分析工作完全可以在Python 3环境下进行,因为抓包操作与数据分析属于两个独立的流程。

所需安装的Python依赖库包括scapy和dpkt。

抓包实现代码:

from scapy.sendrecv import sniff
from scapy.utils import wrpcap
dpkt = sniff(count = 100)  #这里是针对单网卡的机子,多网卡的可以在参数中指定网卡
wrpcap("demo.pcap", dpkt)

实现基础抓包功能仅需两行代码。其中,sniff函数用于嗅探网络数据包,而wrpcap函数负责将捕获到的数据包保存至文件。

接下来对捕获的数据包进行分析:

import dpkt
import socket
import datetime
def printPcap(pcap):
try:
for timestamp, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf) #获得以太包,即数据链路层包
print("ip layer:"+eth.data.__class__.__name__) #以太包的数据既是网络层包
print("tcp layer:"+eth.data.data.__class__.__name__) #网络层包的数据既是传输层包
print("http layer:" + eth.data.data.data.__class__.__name__) #传输层包的数据既是应用层包
print('Timestamp: ',str(datetime.datetime.utcfromtimestamp(timestamp))) #打印出包的抓取时间
if not isinstance(eth.data, dpkt.ip.IP):
print('Non IP Packet type not supported %s' % eth.data.__class__.__name__)
continue
ip = eth.data
do_not_fragment =bool(ip.off & dpkt.ip.IP_DF)
more_fragments =bool(ip.off & dpkt.ip.IP_MF)
fragment_offset = ip.off & dpkt.ip.IP_OFFMASK
print('IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)' % (socket.inet_ntoa(ip.src), socket.inet_ntoa(ip.dst), ip.len, ip.ttl, do_not_fragment, more_fragments,fragment_offset))
except:
pass
def main():
f =open('demo.pcap','rb')
pcap = dpkt.pcap.Reader(f)
printPcap(pcap)
if __name__ =='__main__':
main()

运行结果展示如下:

上述数据为开启360路由器卫士时捕获的网络包。该软件在启动时会与路由器通信,以获取连接至路由器的电脑和手机列表。示例中,192.168.1.100为本机IP地址,192.168.1.1为路由器地址。从数据中可见,Windows系统发送的数据包默认TTL值为128,而其他系统的默认TTL值为64,这与理论常识相符。

关于TCP/IP五层分层结构及封包过程,参考附图两张:

总结

以上内容介绍了使用Python在Windows环境下进行抓包与解析的方法,希望能对读者有所帮助。如有任何疑问,欢迎留言,小编会及时回复。同时感谢大家对本站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。