Seite 1 von 1

IP Spoofen mit Python

Verfasst: Sonntag 2. Juli 2006, 21:58
von spooky0815
Hallo,

Ich bastel grad etwas mit Python und frage mich, ob es ohne Nutzung einer Hochsprache wie C++, etc. möglich ist, ein Paket mit anderer IP zu versenden. Zum Beispiel Pings oder vielleicht einfacher ein HTTP Request. Dort können zwar per urllib /~2 header-Daten geändert werden, aber bei der IP muß man ja tiefer ansetzen. Das ich kein Response erhalte ist mir dann auch bewußt ...mir geht es nur darum, ob es mit ner Skriptsprache wie Python möglich wäre :)

Wenn jemand mir Tipps bzw. entsprechenden Code geben kann, wäre ich sehr dankbar...

VG,

Spooky

Re: IP Spoofen mit Python

Verfasst: Montag 3. Juli 2006, 00:36
von Python 47
spooky0815 hat geschrieben:Hallo,

Ich bastel grad etwas mit Python und frage mich, ob es ohne Nutzung einer Hochsprache wie C++, etc. möglich ist
Python ist auch eine höhere Programmiersprache. :wink: *Scnr*

Verfasst: Montag 3. Juli 2006, 11:56
von BlackJack
Ich wüde sogar sagen Python ist eine höhere Programmiersprache als C++.

Verfasst: Montag 3. Juli 2006, 12:05
von spooky0815
Nu gut...habt ihr aber dann auch nen Vorschlag, wie man mittels Python solche Pakete erzeugen kann? :D


Danke

Spooky

Verfasst: Montag 3. Juli 2006, 12:18
von gerold
spooky0815 hat geschrieben:Nu gut...habt ihr aber dann auch nen Vorschlag, wie man mittels Python solche Pakete erzeugen kann?
Hi Spooky!

Auch wenn ich es wüsste, würde ich es nicht hier preis geben. Ich möchte nämlich nicht, dass es irgendwann einmal heißt, Python zu installieren sei gefährlich, denn damit kann jeder Hacker seine IP-Adresse verschleiern oder einen Datenstrom zu seinem Computer umleiten.

Auch wenn es technisch evt. nicht das Problem ist, aber ich möchte den guten Ruf von Python wahren.

lg
Gerold
:-)

Verfasst: Montag 3. Juli 2006, 13:47
von Python 47
Das sehe ich auch so, denn mir ist kein Hackertool bekannt, dass in Python geschrieben wurde. Und das finde ich auch gut so. Falls jemand eins kennt, dann zeigt es mir. Ich lasse mich gerne eines besseren belehren. :lol:

Verfasst: Montag 3. Juli 2006, 14:46
von Leonidas
Ich kenne zwar kein Hackertool, aber dafür zwei C(++)-Libs die Python-Wrapper haben und die IP Pakete generieren und somit auch fälschen können.

Verfasst: Montag 3. Juli 2006, 15:23
von Kolazomai
Ich werfs jetzt einfach mal so in den Raum:

rawsockets ?!

^^

Mfg,

Kolazomai

Verfasst: Montag 3. Juli 2006, 18:04
von lobo
Ich finde diese Geheimniskrämerei etwas seltsam. Wenn jemand schlechte Absichten hat, dann wird er diese auch weiter pflegen, ob man ihm jetzt die Information gibt oder nicht. Aber ich glaube es gab hier schon mal einen Artikel (da ging es um Arp-Spoofing glaube ich), bei dem aus so einer Frage ne Grundsatzdiskussion gemacht wurde. Das hört sich für mich irgendwie an, wie wenn man kleine Kinder erziehen will.

Das hier ist doch ein Forum in dem es um Python Programmierung geht und hier will jemand mit Python, ICMP oder IP Pakete bauen. Man kann einem doch nicht gleich unterstellen, dass er ein "Denial of Service" Tool bauen will, wenn er fragt wie man mit Python Code, einen Ping an einen Rechner sendet.

Um Pakete zu generieren, fallen mir folgende Projekte ein:

- Scapy
- libdnet

Ich würde aber Scapy empfehlen, da man damit sehr schön Pakete generieren und die Resultate auch sehr schön visualisieren kann. Scapy ist auch empfehlenswert, wenn man gerade TCP/IP lernt und mit den Paketen etwas spielen will.

Das weiter oben ist nur meine Meinung und es soll sich niemand angegriffen fühlen, aber was jemand mit bestimmtem Wissen macht liegt glaube ich nicht in unserer Hand und wenn wir die Infos vor ihm verstecken, werden wir damit sicher nicht die Welt verbessern.

Gruss

Jochen

Verfasst: Montag 3. Juli 2006, 22:59
von spooky0815
Hallo,

Ich hab ein paar PYthon Bücher befragt und konnte mir dieses Grundgrüst zusammenbasteln (dpkt findet ihr auf http://monkey.org/~dugsong/dpkt/) :

Code: Alles auswählen


import socket, dpkt

class rawIpPkt:

	def __init__(self):
		return

	def buildIpPkt(self, protocol, src, dst, data):
		ip_p = dpkt.ip.IP()
		ip_p.tos = 0
		ip_p.off = 0
		ip_p.p = protocol #socket.IPPROTO_TCP
		ip_p.ttl = 64 # hop limit
		ip_p.src = socket.inet_aton(src)
		ip_p.dst = socket.inet_aton(dst)
		ip_p.data = str(data);
		return str(ip_p)

	def buildTcpPkt(self, sport, dport, data):
		tcp_p = dpkt.tcp.TCP()
		tcp_p.urp = 0
		tcp_p.ack = 0
		tcp_p.seq = 0
		tcp_p.win = socket.htons(len(str(data)))
		tcp_p.sport = sport #socket.htons(sport)
		tcp_p.dport = dport #socket.htons(dport)
		
		tcp_p.data = str(data)

		return str(tcp_p)


def main():
	req = rawIpPkt()
	paket = req.buildIpPkt(socket.IPPROTO_TCP, '127.0.0.2', '127.0.0.3', req.buildTcpPkt(11001, 11002, 'abcdefg'))
	sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
	sock.sendto(paket, 0, ('127.0.0.1', 9999))


main()

Es _SOLLTE_ ein gefälschtes Paket senden...leider snifft mein Ethereal nix mit :( Kann das an der fehlenden Prüfsumme bei TCP liegen?
Ist der TCP Teil überhaupt notwendig, oder kann ich das von Python erledigen lassen. Ich will ja nur die IP ändern und nen http-request reinbauen.

Ich bitte nun um kleine oder große Hilfen...ein verbessertes Skript wäre der Traum ;)

Spooky

P.S.: Scapy bricht bei der Ausführung mit der Medung ab:

Traceback (most recent call last):
File "G:\scapy.py", line 1557, in ?
from fcntl import ioctl
ImportError: No module named fcntl

:( ... hat jmd einen Tipp??

Verfasst: Montag 3. Juli 2006, 23:18
von lobo
spooky0815 hat geschrieben: ...
Es _SOLLTE_ ein gefälschtes Paket senden...leider snifft mein Ethereal nix mit :(
...
Sende mal das Paket an eine IP in deinem LAN und nicht an 127.0.0.1 und sniff dann nochmal mit.
spooky0815 hat geschrieben: P.S.: Scapy bricht bei der Ausführung mit der Medung ab:

Traceback (most recent call last):
File "G:\scapy.py", line 1557, in ?
from fcntl import ioctl
ImportError: No module named fcntl

:( ... hat jmd einen Tipp??
Sorry, ich hatte vergessen zu sagen, dass Scapy momentan Windows nicht unterstützt. Es gab zwar schon eine Portierung auf der Mailingliste, aber anscheinend funkionieren dann auch nur die Basis Funktionen von Scapy.

http://article.gmane.org/gmane.comp.sec ... eneral/489

Verfasst: Dienstag 4. Juli 2006, 07:31
von spooky0815
Sende mal das Paket an eine IP in deinem LAN und nicht an 127.0.0.1 und sniff dann nochmal mit.
getestet...kommt nix an :( ... Was passt da nicht?? An Ethereal kanns nicht liegen...hat mir bis jetzt immer zuverlässig treue Dienste geleistet :)

!!!NEED HELP!!!

@scapy ... dafür gibts ja VMWare oder Cygwin ;) ... aber danke, ich hätte auch einfach mal auf der scapy-Seite genauer lesen können.

VG

Spooky

Verfasst: Dienstag 4. Juli 2006, 08:27
von BlackJack
Die Klasse `rawIpPkt` ist überflüssig. Die beiden Methoden sollten Funktionen sein.

Verfasst: Mittwoch 5. Juli 2006, 13:58
von spooky0815
hallo,

Ok dann bleibt das übrig:

Code: Alles auswählen

import socket, dpkt

def buildIpPkt(protocol, src, dst, data):
	ip_p = dpkt.ip.IP()
	ip_p.tos = 0
	ip_p.off = 0
	ip_p.p = protocol #socket.IPPROTO_TCP
	ip_p.ttl = 64 # hop limit
	ip_p.src = socket.inet_aton(src)
	ip_p.dst = socket.inet_aton(dst)
	ip_p.data = str(data);
	return str(ip_p)

def buildTcpPkt(sport, dport, data):
	tcp_p = dpkt.tcp.TCP()
	tcp_p.urp = 0
	tcp_p.ack = 0
	tcp_p.seq = 0
	tcp_p.win = socket.htons(len(str(data)))
	tcp_p.sport = sport #socket.htons(sport)
	tcp_p.dport = dport #socket.htons(dport)
	tcp_p.data = str(data)
	return str(tcp_p)

    
paket = buildIpPkt(socket.IPPROTO_TCP, '127.0.0.2', '127.0.0.3', buildTcpPkt(11001, 11002, 'abcdefg'))
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
sock.sendto(paket, 0, ('127.0.0.1', 9999))

könnte man da jetzt ein Request als Dateninhalt reinpacken und senden. Ich habe da meine Bedenken, weil die Checksumme im TCP-Paket fehlt. Gibt es da eine eingebaute Funktion in Python?

Danke für jede Hilfe,

Spooky