2017-02-06 7 views
0

네트워크에서 패킷을 캡처하여 파이썬 프로그램으로 파싱하고 원본 MAC, 대상 MAC 및 프로토콜을 각 패킷에 표시하려고합니다 으로 구성되다.'type'객체에 '__getitem__'속성이 없습니다.

오류가 마지막 줄에 발생했습니다 : "인쇄 ("프로토콜 ", STR [프로토콜]"살 시간 ", STR [의 TimeToLive])"

내 코드 :

#!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 네트워크에서 패킷을 캡처하고이를 파이썬 프로그램에 파싱하여 원본 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 질문에이 질문을 포함하면 다른 사람들이 다른 질문에 답하거나 작성할 수 있습니다. –