Python scapy+dpkt抓包并解析

先用scapy抓包

from scapy.all import wrpcap, Ether, IP, UDP
packet = Ether() / IP(dst="1.2.3.4") / UDP(dport=123)
wrpcap('foo.pcap', [packet])

再用dpkt解析

# from: https://blog.csdn.net/javajiawei/article/details/100513267
import sys
import os
import dpkt


def checkIfHTTPRes(data):  # 检查是否为HTTP协议

    if len(data) < 4:
        return False

    if data[:4] == str.encode('HTTP'):
        return True

    return False


def httpPacketParser(http):  # 分析流

    if checkIfHTTPRes(http):  # 检查是否为HTTP协议
        try:
            response = dpkt.http.Response(http)  # 尝试以HTTP读取响应
            print(response.status)

        except Exception as e:
            # print(e)
            pass
    # else:
    #     print("Not HTTP")


def tcpPacketParser(tcp):  # 获取流

    stream = tcp.data
    if len(stream):
        httpPacketParser(stream)  # 尝试以HTTP分析流


def ipPacketParser(ip):  # 获取TCP包
    if isinstance(ip.data, dpkt.tcp.TCP):
        """这里也许可以考虑一下加一条来读UDP包?"""
        tcpPacketParser(ip.data)  # 分析tcp包


def decodePacket(packet):  # 解码获取以太网包
    eth = dpkt.ethernet.Ethernet(packet)
    if isinstance(eth.data, dpkt.ip.IP):
        ipPacketParser(eth.data)  # 分析ip包


def pcapReader(filename):  # 打开.pcap文件
    try:
        with open(filename, 'rb') as f:
            capture = dpkt.pcap.Reader(f)
            i = 1
            for timestamp, packet in capture:  # 键值对,提取packet进行解码
                decodePacket(packet)
                i += 1

    except Exception as e:
        print('parse {}, error:{}'.format(filename, e))


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print('HELP: python {} <PCAP_PATH>'.format(sys.argv[0]))
        sys.exit(0)
        # _EXIT_
    filename = sys.argv[1]

    if filename:
        pcapReader(filename)
posted @   LacLic  阅读(1527)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示