Alternative zu socket.ioctl(Python < 2.6)?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
DaRealFreak
User
Beiträge: 10
Registriert: Freitag 20. April 2012, 12:54

Joa ich wollte mir einen kleinen packet sniffer erstellen und hab erstmal das Code Exampel von python.org genommen, d.h. das ganze sieht aktuell so aus:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: latin-1 -*-
import socket

def PacketSniffer():
	HOST = socket.gethostbyname(socket.gethostname())
	try:
		s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
	except:
		print("acess denied")
		return
	s.bind((HOST, 0))

	s.setsockopt(socket.IPPROTO_IP, 3, 1)
	s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)

	while 1:
		print s.recvfrom(65565)

	s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

PacketSniffer()
Das Problem hierbei ist, dass ich das ganze bei Python 2.2.3 benötige, d.h. socket.ioctl() kann ich hierbei noch nicht verwenden, da dieses erst ab Python 2.6 hinzukommt.
Der Packetverlauf ist ohne das "Receive all" aber dementsprechend eingeschränkt und ich komme nicht an alle packets.

Gibt es eine Alternative zu socket.ioctl() die auch unter Python 2.2 funktioniert oder ist die Suche das komplett via Python zu machen hoffnungslos?

MfG DaRealFreak
Zuletzt geändert von DaRealFreak am Donnerstag 2. August 2012, 02:12, insgesamt 1-mal geändert.
deets

http://docs.python.org/release/2.2.3/li ... fcntl.html
Du musst natuerlich uU die Konstanten aus socket in dein Skript uebernehmen.

Und es sollte nicht verwundern, dass du ein solches "Uebersprechen" bemerkst - das ist ja eine interface-weite Einstellung AFAIK.
Antworten