我創建了一個簡單的基於RAW套接字的數據包嗅探器。但是當我運行它時,它很少捕獲一個數據包。首先我創建了這個功能,以1秒的時間間隔捕獲數據包,但看到沒有數據包被捕獲,我評論了該行。我連接到互聯網,很多http流量都在這裏和那裏,但我無法捕捉到一個。在創建套接字的代碼中是否存在這個問題?請有人給我一個解決方案。我對python編程相當陌生,無法理解如何解決這個問題。原始套接字python數據包嗅探器
import socket, binascii, struct
import time
sock = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x800))
print "Waiting.."
pkt = sock.recv(2048)
print "received"
def processEth(data):
#some code to process source mac and dest. mac
return [smac, dmac]
def processIP(data):
sip = str(binascii.hexlify(data[1]))
dip = str(binascii.hexlify(data[2]))
return [sip, dip]
def processTCP(data):
sport = str(data[0])
dport = str(data[1])
return [sport, dport]
while len(pkt) > 0 :
if(len(pkt)) > 54:
pkt = sock.recv(2048)
ethHeader = pkt[0][0:14]
ipHeader = pkt[0][14:34]
tcpHeader = pkt[0][34:54]
ethH = struct.unpack("!6s6s2s",ethHeader)
ethdata = processEth(ethH)
ipH = struct.unpack("!12s4s4s",ipHeader)
ipdata = processIP(ipH)
tcpH = struct.unpack("!HH16", tcpHeader)
tcpdata = processTCP(tcpH)
print "S.mac "+ethdata[0]+" D.mac "+ethdata[1]+" from: "+ipdata[0]+":"+tcpdata[0]+" to: "+ipdata[1]+":"+tcpdata[1]
#time.sleep(1);
else:
continue
僅供參考。 http://stackoverflow.com/questions/6878603/strange-raw-socket-on-mac-os-x – Ben