2012-08-01 2 views
0

Scapy의 sniff() 기능을 사용하여 이더넷 패킷을 스니핑합니다. pkt라는 변수에 저장합니다. 나중에 pkt의 내용을 다른 변수 buffpkt에 추가하여 동일한 사본을 만들고 싶습니다. 처음에는 두 변수를 모두 list로 선언했지만 일단 pkt가 sniff() 출력을 저장하면 유형이 인스턴스로 변경됩니다. 아래는 코드입니다.목록을 복사 할 수 없습니다.

pkt=[] 
buffpkt=[] 
pkt=sniff(prn=lambda x:x.sprintf("{IP : %IP.src% %IP.dst%\n\n} "),timeout=5,store=1) 
buffpkt=pkt 

나는 buffpkt에 결과를 추가하여 스니핑 모든 패킷의 큰 목록을 만들고 싶어하지만 난 할 수 없습니다. 어떤 제안?

답변

1

하나의 목록을 다른 목록에 할당하면 첫 번째 목록이 두 번째 목록을 가리키게됩니다. 목록을 복사하려면 다음과 같이 슬라이싱 연산자를 사용할 수 있습니다

buffpkt = pkt[:] 

지금 buffpkt가 복사됩니다.

+0

을하지만이 날 새로운 결과를 추가하는 데 도움이 될 것입니다? – Abhinav

+0

buffpkt + = pkt [:] WORKS! – Abhinav

+1

@sHoM'sniff'의 리턴 값은 실제로는리스트가 아니라리스트와 같은 접근을 구현하는 커스텀 객체입니다 ('__getitem__' 함수 사용). 그것이 유형이'instance' 인 이유입니다. –

관련 문제