iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python-对Pcap文件进行处理,获
  • 356
分享到

Python-对Pcap文件进行处理,获

文件PythonPcap 2023-01-30 22:01:33 356人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

        通过对tcp/IP协议的学习,本人写了一个可以实现对PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鉴于为了学习,没有采用第三方包解析pcap,而是对bytes流进行解析,其核心思想为:若想要提取TCP

        通过对tcp/IP协议的学习,本人写了一个可以实现对PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鉴于为了学习,没有采用第三方包解析pcap,而是对bytes流进行解析,其核心思想为:若想要提取TCP Content,需在下层的IPV4协议中判断Protocol是否为TCP,然后判断下层的以太网协议的Type是否为IPV4协议(此处的IPV4判断,只针对本人所写项目);对于指定流需要获取Client以及Server的[IP,PORT]。

一、Pcap文件解析

  对于一个Pcap文件,其结构为文件头,数据包头,数据包数据,数据包头,数据包数据……,文件头为24字节,如下:

 

 

  • Magic:4Byte:标记文件开始,并用来识别文件自己和字节顺序
  • Major:2Byte: 当前文件主要的版本号
  • Minor:2Byte: 当前文件次要的版本号
  • ThisZone:4Byte:当地的标准时间,如果用的是GMT则全零,一般都直接写 0000 0000
  • SigFigs:4Byte:时间戳的精度
  • SnapLen:4Byte:最大的存储长度
  • LinkType:4Byte:链路类型

  数据报头为16字节,如下:

  • Timestamp 4Byte:被捕获时间的高位,精度为seconds
  • Timestamp 4Byte:被捕获时间的低位,精度为microseconds
  • Caplen 4Byte:当前数据区的长度,即抓取到的数据帧长度,不包括Packet Header本身的长度,单位是 Byte ,由此可以得到下一个数据帧的位置。
  • Len 4Byte:离线数据长度:网络中实际数据帧的长度,一般不大于caplen,多数情况下和Caplen数值相等。
  Packet Data 
  在数据包头之后,就是数据包的数据了,数据长度就是Caplen个Byte,在此之后是一个新的Packet Header,新的Packet Data,如此循环。 
 
二、以太网协议解析
  以太网协议为14Byte,6Byte Destination,6Byte Source,2Byte Type

 

三、IPV4协议解析
  不同的IP协议各有不同,本项目只选用IPV4下的TCP流
  

 

  • Version 4bit:对于IPv 4,这总是等于4
  • IHL 4bit:数据报协议头长度,表示协议头具有32位字长的数量。该字段的最小值为5,它表示长度为5×32位=160位=20字节。作为一个4位字段,最大值为15字(15×32位,或480位=60字节)
  • DSCP 6bit:差分服务代码点
  • ECN 2bit:显式拥塞通知
  • Total Length 2Byte:这个16位字段定义了整个IP数据包大小(以字节为单位),包括报头和数据,最小大小为20字节(没有数据的头),最大为65535字节。
  • Identification 2Byte:该字段是一个标识字段,主要用于唯一标识单个IP数据报的片段组。
  • Flags 3bit:用于控制或识别片段
  • Fragment Offset 13bit:片段偏移字段以8字节块为单位进行测量。它有13位长,并指定特定片段相对于原始未分段ip数据报开头的偏移量。第一个片段的偏移量为零。这允许最大偏移量(2**13-1)×8=65528字节,这将超过包含报头长度(65528+20=65548字节)的最大IP数据包长度65535字节。
  • Time To Live (TTL) 1Byte:一段8位的存活时间有助于防止数据报在互联网上持久化
  • Protocol 1Byte:此字段定义IP数据报的数据部分中使用的协议
  • Header Checksum 2Byte:16位IPV4头校验和字段用于对标头进行错误检查
  • Source address 4Byte:此字段是数据包发件人的IPV4地址。
  • Destination address 4Byte:该字段是数据包接收方的IPV4地址
  • Options:选项字段不常使用。

四、TCP协议解析

  • Source port (16 bits):标识发送端口
  • Destination port (16 bits):标识接收端口
  • Sequence number (32 bits):序列号,具有双重作用,如果syn被设置成1,标志这是初始序列号,如果syn被设置成0,表示这是初始序列号,如果syn被设置成0,表示这是当前会话的此段的第一个数据字节的累积序列号
  • Acknowledgment number (32 bits):如果设置ACK标志,则此字段的值是ACK发送方期望的下一个序列号
  • Data offset (4 bits):指定以32位为单位的tcp报头的大小。最小标头为5字,最大为15字,从而使其最小为20字节,最大为60字节,允许在标题中设置多达40字节的选项
  • Reserved (3 bits):供将来使用,并应设置为零
  • Flags (9 bits) (aka Control bits):包含9个标志位
    • NS (1 bit): ECN-nonce - 隐藏保护
    • CWR (1 bit): 发送主机设置拥塞窗口减少(Cwr)标志,以表明它收到了设置了ecc标志的tcp段,并在拥塞控制机制中作出了响应
    • ECE (1 bit): ECN-Echo具有双重角色,这取决于SYN标志的值
    • URG (1 bit): 指示紧急指针字段是有效的
    • ACK (1 bit): 指示确认字段是有效的。客户端发送的初始SYN数据包之后的所有数据包都应该设置此标志
    • PSH (1 bit): 推送功能,请求将缓冲数据推送到接收应用程序
    • RST (1 bit):重置连接
    • SYN (1 bit): 同步序列号。只有从每一端发送的第一个数据包应该设置此标志。其他一些标志和字段根据此标志更改含义,有些只有在设置1时才有效,而另一些则在0时才有效
    • FIN (1 bit): 来自发送方的最后一包
  • Window size (16 bits):接收窗口的大小
  • Checksum (16 bits):16位校验和字段用于对报头、有效载荷和伪头进行错误检查
  • Urgent pointer (16 bits):如果设置了URG标志,则此16位字段与表示最后一个紧急数据字节的序列号之间的偏移量
  • Options (Variable 0–320 bits, divisible by 32):该字段的长度由数据偏移字段决定

五、处理文件

  部分核心代码如下:

  此部分是对pcap(bytes)文件读入,将每一个数据包数据作为一帧,判断为IPV4-TCP数据后,将TCP里面的[src, dst,src_port,dst_port, seq, ack, flags, content]一帧帧提取,存储在tcp_stream,此处即为提取pcap文件中所有的TCP流

  此处是对于上面传入的tcp_stream,提取出我们想要指定的Tcpstream,如果flags_ack,flages_push为1时,即有Client或Server进行Http请求,若此包被确认接收,则进行存储(避免重传,丢包的情况),判断flags_fin为1时,结束循环,返回指定的Tcp流。

六、完整代码

  TCP学习:https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure

  IPV4学习:https://en.wikipedia.org/wiki/IPv4#Packet_structure

  完整代码:https://GitHub.com/sunpudding/python,里面不仅有完整项目代码,还有单元测试,欢迎下载,一起学习交流。

  

--结束END--

本文标题: Python-对Pcap文件进行处理,获

本文链接: https://www.lsjlt.com/news/179390.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python-对Pcap文件进行处理,获
            通过对TCP/IP协议的学习,本人写了一个可以实现对PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鉴于为了学习,没有采用第三方包解析pcap,而是对bytes流进行解析,其核心思想为:若想要提取TCP ...
    99+
    2023-01-30
    文件 Python Pcap
  • Python中怎么对文件进行处理
    本篇文章给大家分享的是有关Python中怎么对文件进行处理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。建议一:使用 pathlib 模块如果你需要在 Python 里进行文件...
    99+
    2023-06-15
  • python使用open函数对文件进行处理详解
    目录1.open()1.1 参数11.2 参数21.3 参数32.with open() as3.open函数常用的方法3.1 读3.2 写3.3 获取文件读写类型3.4 指针移动3...
    99+
    2024-04-02
  • Python中怎么批量对文件进行压缩处理
    本篇文章为大家展示了Python中怎么批量对文件进行压缩处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、第一步导入需要的三个库import os as os&nb...
    99+
    2023-06-15
  • Python文件处理该如何进行
    Python文件处理该如何进行,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python 文件处理很简单,使用内置的文件类.打开一个文件#open返回一个文件类 in...
    99+
    2023-06-04
  • 怎么在Python中对邮件进行处理
    今天就跟大家聊聊有关怎么在Python中对邮件进行处理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注...
    99+
    2023-06-14
  • python在怎样进行函数文件处理
    python在怎样进行函数文件处理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。文档处理# f=open('a.txt','r+'...
    99+
    2023-06-04
  • Python进行文件处理的示例详解
    目录1.文件介绍1.1python文件的基本操作1.2.with上下文管理器2.文件的读写模式2.1. r  == read: 只读,不能写2.2. w ==write:只...
    99+
    2023-02-27
    Python文件处理操作 Python文件处理 Python文件
  • python对文件进行读写操作
    先看原理,再动手写程序: python进行文件读写的函数是open或file file_handler = open(filename,,mode) Table mode 模式 描述 r 以读方式打开文件,可读...
    99+
    2023-01-31
    操作 文件 python
  • Python怎么对文件进行加密
    本篇内容介绍了“Python怎么对文件进行加密”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python 中的一个有用的基本加密库就叫做 c...
    99+
    2023-06-17
  • Python对图像进行灰度处理
    目录 1、解释说明: 2、使用示例: 3、注意事项: 1、解释说明: 在Python中,我们可以使用PIL(Python Imaging Library)库中的Image模块对图像进行灰度处理。灰度处理是将彩色图像转换为灰度图像的过程,即...
    99+
    2023-10-12
    python 人工智能 计算机视觉
  • Python进行文件处理的方法是什么
    这篇文章主要介绍“Python进行文件处理的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python进行文件处理的方法是什么”文章能帮助大家解决问题。1.文件介绍python操作文件1....
    99+
    2023-07-05
  • HTML 5中怎么利用FileAPI对文件进行处理
    这期内容当中小编将会给大家带来有关HTML 5中怎么利用FileAPI对文件进行处理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。总览FileAPI是一些列文件处理规范的...
    99+
    2024-04-02
  • python 二进制文件处理
    python 二进制文件处理 采用python处理二进制文件,文件打开方式需要设置成"rb"或"wb",使读写的数据流是二进制。还需要进行二进制数据和普通数据之间的转换。这时会用到python的包struct里的两个函数pac...
    99+
    2023-01-31
    二进制文件 python
  • python中如何对文件进行操作
    这篇文章主要介绍python中如何对文件进行操作,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一.文件基本操作1.1 文件打开和关闭open(‘文件名称','打开模式')模式:r(只读,指针再...
    99+
    2023-06-15
  • Python如何对文件进行重命名
    目录对文件进行重命名对文件夹下文件按顺序重命名先使用最简单的方法尝试一下我们就可以看到文件夹已经按照顺序重命名了接下来我们对文件进行重命名先建一个文本文档对文件进行重命名 直接贴代码...
    99+
    2024-04-02
  • Python中怎么对文件进行操作
    Python中怎么对文件进行操作,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。编码方式编码方式的历史大致为ASCII ->gb2312->unicode->u...
    99+
    2023-06-16
  • Pycharm如何对python文件进行打包
    目录windows使用Pycharm 对python文件进行打包总结windows使用Pycharm 对python文件进行打包 首先建立python项目的时候要按照标准来建设 我使...
    99+
    2023-02-18
    Pycharm打包 python文件打包 python文件进行打包
  • Python怎么对文件进行重命名
    这篇文章主要介绍“Python怎么对文件进行重命名”,在日常操作中,相信很多人在Python怎么对文件进行重命名问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么对文件进行重命名”的疑惑有所帮助!...
    99+
    2023-07-02
  • 使用Python怎么对Excel进行处理
    本篇文章为大家展示了使用Python怎么对Excel进行处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本...
    99+
    2023-06-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作