• python解析wirshark抓包数据


    因为工作需要,需要分析wirshark的抓包数据。数据有的是在比特位中。不方便查找。而lua语言又不愿意去学,所以用python解析后,输出日志。帮助分析.
    
    • 1

    1.tcp分析

    from dpkt.tcp import TCP
    from scapy.all import *
    from datetime import datetime, timedelta
    import pytz
    import datetime
    from datetime import datetime
    
    
    def main(file_path,tcp_ip,tcp_port):
        pkts = rdpcap(file_path)
        for pkt in pkts:
            if IP in pkt and TCP in pkt:
                if pkt[IP].dst == tcp_ip and pkt[TCP].dport == tcp_port:
                # if pkt[IP].dst == "225.0.0.10" and pkt[TCP].dport == 12306 and len(pkt) == 25:
                    if len(pkt.load) == 18:
                        print("*" * 50)
                        print("Time: ", datetime.fromtimestamp(pkt.time), "Second byte: ", pkt[Raw].load[2])
    
    
    main('E:\\abs\\shak\\1.pcapng', "225.0.0.10", 12306)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    2.udp分析

    from dpkt.ip import IP
    from dpkt.udp import UDP
    from scapy.all import *
    import datetime
    from datetime import datetime
    
    
    def main(file_path,udp_ip,udp_port):
        pkts = rdpcap(file_path)
        for pkt in pkts:
            if IP in pkt and UDP in pkt:
                if pkt[IP].dst == udp_ip and pkt[UDP].dport == udp_port:
                    if len(pkt.load) == 18:
                        print("*"*50)
                        print("Time: ", datetime.fromtimestamp(pkt.time),"Second byte: ", pkt[Raw].load[2])
                    if pkt[Raw].load[9] == 0x0a:
                            print("*" * 50)
                            # 打印完整的全部数据
                            #print("Time: ", datetime.fromtimestamp(pkt.time),pkt.show())
                            #只打印对应的数据包
                            print("Time: ", datetime.fromtimestamp(pkt.time),pkt.load)
    main('E:\\abs\\shak\\1.pcapng',"225.0.0.10",12306)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    3.根据比特位取值,保存

    from dpkt.ip import IP
    from dpkt.udp import UDP
    from scapy.all import *
    import datetime
    from datetime import datetime
    
    def main(file_path,udp_ip,udp_port):
        pkts = rdpcap(file_path)
    
        with open("E:\\abs\\shak\\output.txt", "w") as f:
            for pkt in pkts:
                # 过滤ip
                if IP in pkt and UDP in pkt and pkt[IP].dst == udp_ip and pkt[UDP].dport == udp_port:
                    # 过滤长度
                    if len(pkt.load) == 18:
                        #过滤功能码,同时可以计算某个字节的比特位
                        if pkt[Raw].load[9] == 0x0a:
                            bit_one = (pkt[Raw].load[10] >> 1) & 0x01
                            bit_two = (pkt[Raw].load[10] >> 2) & 0x01
                            bit_three = (pkt[Raw].load[10] >> 3) & 0x01
                            bit_four = (pkt[Raw].load[10] >> 4) & 0x01
                            bit_five = (pkt[Raw].load[10] >> 5) & 0x01
                            bit_six = (pkt[Raw].load[10] >> 6) & 0x01
                            bit_seven = (pkt[Raw].load[10] >> 7) & 0x01
    
                            data = "Time:" + "\t" + str(datetime.fromtimestamp(pkt.time)) + "\t" + "data:" + str(bit_one)\
                                   +" "+str(bit_two)+" "+str(bit_three)+" "+str(bit_four)+" "+str(bit_five)+" "+str(bit_six)\
                                   +" "+str(bit_seven)+ "\n"
                            f.write(data)
                            #print("Time: ", datetime.fromtimestamp(pkt.time),pkt.show())
                            print("Time: ", datetime.fromtimestamp(pkt.time),pkt.load)
                            data1 = "Time:"+"\t" +str(datetime.fromtimestamp(pkt.time))+"\t"+"data:"+str(pkt.load)+"\n"
                            f.write(data1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
  • 相关阅读:
    AutoCAD Electrical 2022—项目中新建、添加、删除图纸
    AutoDL使用教程:1)创建实例 2)配置环境+上传数据 3)PyCharm2021.3专业版远程连接
    Vue 全组件 局部组件
    信息的浏览
    STM32-按键检测
    为什么说EBC是提升企业“数治”水平的最优解
    MySQL中的高级查询
    Chrome调试工具和Emmet语法
    硬件驱动为什么要有WHQL数字签名
    开源欧拉 openEuler 23.09 创新版本发布
  • 原文地址:https://blog.csdn.net/qq_44913716/article/details/134379943