python解析wirshark抓包数据

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

1.tcp分析

python 复制代码
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)

2.udp分析

python 复制代码
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)

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

python 复制代码
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)
相关推荐
大翻哥哥2 小时前
轻量级PHP网页在线客服系统 隐私聊天—— 可定制
开发语言·php
微学AI2 小时前
内网穿透的应用-服务器日志出现异常怎么办?Python监控、钉钉告警与远程处理教程
服务器·python·钉钉
Wang's Blog8 小时前
Go-Zero 项目开发43:基于 Filebeat 收集各个服务的日志信息
开发语言·golang·go-zero·filebeat
丈剑走天涯9 小时前
JDK 17 正式特性
java·开发语言
秋田君9 小时前
QT_QFontDialog类字体对话框
开发语言·qt
圣光SG9 小时前
Java操作题练习(七)
java·开发语言·算法
_Jimmy_10 小时前
Agent 溯源精度提升方案
人工智能·python·langchain
麻瓜老宋11 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十三步,多行输入、进制输出、错误恢复、常量折叠、配置加载等
c语言·开发语言·atomcode
q5673152311 小时前
企业级 HTTP 代理采购选型:技术评估清单 15 项
开发语言·网络·爬虫·网络协议·http·隧道ip·代理ip
SamChan9012 小时前
在Web应用中集成PDF多语言翻译功能:PDFTranslator API实战指南
前端·python·ai·pdf·yapi·机器翻译