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

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

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

python 复制代码
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 type
            print(ip.hrd)
            # protocol type
            print(ip.pro)
            # Hardware size
            print(ip.hln)
            # Protocol size
            print(ip.pln)
            # Opcode request: 1 是 request, 2 是 reply
            print(ip.op)

            # Sender MAC address
            print(mac_to_str(ip.sha))
            # Sender IP address
            print(inet_to_str(ip.spa))
            # Target MAC address
            print(mac_to_str(ip.tha))
            # Target IP address
            print(inet_to_str(ip.tpa))

        # 说明是 IPV4 协议
        if eth.type == 0x0800:
            ## 4、数据字段(Data )是网络层数据。
            ip = eth.data
            ## 得到 TCP/IP 数据包
            tcp = ip.data

            # Internet Protocol version 4 的解析
            # Version
            print(ip.v)
            # Header length
            print(ip.hl)
            # Differentiated Service Field
            print( ip.df)
            # Total length
            print(ip.len)
            # Identification
            print(ip.id)
            # Time to Live
            print(ip.ttl)
            # Protocol
            print(ip.p)
            # Source address
            print(inet_to_str(ip.src))
            # Destionation address
            print(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.p

            if protocol == 1:
                # ICMP 的解析: Internet control message Protocol
                icmp_data = ip.data
                # 标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文
                icmp_data.type
                # 占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型
                icmp_data.code

            if protocol == 6:
                # Transmission Control Protocol 协议中的数据包
                tcp_data = ip.data

                # Source port
                tcp_data.sport
                # Destionation port
                tcp_data.dport
                # Sequence Number
                tcp_data.seq
                # Acknowledgment Number
                tcp_data.ack
                # Flag
                tcp_data.flags
                # Windows
                tcp_data.win
                # Checksum
                tcp_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/68

            if protocol == 17:

                # User Datagram protocol 协议中的数据包
                udp_data = ip.data

                # Destionation port
                udp_data.dport

                # Source port
                udp_data.sport

                # Length
                udp_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]))
相关推荐
啊阿狸不会拉杆1 天前
《计算机网络-自顶向下方法》2.8 小结、课后习题和 Wireshark 实验 读书笔记
计算机网络·测试工具·wireshark·因特网
PS测1 天前
Linux压力测试工具stress,能精确控制 CPU、内存、IO 负载类型和持续时间
测试工具
qianshi12131 天前
涂层划痕测试仪-精准评估涂层附着力,兼顾科研与工业质量检测
经验分享·测试工具·百度
PhotonixBay2 天前
3D共聚焦显微镜与探针式粗糙度仪:谁更适合亚表面损伤检测?
图像处理·人工智能·测试工具·3d
qianshi12132 天前
电化学腐蚀摩擦磨损试验机的工作原理、操作流程、适用范围行业和产品特点
测试工具·百度
Luminbox紫创测控2 天前
车载AR-HUD阳光倒灌与热效应:太阳光模拟器如何复现太阳辐射?
测试工具·汽车·ar·安全性测试·测试标准
xieliyu.2 天前
计算机网络:Fiddler 抓包工具使用教程 + HTTP 协议报文格式详解
java·笔记·计算机网络·测试工具·http·java-ee·fiddler
weixin_440730502 天前
selenium实战记录-从登陆-首页-进入应用流程用例三种参数化+日志+报告
服务器·selenium·测试工具
啊阿狸不会拉杆2 天前
《计算机网络-自顶向下方法》3.9 小结 · 课后习题 · Wireshark实验
网络·测试工具·wireshark