pcap文件头

用python代码表达结构如下,I是32位无符号数,下面的定义均采用32位方式# bpf_u_int32 magic; 固定为0xA1B2C3D4,表示pcap包文件

# u_short version_major; 主版本号

# u_short version_minor; 分支版本号

# bpf_int32 thiszone; 时区

# bpf_u_int32 sigfigs;

# bpf_u_int32 snaplen; 每个包的最大长度

# bpf_u_int32 linktype; 链路层协议族

self.struct_pcap_file_header = '!I2H4I'

pcap每个包的头# struct timeval ts;

# bpf_u_int32 caplen;

# bpf_u_int32 len;

self.struct_pcap_pkthdr = '!4I'timeval是c的时间戳结构体,前面一个整型数是秒数偏置,后面一个整型数是微秒偏置,详情可以查阅相关文档

生成pcap文件

使用python简单生成,写入到test.pcap文件,写入了两个包到该文件,linktype设置为162,在wireshark源码中表示保留给用户的USER15 类型# -*-coding:utf-8-*-

"""

Author:yinshunyao

Date:2017/3/24 0024上午 10:47

"""

import unittest

import struct

class PacpTest(unittest.TestCase):

def setUp(self):

# pcap文件头格式

# http://www.winpcap.org/docs/docs_412/html/structpcap__file__header.html

# bpf_u_int32 magic; 固定为0xA1B2C3D4,表示pcap包文件

# u_short version_major; 主版本号

# u_short version_minor; 分支版本号

# bpf_int32 thiszone; 时区

# bpf_u_int32 sigfigs;

# bpf_u_int32 snaplen; 每个包的最大长度

# bpf_u_int32 linktype; 链路层协议族

self.struct_pcap_file_header = '!I2H4I'

# pcap包头格式

# http://www.winpcap.org/docs/docs_412/html/structpcap__pkthdr.html

# struct timeval ts;

# bpf_u_int32 caplen;

# bpf_u_int32 len;

self.struct_pcap_pkthdr = '!4I'

# 文件头

self.file_header = struct.pack(

self.struct_pcap_file_header,

0xA1B2C3D4, 4, 1, 0, 0, 0xFFFF, 162 # USER15

)

def test_generate_pcap(self):

# 消息体内容

pkg_content1 = struct.pack('!2I', 100, 101)

pkg_content2 = struct.pack('!2I', 101, 100)

#

pkg_header = struct.pack(

self.struct_pcap_pkthdr, 0x4A5B1784, 0x00081C6D,

len(pkg_content1), len(pkg_content1)

)

with open('test.pcap', 'wb') as test:

test.write(self.file_header+pkg_header+pkg_content1+pkg_header+pkg_content2)

wireshark解析效果

用自定义的wireshark插件协议解析整体效果如下,后面具体介绍插件内容,可以看到Encapsulation type字段值是60,协议是USER15

这个值跟前面文件头里面的link162的映射关系,在wireshark中完成,具体处理可以查看wireshark的C源码。

协议名称和消息体解析,需要捕获这个数据流在自定义的协议插件中处理,下一章会提到。

两个包的时间戳一样,是因为前面写入文件的包头是一样的。

wireshark lu解析脚本

local serial_encap_table = DissectorTable.get("wtap_encap")

--截取所有的bsap协议

--USER0~USER15是45到60,可以自定义解析,参见源码wtap.h

serial_encap_table:add(60, p_bsap)

上面两行代码,截取type为60的文件和包进行解析。p_bsap是自定义的解析插件,详细的使用方法和语言基础参见wireshark的官方文档lu部分

do

--协议名称是BSAP, 在Packet Details窗格显示为

local p_bsap = Proto("bsap2","Bristol Standard Asynchronous Protocol")

--头协议各个字段含义,需要放到此处注册

local f_src = ProtoField.uint32("bsap2.src","Source", base.DEC)

local f_des = ProtoField.uint32("bsap2.des","Destination", base.DEC)

p_bsap.fields = {f_src, f_des}

--指纹信息协议

local p_finger = Proto("BSAP_FR", "BSAP Device Information")

--获取数据

local data = Dissector.get("data")

local device = {}

local offset = 0

--数据分析函数

local function bsap_dissector(buf,pkg,root)

local buf_len = buf:len()

-- 协议信息展示a

pkg.cols.protocol = "BSAP2"

--添加头

local header = root:add(p_bsap, buf)

header:add(f_src, buf(0,4))

header:add(f_des, buf(4,4))

device = {['Source']=buf(0,4):uint()}

pkg.cols.info = "Message: src is "..tostring(device['Source'])

offset = buf_len

return true

end

--解析函数,注意,该function前面不能添加local

function p_bsap.dissector(buf,pkg,root)

--如果解析符合本协议

if bsap_dissector(buf,pkg,root) then

--有效的协议,未处理完的字段调用其他协议继续解析

local buf_len = buf:len()

if offset + 1 < buf_len then

data:call(buf(offset, buf_len-offset), pkg, root)

end

--如果解析不符合本协议,返回给主程序继续遍历其他协议

else

data:call(buf,pkg,root)

end

end

local serial_encap_table = DissectorTable.get("wtap_encap")

--截取所有的bsap协议

--USER0~USER15是45到60,可以自定义解析,参见源码wtap.h

serial_encap_table:add(60, p_bsap)

end

wireshark读写pcap文件_pcap文件格式和wireshark解析相关推荐

  1. wireshark读写pcap文件_PCAP-file-analysis 利用wireshark捕获tcp ip数据包和pcap文件分析 - 下载 - 搜珍网...

    reademe.txt 实验报告-终版.doc 实验数据/ 实验数据/arp.pcap 实验数据/DHCP.pcap 实验数据/Diagram1.dia 实验数据/Diagram1.png 实验数据/ ...

  2. 使用WinPcap和libpcap类库读写pcap文件(001)开发环境配置

    最近的项目要求写一个读写pcap文件的小程序,用来修改pcap中的部分信息,实现pcap的定制. 所以必须学会使用wireshark并能有利用WinPcap库和libpcap库进行开发. 虽然本文记录 ...

  3. 使用WinPcap和libpcap类库读写pcap文件(002)PCAP文件格式

    本文基本翻译自https://wiki.wireshark.org/Development/LibpcapFileFormat,主要分析pcap文件的格式. 其中一些字段可能和现在的WinPcap类库 ...

  4. pcap文件生成metadata——使用tshark解析tcpdump的pcap包

    pcap文件生成metadata #!/usr/bin/env python # -*- coding: utf-8 -*-import os import time, datetime import ...

  5. wirshark抓包产生的pcap文件分析

    pcap:过程特性分析软件包 首先pcap文件是用来存储数据的,只不过具有其特定的存储格式.而pcap文件来源于监控软件使用libpcap(类Unix)或WinPcap(Windows)捕获通过网络传 ...

  6. 【wireshark、MISC】将pcapng文件转为pcap文件,再用NetworkMiner分析流量包

    有的时候,我们在wireshark分析流量包,一直找,都找不到有用的信息,看又看不太懂,那么NetworkMiner就是一个很好的选择. 我们在NetworkMiner里面可以很清晰地看出啥给谁发送了 ...

  7. 利用WireShark将pcap数据流还原文件

    利用WireShark将pcap数据流还原文件 使用工具: WireShark WinHex 1.打开pcap文件 2. 对数据流进行筛选 利用ctrl+f打开或Edit/编辑查找分组 选择分组字节流 ...

  8. 利用WireShark将pcap数据流还原图片文件

    使用工具: WireShark WinHex 1.打开pcap文件 2. 对数据流进行筛选 利用ctrl+f打开或Edit/编辑查找分组 选择分组字节流.字符串,筛选框输入"jpg" ...

  9. 如何提取pcap文件中的TCP流

    PCAP文件是一种网络数据包捕获文件格式,它可以记录计算机在网络上发送和接收的数据包.要从PCAP文件中提取TCP流,可以使用网络流量分析工具,如Wireshark或tcpdump. 以下是使用Wir ...

  10. C语言解析pcap文件得到HTTP信息实例(原创,附源码)

    原文:http://xiexiaohui.com.host2.ugocn.com/index.php/archives/34 转载请注明出处.来自 hello xiexh (xiexiaohui092 ...

最新文章

  1. C++输入输出进制、数据宽度与对齐、精度、取整
  2. 解决VS2017使用scanf报错问题
  3. iptables规则书写总结
  4. 接口测试 Seldom 2.0 - 让接口自动化测试更简单
  5. batch批处理(转载)
  6. Wonderware- Intouch 利用 Excel 控件制作报表,功能强大
  7. 3D点云数据标注工具推荐
  8. css3 - 图标元素动画效果1 - 只执行一次动画
  9. python爬虫国家企业信息网_国家企业信用信息公示系统爬虫
  10. html 转 pug 在线,pug - HTML模板引擎安装器
  11. vue 项目内vue指令常用
  12. 你可能不信:我爸在家里泡姜的图,能气死五个博士生...
  13. 阴阳师手游服务器维护,《阴阳师》手游3月20日维护更新公告
  14. 逻辑回归:逻辑回归中的参数
  15. celery英语_蔬菜介绍:芹菜 Celery
  16. mysql主从同步检测
  17. 关于机箱按键一键销毁或关机机箱内的多块VPX计算板卡的注意事项
  18. win10系统托盘图标不见了_win10 右下角任务托盘图标全部不见了,怎么办?
  19. 数学连续和导数的定义
  20. 【考研词汇训练营】Day 4 —— disproportionately,appeal,middle,occupation,fine,advise

热门文章

  1. 51单片机——定时器
  2. mysql字典_mysql常用字典表(完整版)
  3. 深度学习与计算机视觉教程(5) | 卷积神经网络(CV通关指南·完结)
  4. biopython中文指南_Biopython学习笔记
  5. UCI数据库Heart Disease数据集下载
  6. pip的安装,卸载和换源
  7. wget 的安装与使用(Windows)
  8. Vue 自定义项目的创建以及配置
  9. 《五分钟商学院》个人篇学习总结(上)
  10. maya导入abc动画_如此导出ABC缓存,扩展秘籍(二)!!!