2017-02-06 20 views
0

私はネットワークからパケットをキャプチャして、それを私のpythonプログラムに解析して、送信元MAC、宛先MAC、および各パケットをその中に表示しようとしていますからなる。'type'オブジェクトに属性 '__getitem__'がない

エラーが最後の行で発生しました: "プリント(" プロトコル: "strの[プロトコル]、 "生きる時間:"、strの[生存時間])"

マイコード:

#!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]) 
+0

コードビットを具体的に記述してください。 –

+0

@AlexFungネットワークからパケットをキャプチャして、それを私のpythonプログラムに解析し、送信元MAC、宛先MAC、プロトコルを表示します。 ....これは私が書いた完全なコードです: –

+0

@PrashuPratikあなたの質問のコメントにあなたが言った内容も含めてください。また、コードタグを修正してください。 – Himal

答えて

0

あなたが仕事に行くされていない角括弧、とstr機能にアクセスしようとしている

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

:への最後の行を変更します。あなたが[]代わりにstr機能について()

使用str(protocol)str(timetolive)を使用しているよう

2

はSeeems。 strをチェックし、コードをstr(protocol.encode())str(timetolive.encode())に変更してpython3との互換性を確認してください。

+0

私がコードで行った一般的な間違いを指摘してくれてありがとう。しかし、 "l2data = unpack("!6s6sH "、l2hdr)"という行に別のstruct.errorがあります。 ".....展開するには、長さ14の文字列引数が必要です。値を6s6sHから14に変更する必要がありますか? @ sideffect0 –

+0

@PrashuPratikはこれを質問に含めて、他の人が別の質問に答えるか作成できるようにします –

関連する問題