python dpkt pcap как получить протокол?

У меня есть лаборатория, и мне нужно найти протокол для каждого пакета огромного файла pcap. Я собираюсь сделать словарь, чтобы хранить их все, но мой первый шаг — просто получить информацию с помощью dpkt. Похоже, ip.get_proto - это то, что я хочу, но я упустил какой-то момент. Я читаю http://www.commercialventvac.com/dpkt.html#mozTocId839997

#!/usr/bin/python
# -*- coding: utf-8 -*-

import dpkt
import socket
import sys
import datetime

import matplotlib.pyplot as ploot 
import numpy as arrayNum 
from collections import Counter 

packets = 0 

protocolDist = {}  

f = open('bob.pcap')
#f = open('trace1.pcap')
pcap = dpkt.pcap.Reader(f) 

print "Maj Version:  " , dpkt.pcap.PCAP_VERSION_MAJOR  
print "Min Version:  " , dpkt.pcap.PCAP_VERSION_MINOR 
print "Link Layer "    , pcap.datalink() 
print "Snap Len:    "  , pcap.snaplen 

# How many packets does the trace contain? Count timestamps

# iterate through packets, we get a timestamp (ts) and packet data buffer (buf)
for ts,buf in pcap:
    packets += 1
    eth = dpkt.ethernet.Ethernet(buf)
    ip = eth.data
  # what is the timestamp of the first packet in the trace?
    if packets == 1:
        first = ts 
        print "The first timestamp is %f " % (first)    
        print ip.get_proto
        break 

# What is the average packet rate? (packets/second)     
# The last time stamp
last = ts
print "The last timestamp is %f " % (ts) 
print "The total time is %f " % (last - first)
print "There are %d " % (packets)
#print "The packets/second %f " % (packets/(last-first))    


# what is the protocol distribution?
# use dictionary 

f.close()
sys.exit(0)

person JMJ    schedule 24.04.2015    source источник


Ответы (2)


Check ip.p Возвращает число, соответствующее номеру протокола. Например, UDP имеет 17. ot chec

Ваше здоровье

person user1345619    schedule 27.05.2015

Если вы хотите получить номер IP-протокола, вы можете использовать

ip.get_proto(ip.p)

Эта вспомогательная функция переводит номера протокола в класс протокола. Оформить заказ https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml для официального списка протоколов IP. Иногда полезно получить представление в удобочитаемом формате. Я считаю полезным использовать __name__ для получения строки.

proto = ip.get_proto(ip.p).__name__
print(proto)
>>> 'TCP'
person Christoph Gerneth    schedule 23.11.2018