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 !
IP/TCP Packete
@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.
Was Du da von „Befehlen”, erzählst die grösser als ein UDP-Paket sind, ist mir ein Rätsel.
-
- User
- Beiträge: 6
- Registriert: Donnerstag 29. August 2013, 22:02
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 kannBlackJack hat geschrieben: Was Du da von „Befehlen”, erzählst die grösser als ein UDP-Paket sind, ist mir ein Rätsel.
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.
@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?
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?
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?
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?
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.
Das Leben ist wie ein Tennisball.
Okay damit kann ich ein IP Paket erstellen aber woher weiß ich was ich für:
einsetzten muss? also data ist klar, da kommt meine DNS Query rein. Aber der rest?
Also anstelle von icmp
Code: Alles auswählen
>>> icmp = ICMP(type=8, data=ICMP.Echo(id=123, seq=1, data='foobar'))
Also anstelle von icmp
Code: Alles auswählen
from dpkt.udp import UDP
udp = UDP(dport=53, sport = 2112, data = DNSQUERY)
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.
Das Leben ist wie ein Tennisball.
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?
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))
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'))
Falls jemand das selbe Problem hat, habe den Fehler gefunden.
dpkt.udp.UDP rechnet die Länge der Daten nicht mit ein.
also fehlt:
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)