IP Spoofen mit Python

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
spooky0815
User
Beiträge: 23
Registriert: Montag 27. Februar 2006, 19:24

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
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

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*
mfg

Thomas :-)
BlackJack

Ich wüde sogar sagen Python ist eine höhere Programmiersprache als C++.
spooky0815
User
Beiträge: 23
Registriert: Montag 27. Februar 2006, 19:24

Nu gut...habt ihr aber dann auch nen Vorschlag, wie man mittels Python solche Pakete erzeugen kann? :D


Danke

Spooky
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

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:
mfg

Thomas :-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Kolazomai
User
Beiträge: 33
Registriert: Donnerstag 16. Februar 2006, 15:05
Kontaktdaten:

Ich werfs jetzt einfach mal so in den Raum:

rawsockets ?!

^^

Mfg,

Kolazomai
lobo
User
Beiträge: 29
Registriert: Sonntag 25. August 2002, 16:10
Wohnort: bei Augsburg

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
Jabber: lobo@jabber.ccc.de
[url=http://www.c3a.de/]chaostreff augsburg[/url]
spooky0815
User
Beiträge: 23
Registriert: Montag 27. Februar 2006, 19:24

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??
lobo
User
Beiträge: 29
Registriert: Sonntag 25. August 2002, 16:10
Wohnort: bei Augsburg

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
Jabber: lobo@jabber.ccc.de
[url=http://www.c3a.de/]chaostreff augsburg[/url]
spooky0815
User
Beiträge: 23
Registriert: Montag 27. Februar 2006, 19:24

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
BlackJack

Die Klasse `rawIpPkt` ist überflüssig. Die beiden Methoden sollten Funktionen sein.
spooky0815
User
Beiträge: 23
Registriert: Montag 27. Februar 2006, 19:24

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
Antworten