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信息内容的提取与过滤。
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'])
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():根据条件获取数据