使用dpkt、python进行pcap解析

使用dpkt、python进行pcap解析,python,regex,pcap,dpkt,Python,Regex,Pcap,Dpkt,我对python比较陌生,有一个小项目需要解析pcap并提取某些数据。我现在被卡住了!我需要的帮助是如何解析数据包流的非实际数据内容 我想做的是能够,例如,使用正则表达式,如果regexp匹配数据包打印的内容 像这样的 !/usr/bin/env python import socket import dpkt import time import re f = open('pcap.pcap','r') pcap = dpkt.pcap.Reader(f) pktCounter = 0

我对python比较陌生,有一个小项目需要解析pcap并提取某些数据。我现在被卡住了!我需要的帮助是如何解析数据包流的非实际数据内容

我想做的是能够,例如,使用正则表达式,如果regexp匹配数据包打印的内容

像这样的

!/usr/bin/env python


import socket
import dpkt
import time
import re

f = open('pcap.pcap','r')
pcap = dpkt.pcap.Reader(f)

pktCounter = 0


for ts,buff in pcap:

pktCounter += 1

try:
    ether = dpkt.ethernet.Ethernet(buff)

    # Mac address
    src_mac = (ether.dst).encode("hex")
    dst_mac = (ether.src).encode("hex")
    smac = ':'.join([src_mac[i:i+2] for i in range(0, len(src_mac), 2)])
    dmac = ':'.join([dst_mac[i:i+2] for i in range(0, len(dst_mac), 2)])

    # Packet
    ip = ether.data
    tcp = ip.data
    src = socket.inet_ntoa(ip.src)
    srcport = tcp.sport
    dst = socket.inet_ntoa(ip.dst)
    dstport = tcp.dport

    # Definition of Time
    showTime = time.gmtime(ts)
    timeF = time.strftime("%Y/%m/%d %H:%M:%S", showTime)

    # Packet Size
    sizeP = len(buff)


    # Data filtering
    p = re.compile("<Line>(.*?)\</Line>", re.IGNORECASE|re.DOTALL)



    # Packet print
    print "PktNr: %s" %(pktCounter)
    print "PktSize: %s" %(sizeP)
    print "Time: %s" %(timeF)
    print "src: (MAC: %s) \033[1;32m(IP:%s)\033[1;m (port:%s) --> dest: (MAC: %s) \033[1;31m(IP:%s)\033[1;m (port:%s)" % (smac,src,srcport,dmac,dst,dstport) + "\n"
    print ip



except AttributeError:
    pass
/usr/bin/env python
导入套接字
进口dpkt
导入时间
进口稀土
f=打开('pcap.pcap','r')
pcap=dpkt.pcap.Reader(f)
pktCounter=0
对于ts,在pcap中进行buff:
pkt计数器+=1
尝试:
以太=dpkt.ethernet.ethernet(buff)
#Mac地址
src_mac=(ether.dst).encode(“十六进制”)
dst_mac=(ether.src).encode(“十六进制”)
smac=':'.join([src_-mac[i:i+2]表示范围内的i(0,len(src_-mac),2)])
dmac=':'.join([dst_mac[i:i+2]表示范围内的i(0,len(dst_mac),2)])
#小包
ip=以太数据
tcp=ip.data
src=socket.inet\u ntoa(ip.src)
srcport=tcp.sport
dst=socket.inet_ntoa(ip.dst)
dstport=tcp.dport
#时间的定义
showTime=time.gmtime(ts)
timeF=time.strftime(“%Y/%m/%d%H:%m:%S”,showTime)
#数据包大小
sizeP=len(浅黄色)
#数据过滤
p=re.compile(“(*?\”,re.IGNORECASE | re.DOTALL)
#套印
打印“PktNr:%s”%(PKT计数器)
打印“PktSize:%s”%(大小)
打印“时间:%s%”(时间)
打印“src:(MAC:%s)\033[1;32m(IP:%s)\033[1;m(端口:%s)-->dest:(MAC:%s)\033[1;31m(IP:%s)\033[1;m(端口:%s)”%(smac、src、srcport、dmac、dst、dstport)+“\n”
打印ip
除属性错误外:
通过