我收到了一个错误:'输入'对象没有属性' __ getitem __'

时间:2017-02-06 03:57:33

标签: python pcap

我正在从网络捕获一个数据包并尝试将其解析为我的python程序,并显示其中的每个数据包所包含的源MAC,目标MAC和协议。

最后一行出错:"打印("协议:",str [协议],"生存时间:",str [timetolive])& #34;

我的代码:

#!usr/bin/python

import pcapy

from struct import*

pcap_file=pcapy.open_offline("single.pcap")

count=1

while count:
    print("Packet #:",count)

    count=count+1
    (header,payload)=pcap_file.next()

    l2hdr=payload[:14]
    l2data=unpack("!6s6sH",l2hdr)

    srcmac="%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:" %(ord(l2hdr[0]),ord(l2hdr[1]),ord(l2hdr[2]),ord(l2hdr[3]),ord(l2hdr[4]),ord(l2hdr[5]))
    dstmac="%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:" %(ord(l2hdr[6]),ord(l2hdr[7]),ord(l2hdr[8]),ord(l2hdr[9]),ord(l2hdr[10]),ord(l2hdr[11]))

    print("source MAC:",srcmac,"Destination MAC:",dstmac)

    ipheader=unpack('!BBHHHBBH4s4s',payload[14:34])
    timetolive=ipheader[5]
    protocol=ipheader[6]

    print("Protocol:",str[protocol],"Time to live:",str[timetolive])

2 个答案:

答案 0 :(得分:2)

看起来好像您使用[]代替() str函数,

使用str(protocol)str(timetolive);检查str,将代码修改为str(protocol.encode())str(timetolive.encode())以获得python3兼容性。

答案 1 :(得分:0)

将最后一行更改为:

print("Protocol:",str(protocol),"Time to live:",str(timetolive))

您正尝试使用方括号访问str功能,但该功能无法正常工作。