• python解析pcap报文_scapy解析pcap文件


    scapy TLS/SSL 流量数据操作_UNOmoist的博客-CSDN博客_scapy tls

    Python3.6下无法使用稳定的scapy-ssl_tls,目前仅限于Python2。所以安装scapy-ssl_tls不稳定,趁早放弃。

    1.ubuntu20换源,卸载python3:

    apt remove python3

    安装python2

    apt install python2

    2.Ubuntu20 安装 python2 的 pip

    Ubuntu下python2的pip安装_CHH3213的博客-CSDN博客_ubuntu安装pip2

    wget https://bootstrap.pypa.io/pip/2.7/get-pip.py

    sudo python2 get-pip.py
    pip2 --version
     3.安装scapy:apt install python-scapy

    安装scapy-ssl_tls这个库,优先选择pip的安装方式:

    pip install scapy-ssl_tls

    介绍如何使用 Python scapy 从pcap数据包中提取TLS/SSL数据包的基本信息,例如SNI等。

    scapy 能够从pcap包中提取出数据包对象,可以直接通过pkt.show()输出显示数据包内容。

    from scapy.all import *

    infliestr = "outpkts.pcapng"

    pkts = rdpcap(infliestr)           # 打开pcap文件,读取数据包内容
    nums=29                            # 该pcap包中,下标为29的数据包为tls client hello 
    pkts[nums].show() 

    从图中可以看出,只能显示eth,ip以及tcp层信息,不能看到tls信息。本文旨在查看tls信息并通过tls信息进行过滤,最终根据tls中的sni或其他信息结合网络数据包特征实现数据包标记(标记数据包由哪个应用产生)。

    查看tls/ssl信息
    为了查看数据白哦中的tls/ssl信息,首先需要加载tls,根据scapy官网介绍,使用load_layer(‘tls’)即可。

    from scapy.all import *

    load_layer("tls")                   # 加载tls
    infliestr = "outpkts.pcapng"

    pkts = rdpcap(infliestr)           # 打开pcap文件,读取数据包内容
    nums=29                            # 该pcap包中,下标为29的数据包为tls client hello 
    pkts[nums].show() 

    结论:通过该方式是可以解析出tls包中的信息的,因此可以实现对tls信息内容的提取与过滤。

    提取 TLS 中的type和version字段

    from scapy.all import *

    load_layer("tls")
    infliestr = "outpkts.pcapng"

    pkts = rdpcap(infliestr)           # 打开pcap文件,读取数据包内容

    nums=29                            # 该pcap包中,下标为29的数据包为tls client hello 
    pkts[nums].show()
    print("type: ", pkts[5]['TLS'].fields['type'])
    print("version: ", pkts[5]['TLS'].fields['version'])
     

    查看 TLS client hello 中的 server name

    from scapy.all import *

    load_layer("tls")
    infliestr = "outpkts.pcapng"

    pkts = rdpcap(infliestr)           # 打开pcap文件,读取数据包内容

    nums=29                            # 该pcap包中,下标为29的数据包为tls client hello 
    pkts[nums].show()
    pkts[nums]['TLS']['TLS Handshake - Client Hello']['TLS Extension - Server Name'].show()
     

    针对wireshark或者tcpdump捕获的文件,使用python中的scapy库可以非常方便的进行解析,但是也存在一些坑。

    scapy是一个非常强大的流量包操作工具,可以针对请求或者响应从tcp/Ip的各层进行处理,官方网址为:https://scapy.net。

    但是需要注意一点的是单独的scapy库能做的工作有限,还有2个必须引进的库,即针对https进行解析的#

    安装

    这三个库最好在linux下进行安装,python的版本最好选择python2.7。

    然后首先安装scapy-ssl_tls这个库,优先选择pip的安装方式:

    pip install scapy-ssl_tls

    它会自动安装上相应的依赖库,包括scapy。

    最后安装上scapy-http即可,如果不按照这个方式安装,在安装scapy-ssl_tls可能会失败。

    使用

    scapy以及其他2个库都是开源软件,文档很少,如果要查看用法基本上都是直接查看代码,但是这3个库的源码包里都存在examples目录,里面有大量的例子,参照这些例子可以实现自己的逻辑。

    下面列出一个关键的函数,参照这些函数可以基本上实现大部分逻辑。

    rdpcap():读取pcap文件

    show():展示当前类型包含的属性及值

    haslayer():判断当前流是否含有某层数据

    getlayer():根据条件获取数据

  • 相关阅读:
    VirtualApp系统升级适配方法论(1)——一切从源码来
    RISC-V Optimization Guide(笔记)
    CANoe面板中的控件:Switch/Indicator
    Apache Doris 快速学习大纲
    Day3 最短路 最小生成树 拓扑排序
    PostgreSQL 在WAL文件中查找drop table、update、delete操作
    Spring 6.x 的 AoT 相关支持的注解
    C++信号量机制
    nodejs安装及环境配置
    Win10电脑需要安装杀毒软件吗?
  • 原文地址:https://blog.csdn.net/WASEFADG/article/details/126757471