Я пытаюсь получить информацию из 5-ти кортежей из списка файлов pcap с помощью библиотеки dpkt. Для того, чтобы анализировать пакеты PPPoE с VLAN тегов, я пишу коды, как это (для теста только):Разбор PPPoE-пакетов с dpkt
import dpkt
import socket
def decode(pc):
for ts, pkt in pc:
eth = dpkt.ethernet.Ethernet(pkt)
pppoe = dpkt.pppoe.PPPoE(eth.data)
ip = pppoe.data
if ip.p == dpkt.ip.IP_PROTO_UDP:
udp = ip.data
yield(ip.src, udp.sport, ip.dst, udp.dport, ip.v)
else: pass
def test():
pc = dpkt.pcap.Reader(open('epon.pcap','rb'))
for src, sport, dst, dport, ip_version in decode(pc):
print "from", socket.inet_ntoa(src),":",sport, " to ",socket.inet_ntoa(dst),":",dport
test()
Оказывается, ошибка, которая означает, что синтаксический анализ является неправильным:
AttributeError: 'str' object has no attribute 'p'
Так что надо правильно код как? Я начинающий Python, и исходный код dpkt действительно меня много озадачивает ...
Что вы ожидаете 'р' быть? IP-адрес? IP-версия? – Tux