2016-05-12 6 views
0

Ich arbeite durch das Buch 'Black Hat Python' und habe Probleme mit einer UDP-Verbindung zu 127.0.0.1 auf Port 80. Ich bin ziemlich neu in Dieses Zeug ist also nicht etwas, bei dem ich mich einfach hinsetzen und schnell und effizient nach Fehlern suchen kann, also hoffte ich, dass jemand auf einen Fehler hinweisen kann oder vielleicht ist es nur mein Setup. Ich teste das in Kali VM mit VMware Fusion. Der Socket bleibt offen und wartet auf eine Antwort, erhält aber nie eine.Problem beim Empfangen von Antwort von 127.0.0.1 mit UDP-Client in Python

import socket 

target_host = "127.0.0.1" 
taget_port = 80 

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
client.sendto("AAABBBCCC", (target_host, taget_port)) 

data, addr = client.recvfrom(4096) 

print data 
+0

Sind Sie sicher, dass Server Ihre Nachricht empfängt („AABBBCCC“)? –

+0

Ich versuche das jetzt mit Wireshark zu überprüfen, aber wie ich schon sagte bin ich neu, also bin ich mir nicht ganz sicher, was ich suchen soll, außer das durch die Pakete zu schnüffeln und zu sehen, ob ich meins sehe. –

+0

Was genau verwenden Sie, um die Nachricht zu erhalten? –

Antwort

0

Ihre Architektur, einen Client und einen Server in demselben Thread zu haben, ist sehr ungewöhnlich. Ich würde es nicht empfehlen.

Dennoch wird Ihr Programm so, wie Sie arbeiten möchten, wenn Sie .bind() die Buchse an die Zieladresse:

import socket 

target_host = "127.0.0.1" 
target_port = 8000 

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
client.bind((target_host, target_port)) 
client.sendto("AAABBBCCC", (target_host, target_port)) 

data, addr = client.recvfrom(4096) 

print data 
+0

Im folgenden Buch werden die verschiedenen TCP/IP-Protokolle demonstriert. Das funktioniert, aber warum hat er den HTTP-Port angegeben? Wird das nie funktionieren, egal was ich mache? Edit: Änderte den Port auf 80 und es schien zu dieser Zeit zu arbeiten. Vielleicht ist es nur ein Tippfehler in seinem Beispiel, weil ich fast jedes Beispiel von udp Client/Server gesehen habe, den Socket an die Zieladresse zu binden. –

+0

1) In dem Buch, das Sie verwenden, bin ich sicher, dass jedes Beispiel als ein Paar von Programmen angegeben wird: ein Client und ein Server. Um den Betrieb des Client-Programms zu testen, muss man auch das Server-Programm ausführen (vielleicht in einem anderen Befehlsfenster). Es scheint von Ihrer Frage aus, dass Sie Ihr Client-Programm ohne den Vorteil eines Server-Programms ausführen möchten. Durch Hinzufügen von '.bind()' kann sich Ihr Programm gleichzeitig sowohl als Client als auch als Server verhalten. 2) Ich habe nur die Port-Nummer für meine Bequemlichkeit geändert. Es sollte genauso gut mit '80' funktionieren. –

+0

Nun, ich schätze die Hilfe. –