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

对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.xdnf.cn/news/634753.html

相关文章:

  • win11 禁用/恢复 内置笔记本键盘(保证管用)
  • 嵌入式软件--DAY8 IIC通讯下 硬件实现
  • 解决WPF短暂的白色闪烁(白色闪屏)
  • 从智能提效到产品赋能的架构实践
  • Pycharm and Flask 的学习心得(9)
  • PCB 通孔是电容性的,但不一定是电容器
  • CSS相关知识
  • 基于PyTorch的残差网络图像分类实现指南
  • 如何理解Pytorch中前向传播的计算过程
  • 小土堆pytorch--神经网络搭建小实战Sequential的使用
  • 高可用 Redis 服务架构分析与搭建
  • 【C/C++】从零开始掌握Kafka
  • P2676 [USACO07DEC] Bookshelf B
  • 电商小程序店铺详情页:头部无限分类与筛选功能实现
  • LabVIEW实战项目推荐与学习建议
  • 打卡第28天:装饰器
  • 【HarmonyOS5】DevEco Studio 预览器与模拟工具详解
  • 掌握聚合函数:COUNT,MAX,MIN,SUM,AVG,GROUP BY和HAVING子句的用法,Where和HAVING的区别
  • TIGER - 一个轻量高效的语音分离模型,支持人声伴奏分离、音频说话人分离等 支持50系显卡 本地一键整合包下载
  • 【Android】非System用户下Persist应用不自动拉起
  • 破解C/C++内存分配与管理:内存对象模型硬核剖析
  • LeetCode-图论-岛屿数量+腐烂的橘子
  • Leetcode 3103. 查找热门话题标签 II
  • 仓鼠找sugar--lca+图论判断点在路径
  • LangChain02-Agent与Memory模块
  • git子模块--命令--列表版
  • 机器学习——支持向量机SVM
  • 类欧几里得算法(floor_sum)
  • uni-app学习笔记十四-vue3中emit的使用
  • Lua 脚本在 Redis 中的运用-23(Lua 脚本语法教程)