当前位置: 首页 > article >正文

对WireShark 中的UDP抓包数据进行解析

对WireShark 中的UDP抓包数据进行解析

本文尝试对 WireShark 中抓包的 UDP 数据进行解析。 但是在尝试对 TCP 中的 FTP 数据进行解析的时候,发现除了从端口号进行区分之外, 没有什么好的方式来进行处理。


import numpy as np
import matplotlib.pyplot as plt
from IPython import embed
from collections import Counter
import  pyshark
import pcapng
from datetime import datetime
import dpkt
import socket
from dpkt.utils import mac_to_str, inet_to_str# https://zhuanlan.zhihu.com/p/582336672
# https://blog.csdn.net/simonchi/article/details/105682118#打开抓包文件cnt =  2
old_timestamp = 0
file_path = "./host_pc.pcapng"time_list_pc_to_control = []
time_list_control_to_pc = []
data_list = []joint_cmd = []
joint_fd = []
with open(file_path,"rb") as fp:pcapng_data = dpkt.pcapng.Reader(fp)for timestamp, buf  in pcapng_data:eth = dpkt.ethernet.Ethernet(buf)cnt += 1## Ethernet_II 帧格式# ## 1、目标 Mac 地址# eth.dst# ## 2、源 Mac 地址# eth.src## 3、得到Ethernet II 数据帧的类型。类型字段(Type )用于标识数据字段中包含的高层协议。类型字段取值为0x0800的帧代表IP协议帧;类型字段取值为0x0806的帧代表ARP协议帧。## 0x0800: IP IP协议## IPv4:     0x0800## ARP:      0x0806## RARP:     0x0835## IPV6:     0x86DD## EtherCAT: 0x88A4# print(hex(eth.type))# 说明是ARP协议: “Address Resolution Protocol”(地址解析协议)if eth.type == 0x0806:ip = eth.data# Hardware typeprint(ip.hrd)# protocol typeprint(ip.pro)# Hardware sizeprint(ip.hln)# Protocol sizeprint(ip.pln)# Opcode request: 1 是 request, 2 是 replyprint(ip.op)# Sender MAC addressprint(mac_to_str(ip.sha))# Sender IP addressprint(inet_to_str(ip.spa))# Target MAC addressprint(mac_to_str(ip.tha))# Target IP addressprint(inet_to_str(ip.tpa))# 说明是 IPV4 协议if eth.type == 0x0800:## 4、数据字段(Data )是网络层数据。ip = eth.data## 得到 TCP/IP 数据包tcp = ip.data# Internet Protocol version 4 的解析# Versionprint(ip.v)# Header lengthprint(ip.hl)# Differentiated Service Fieldprint( ip.df)# Total lengthprint(ip.len)# Identificationprint(ip.id)# Time to Liveprint(ip.ttl)# Protocolprint(ip.p)# Source addressprint(inet_to_str(ip.src))# Destionation addressprint(inet_to_str(ip.dst))# print(type(ip))# src = socket.inet_ntoa(ip.src)# dst = socket.inet_ntoa(ip.dst)# sport = tcp.sport# dport = tcp.dport# print(f'Source IP: {ip.src}')# print(f'Destination IP: {ip.dst}')# print(f'Source Port: {tcp.sport}')# print(f'Destination Port: {tcp.dport}')# print("[+] 源地址: {}:{} --> 目标地址:{}:{}".format(src,sport,dst,dport))# print('IP: %s -> %s   (len=%d ttl=%d DF=%d MF=%d offset=%d)\n' %#         (inet_to_str(ip.src), inet_to_str(ip.dst), ip.len, ip.ttl, ip.df, ip.mf, ip.offset))# 当编号为 1 时,表示上层用的是 ICMP 协议–传输层的协议# 当编号为 6 时,表示上层用的是 TCP 协议–传输层的协议# 当编号为 17 时,表示上层用的是 UDP 协议–传输层的协议# if(type(ip) == dpkt.ip.IP):protocol = ip.pif protocol == 1:# ICMP 的解析: Internet control message Protocolicmp_data = ip.data# 标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文icmp_data.type# 占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型icmp_data.codeif protocol == 6:# Transmission Control Protocol 协议中的数据包tcp_data = ip.data# Source porttcp_data.sport# Destionation porttcp_data.dport# Sequence Numbertcp_data.seq# Acknowledgment Numbertcp_data.ack# Flagtcp_data.flags# Windowstcp_data.win# Checksumtcp_data.sum=49681# 用户下发的 TCP 协议内容tcp_data_data = tcp_data.data# 判断是否是 FTP协议,一个是看端口是否是21# ftp:21、20# ssh :22 # telnet:23# HTTP: 80# HTTPS: 443# TFTP: 69# DNS: 53# SNMP: 161# DHCP: 67/68if protocol == 17:# User Datagram protocol 协议中的数据包udp_data = ip.data# Destionation portudp_data.dport# Source portudp_data.sport# Lengthudp_data.ulen# 用户下发的UDP协议内容udp_data_data = udp_data.data# 用户下发数据的长度len(udp_data_data)# 解析在 UDP 中的数据if((protocol == 17) and (ip.dst == b'\xc0\xa8\nx') and (tcp.dport == 2095) ):a = str(ip.data.data)b = a.split(",")# 得到对应的时间戳time_list_pc_to_control.append(timestamp)data_list.append(float(b[1]))
http://www.lryc.cn/news/2386302.html

相关文章:

  • Flannel后端为UDP模式下,分析数据包的发送方式(二)
  • 从 0 到 1:Spring Boot 与 Spring AI 深度实战(基于深度求索 DeepSeek)
  • upload-labs通关笔记-第20关 文件上传之杠点绕过
  • Vscode +Keil Assistant编译报错处理
  • 记录python在excel中添加一列新的列
  • WebRTC:实时通信的未来之路
  • 探索产品经理的MVP:从概念到实践
  • 用python实现中国象棋
  • GO 语言基础3 struct 结构体
  • VSCode C/C++ 开发环境完整配置及一些扩展用途(自用)update:2025/3/31
  • iOS 上线前的性能与稳定性检查流程实录:开发者的“最后一公里”(含 KeyMob 应用经验)
  • Docker系列(二):开机自启动与基础配置、镜像加速器优化与疑难排查指南
  • a16z:AI带来了全新的9种开发软件的模式
  • 20.迭代器模式:思考与解读
  • Java 学习笔记:注解、泛型与 IO 流
  • 在 Excel 使用macro————仙盟创梦IDE
  • 【MySQL】08.视图
  • 鸿蒙devEco studio如何创建模拟器
  • 鸿蒙路由参数传递
  • springboot 控制层调用业务逻辑层,注入报错,无法自动装配 解决办法
  • MySQL:11_事务
  • Linux中的文件系统和软硬连接
  • 并发容器(Collections)
  • SPA模式下的es6如何加快宿主页的显示速度
  • windows powershell 判断 进程号是否存在
  • c# 解码 encodeURIComponent
  • Spring AI:Java开发者的AI开发新利器
  • Android System UI 深度解析:从架构演进到车载 / TV 场景的全维度定制
  • Spring Cloud Sleuth与Zipkin深度整合指南:微服务链路追踪实战
  • React从基础入门到高级实战:React 基础入门 - 列表渲染与条件渲染