python解析pcap数据包,再导出成csv文件

因为网络拓扑发现和操作系统识别都是通过wireshark抓取网络上的通信数据包实现的,所以想对wireshark抓取到的pcap数据包进行解析,并且进行网络特性及其具体值的提取,并将其保存成csv格式。一个下午的时间,终于让我搞懂原理了。

1、利用SCAPY模块解析pcap数据包

首先,保证python中安装了scapy库,若没有,利用:pip install scapy 来进行安装
其次,在调用scapy模块时,必须使用 from scapy.all import * 才能正确调用。
在读入后我们知道,当scapy读入pcap文件时,实则是读入一个列表,可通过 cmd-python 命令进行调试,如下图所示:
python解析pcap数据包,再导出成csv文件_第1张图片
我们可以从图中看到,因为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=['dst','src','type','version','tc','f1','plen','nh','hlim','IPsrc','IPdst','sport','dport','seq','ack',
         'dataofs','reserved','flags','window','chksum','urgptr','optionsmss','optionsNOP0','optionsWScale',
         'optionsNOP1','optionsNOP2','optionsSAckOK']

a1=pkt0['Ethernet'].dst
a2=pkt0['Ethernet'].src
a3=pkt0['Ethernet'].type

b1=pkt0['IPv6'].version
b2=pkt0['IPv6'].tc
b3=pkt0['IPv6'].fl
b4=pkt0['IPv6'].plen
b5=pkt0['IPv6'].nh
b6=pkt0['IPv6'].hlim
b7=pkt0['IPv6'].src
b8=pkt0['IPv6'].dst
c1=pkt0['TCP'].sport
c2=pkt0['TCP'].dport
c3=pkt0['TCP'].seq
c4=pkt0['TCP'].ack
c5=pkt0['TCP'].dataofs
c6=pkt0['TCP'].reserved
c7=pkt0['TCP'].flags
c8=pkt0['TCP'].window
c9=pkt0['TCP'].chksum
c10=pkt0['TCP'].urgptr
c11=pkt0['TCP'].options[0][1]
c12=pkt0['TCP'].options[1][1]
c13=pkt0['TCP'].options[2][1]
c14=pkt0['TCP'].options[3][1]
c15=pkt0['TCP'].options[4][1]
c16=pkt0['TCP'].options[5][1]

rows=[a1,a2,a3,b1,b2,b3,b4,b5,b6,b7,b8,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16]

with open('test3.csv','w',newline ='') as f:
    fcsv= csv.writer(f)
    fcsv.writerow(headers)
    fcsv.writerow(rows)

你可能感兴趣的:(python解析pcap数据包,再导出成csv文件)