Scapy sniff() 함수에 이상한 문제가 있습니다.스레딩을 하위 클래스로 만드는 스니핑 스 니프()
이편집 : 그것을하지 않습니다 내가 말할 때이 코드는 내 스레드 관리자 클래스에서 호출 할 때 작동하지 않습니다
from scapy.all import *
import sys
import datetime
import Queue
from threading import Thread
class packet_sniffer(Thread):
def __init__(self,pass_queue):
super(packet_sniffer,self).__init__()
print 'Packet sniffer started'
self.queue=pass_queue
self.device_dict={}
self.not_an_ap={}
def PacketHandler(self,pkt):
if pkt.haslayer(Dot11):
sig_str = -(256-ord(pkt.notdecoded[-4:-3]))
mac_addr=""
ssid=""
try:
mac_addr=pkt.addr2
ssid=pkt.info
except:
return
if self.device_dict.has_key(pkt.addr2) and pkt.info!=self.device_dict[pkt.addr2]:
output= "DIS MAC:%s RSSI:%s " %(pkt.addr2,sig_str)
print output
self.device_dict.pop(pkt.addr2)
self.not_an_ap[pkt.addr2]=pkt.info
self.queue.put(output)
elif pkt.info=="" or pkt.info=="Broadcast":
output= "DIS MAC:%s RSSI:%s " %(pkt.addr2,sig_str)
print output
self.queue.put(output)
else:
pot_mac=self.not_an_ap.get(pkt.addr2)
if pot_mac == None:
self.device_dict[pkt.addr2]=pkt.info
def run(self):
sniff(iface="mon.wlan0",prn=self.PacketHandler)
:
이는 내 수업이 찾고 어떻게 작동, 나는 스 니프가 작동하지 않거나 PacketHandler를 호출하지 않는다는 것을 의미합니다. 오류 메시지가 출력되지 않으며, 프로그램의 나머지 부분은 내가이 게시물보고 후 절전 기능을 포함
currentQueue=Queue()
#object setup
print'Initialising sniffer'
packet_sniffer_instance=packet_sniffer(currentQueue)
packet_sniffer_instance.daemon=True
packet_sniffer_instance.start()
time.sleep(1)
print'Finished initialising sniffer'
정상적으로 계속 : 그러나 Scapy fails to sniff
, 나는 __init__()
기능에 내 냄새 통화를 이동할 때 작동하지만, __init__()
함수에 무한정 붙어있는 packet_sniffer 클래스로 인해 이후의 스레드를 호출 할 수 없습니다.
파이썬 (전반적으로 새로운 프로그래머는 아니지만 많은 경험이 있음)은 상당히 새로운 프로그래머입니다. 따라서 나는 정말 잘못된 것을하고있을 것입니다.
TIA
제임스.
"작동하지 않음"이란 무엇을 의미합니까? – dano
@dano 내가 명확히하겠습니다. 내가 작동하지 않는다고 말하면, 스 니프가 작동하지 않거나 PacketHandler를 호출하지 않는다는 뜻입니다. 오류 메시지가 출력되지 않으며 나머지 프로그램은 정상적으로 계속됩니다. – James
'run'이 호출되고 있는지 확인할 수 있습니까? (단지 거기에'print' 문을 던지십시오). 'PacketHandler'의 맨 위에 인쇄하십시오. 흐름을 추적하기 위해'print'를 사용하여 어떤 일이 막히거나 실패하는지 파악할 수 있어야합니다. – dano