Seite 1 von 1
IP/TCP Packete
Verfasst: Donnerstag 29. August 2013, 22:15
von slartibartfas
Grüezi Wohl
Eine frage und ernsthaft, ohne jegliche hintergedanken und verbreite ich hier "doofe" ideen so löscht diesen Faden und beantwortet es per PM.
Ich habe die Tage einen Netzwerk-Packete "RAW_SOCK" Sniffer gebastelt, nur um zu sehen ob es klappt und ich es richtig verstanden habe, es hat geklappt.
Jetzt die frage:
Könnte ich rein theorethisch, selber Packete, ein ip und ein tcp bauen und versenden, an jede IP die mir grad so beliebt und auch "online" ist. evtl. sogar mit befehlen drin, die das jeweilige OS, "sofern bekannt" versteht ?
Also eig. ist es möglich befehle, aufgeteilt in packeten zu versenden? ein packet, hat ja nur eine bestimmte anzahl an "grösse" deshalb, müssten es ja zwangseise mehrere sein.
Also bitte nicht falsch verstehen, es kamm mir nur der gedanke, ob es möglich ist und nicht die absicht es zu tun. Ich interessiere mich sehr für Netzwerk-programmierung und behersche einigermasen C und mehr dafür Python. Auch wen es möglich ist werde ich dies nicht tun, ich denke einfach, für mich als Hobby Programmierer und nicht Studierter, ist der gedanke zu simpel, als es funktionieren könnte.
Freundlichst grüsse ich Euch
Der Slartibartfas
Geheiligt sei die 42 !

Re: IP/TCP Packete
Verfasst: Donnerstag 29. August 2013, 22:30
von BlackJack
@slartibartfas: UDP-Pakete und TCP-Verbindungen kannst Du auch ohne „raw” Sockets erstellen und verschicken. Das sind schliesslich ganz normale Vorgänge die alle mögliche Client-Software macht. Natürlich könntest Du UDP und TCP mit rohen Paketen auch nachbauen wenn's Dir Spass macht. Aber warum sollte man das tun wollen wenn es das schon fertig gibt?
Was Du da von „Befehlen”, erzählst die grösser als ein UDP-Paket sind, ist mir ein Rätsel.
Re: IP/TCP Packete
Verfasst: Donnerstag 29. August 2013, 22:38
von slartibartfas
BlackJack hat geschrieben:
Was Du da von „Befehlen”, erzählst die grösser als ein UDP-Paket sind, ist mir ein Rätsel.
Ah ok, ja wen es eine reihe von befehlen sein sollte, müsste man es ja aufteilen, da ein packet eine bestimmte grösse hat und man da nicht einen ganzen roman reinpacken kann
Wie gesagt es ist nur ein hobby von mir und bin kein studierter
über tipps zur entsprechender Literatur wäre ich übrigends auch dankbar. Kaufe ungern einfach drauflos Bücher.

Re: IP/TCP Packete
Verfasst: Donnerstag 29. August 2013, 22:45
von BlackJack
@slartibartfas: Okay, mir wäre auch ein Rätsel was das für „Befehle” sein sollten die in ein Paket passen. Ich denke Du hast da ein paar falsche Vorstellungen. Man kann so allgemein keine „Befehle” an ein Betriebssystem senden die ausgeführt werden. Es gibt viele verschiedene Client/Server-Software die über UDP und/oder TCP kommunizieren. Das ist aber alles keine Magie sondern in der Regel gut dokumentiert, solange es keine proprietären Protokolle sind.
Das was Du schreibst ist viel zu schwammig. Was willst Du denn *konkret* machen? Einfach irgendwelche „Befehle” verschicken ist ja kein Selbstzweck. Welches konkrete Problem willst Du lösen?
Re: IP/TCP Packete
Verfasst: Donnerstag 17. Oktober 2013, 12:04
von cruzer*
Hallo,
ich befasse mich mit einer ähnlichen Frage.
Ich möchte ein DNS-Anfrage über einen RAW socket senden. Ja ich weiß es geht ganz einfach über einen DGRAM Socket. Ich möchte aber einen RAW Socket verwenden.
Also muss ich auf meine DNS-Anfrage die ich schon habe einen UDP Header legen und darüber einen IP Header und ab die Post.
Ich habe gelesen, dass es mit dpkt sehr einfach sein soll, finde aber leider nirgends etwas dazu. Kennt jemand eine gute dpkt Dokumentation oder kann mir weiterhelfen?
Re: IP/TCP Packete
Verfasst: Donnerstag 17. Oktober 2013, 12:21
von EyDu
Das Modul bietet doch eine direkte Abbildung auf die Spezifikation. Du musst einfach nur die entsprechenden Header erstellen und schachteln. Auf der
Projektseite ist das doch auch gleich das Beispiel. Ein ICMP-Paket in einem IP-Paket.
Re: IP/TCP Packete
Verfasst: Donnerstag 17. Oktober 2013, 12:38
von cruzer*
Okay damit kann ich ein IP Paket erstellen aber woher weiß ich was ich für:
Code: Alles auswählen
>>> icmp = ICMP(type=8, data=ICMP.Echo(id=123, seq=1, data='foobar'))
einsetzten muss? also data ist klar, da kommt meine DNS Query rein. Aber der rest?
Also anstelle von icmp
Code: Alles auswählen
from dpkt.udp import UDP
udp = UDP(dport=53, sport = 2112, data = DNSQUERY)
Re: IP/TCP Packete
Verfasst: Donnerstag 17. Oktober 2013, 12:54
von EyDu
Dann schaust du dir am besten jetzt mal das OSI-Modell an und sucht heraus, auf welchem Layer sich DNS befindet (ich vermute einfach mal auf dem Application Layer). Die Header bis Layer 3 musst du dann nur noch verschachteln.
Re: IP/TCP Packete
Verfasst: Dienstag 22. Oktober 2013, 11:41
von cruzer*
So ich habe nun meine IP Header + Daten, den UDP Header + Daten und die DNS Query
Jedoch wird keine DNS Anfrage gesendet (getestet mit Wireshark).
Wo ist mein Fehler?
Code: Alles auswählen
SOURCE_PORT = random.randint(1025,65556)
DEST_PORT = 53
QUERY_DNS = '\xde\xa3\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x08facebook\x03com\x00\x00\x01\x00\x01'
def creatPacket(dest_ip, ttl):
saddr = socket.inet_aton(getNetworkIp())
dest = socket.inet_aton(dest_ip)
ip = IP(src=saddr , dst = dest, p = 17, ttl=ttl)
udp = UDP(dport = DEST_PORT, sport=SOURCE_PORT, data = QUERY_DNS)
ip.data = udp
ip.len +=len(ip.data)
pkt = str(ip)
return pkt
def getNetworkIp():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('google.com', 0))
return s.getsockname()[0]
s = socket.socket(socket.AF_INET, socket.SOCK_RAW)
s.settimeout(4)
s.sendto(creatPacket("8.8.8.8", 30),('8.8.8.8',53))
Re: IP/TCP Packete
Verfasst: Dienstag 22. Oktober 2013, 11:55
von EyDu
Startest du dein Programm mit den benötigten Rechten? Nich jedes Programm darf einfach über raw sockets Daten verschicken oder gar empfangen.
Re: IP/TCP Packete
Verfasst: Dienstag 22. Oktober 2013, 12:05
von cruzer*
ich starte es über cmd mit Adminrechten.
Code: Alles auswählen
>>> pkt
'E\x00\x00:\x00\x00\x00\x00@\x11\xe9\xf5\xc0\xa8\xc0\x05\x08\x08\x08\x08\x08\xa4\x005\x00\x08\x0ct\xde\xa3\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x08facebook\x03com\x00\x00\x01\x00\x01'
>>> IP(pkt)
IP(src='\xc0\xa8\xc0\x05', dst='\x08\x08\x08\x08', sum=59893, len=58, p=17, data=UDP(dport=53, sum=3188, sport=2212, data='\xde\xa3\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x08facebook\x03com\x00\x00\x01\x00\x01'))
Re: IP/TCP Packete
Verfasst: Donnerstag 24. Oktober 2013, 07:26
von cruzer*
Falls jemand das selbe Problem hat, habe den Fehler gefunden.
dpkt.udp.UDP rechnet die Länge der Daten nicht mit ein.
also fehlt:
Code: Alles auswählen
udp = UDP(dport = DEST_PORT, sport=SOURCE_PORT, data = QUERY_DNS)
udp.ulen += len(QUERY_DNS)