Ich möchte einen Paket-Sniffer in Python 3.5, die UDP, TCP und ICMP erfasst. Dies ist ein kurzes Beispiel dafür:Paket-Sniffer in Python
import socket
import struct
# the public network interface
HOST = socket.gethostbyname(socket.gethostname())
# create a raw socket and bind it to the public interface
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind((HOST,0))
# Include IP headers
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
# receive all packages
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
# receive a package
n=1
while(n<=400):
print('Number ', n)
data=s.recvfrom(65565)
packet=data[0]
address= data[1]
header=struct.unpack('!BBHHHBBHBBBBBBBB', packet[:20])
if(header[6]==6): #header[6] is the field of the Protocol
print("Protocol = TCP")
elif(header[6]==17):
print("Protocol = UDP")
elif(header[5]==1):
print("Protocol = ICMP")
n=n+1
Das Problem ist, dass es erfasst nur UDP-Pakete :( Ausgang:
Number 1 Protocol = UDP Number 2 Protocol = UDP Number 3 Protocol = UDP Number 4 Protocol = UDP Number 5 Protocol = UDP Number 6 Protocol = UDP Number 7
Es sind 2 Optionen sind:
- Der Sniffer erfassen nur UDP-Pakete
- Ich empfange nur UDP-Pakete
Ich denke, dass die logischste Antwort ist mein Sniffer funktioniert nicht richtig und es ist nur UDP erfassen. Irgendeine Idee?
ich wette scapy für diesen Job ist besser als das Buchsenmodul. Es ist viel bequemer, Pakete zu schnüffeln. –
Welche Plattform benutzen Sie? Unter Unix/Linux müssen Sie normalerweise root sein, um jedes Paket zu erfassen. –
@HughFisher Ich bin auf Windows 7, mit PyDev und Eclipse. Ich führe Eclipse als Administrator aus. –