因为网络拓扑发现和操作系统识别都是通过wireshark抓取网络上的通信数据包实现的,所以想对wireshark抓取到的pcap数据包进行解析,并且进行网络特性及其具体值的提取,并将其保存成csv格式。一个下午的时间,终于让我搞懂原理了。
1、利用SCAPY模块解析pcap数据包
首先,保证python中安装了scapy库,若没有,利用:pip install scapy 来进行安装
其次,在调用scapy模块时,必须使用 from scapy.all import * 才能正确调用。
在读入后我们知道,当scapy读入pcap文件时,实则是读入一个列表,可通过 cmd-python 命令进行调试,如下图所示:
我们可以从图中看到,因为pcap包包含了很多个数据包,所以读进来的pkts代表所有pcap包中包含的数据,而pkts[i]表示在pcap中的第i条数据,图中举例的是:我在wireshark中保存了过滤之后的仅含TCP协议的数据包, 所以得到的就是包含一条条TCP协议的数据包,若想知道每条数据包的具体格式,可通过show()函数进行结构的展示。要想提取出每条数据包中具体网络属性的值,利用pkts[i][
对应的结构的字段—TCP对应:‘Ethernet’、‘IPv6’、‘TCP’].具体属性名称,如下代码所示:
from scapy.all import *
pkts = rdpcap("tcp02.pcap")
pkt0=pkt[0]
dst=pkt0['Ethernet'].dst
version = pkt0['IPv6'].version
sport = pkt0['TCP'].sport
2、将pcap包里的数据导入到csv文件中
以下给出了对一条数据包的网络特性的提取,代码如下:
import csv
from scapy.all import *
pkts = rdpcap("tcp02.pcap")
pkt0 =pkts[0]
headers=