Destination IP von Port?
Moin, hab durch meine Langeweile nach neuen Projekten gesucht und bin darauf gestoßen ein Programm zu schreiben welches mir die Destination IP durch das scannen eines ports gibt. Hab es erst als mit einer TCP Verbindung versucht damit hat alles geklappt dann wollte ich es mit einer UDP Verbindung testen und natürlich musste ich dafür einen neuen Code schreiben allerdings klappt das ganze nicht so wie ich es mir vorstellt und komme nicht drauf wie ich es anders machen könnte. Ich hab das ganze an einem CS2 server versucht und hab mich mit einem Public server verbunden, in Wireshark wird mir das ganz normal angezeigt in meinem Programm wird mir leider trotzdem nichts angezeigt :/Keine Ahnung ob ich einen Denkfehler habe oder komplett falsch an die sache rangegangen bin. Gerne Vorschläge + Danke im Voraus :) Hier mein Code:
import socket
def check_port(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
host = socket.gethostbyname(socket.gethostname())
sock.bind((host, port))
print(f"Port {port} ist offen und bereit.")
print(f"Checking {host}:{port}")
while True:
data, addr = sock.recvfrom(1024)
print(f"Empfangene Daten von {addr[0]}:{addr[1]}: {data}")
except OSError as e:
print(f"OS Error{port}: {e}")
finally:
sock.close()
if __name__ == "__main__":
port = 27015
check_port(port)
Was verstehst du unter der "Destination IP" in diesem Zusammenhang? Ich habe ehrlich keine Ahnung, was du hier erreichen willst. Source und Destination sind hier ja klar.
naja in dem fall wollte ich die server ip von dem csgo server auf dem ich bin
2 Antworten
Nur grundlegend als Denkfutter: UDP ist kein VC, es versendet einzelne Datagramme, auch ohne Zusicherung der Reihenfolge.
P.S.: Was Dein Code macht: Er bindet an einen lokalen Port und Du erhoffst Dir, daß vielleicht mal ein UDP-Datagramm an genau diesen Port gesendet wird.
Von zusätzlichen Erschwernissen wie NAT haben wir da noch nciht gesprochen.
Bei NAT ergibt sich die Problematik, daß unsolicited Datagramme nie den Rechner erreichen werden.
In Szenarien in denen ich initial einen Kommunikation beginne ist die Übung ohnehin sinnlos, da ich die Informationen über die Gegenseite bereits besitze.
Ja, aber nein.
Ja, bei Endgeraeten. Das haette ich in meiner Aussage inkludieren koennen; da aber in der Ausgangsfrage von einem CS "Server" die Rede war, war das bei mir im Kopf ausgeklammert.
Ansonsten blocken IaaS Provider/Hoster unsolicited UDP Traffic nicht (mehr) einfach weg. Unabhaengig ob L3/L4 direkt an die Instanz gehen oder an einem Gateway oder im SDN durch ein NAT laufen.
Soweit so klar. Ich stelle mir ohnehin die Frage, was Dest IP+Port ermitteln eigentlich meinen soll.
Das gezeigte Script ist ja nichts anderes als ein Annehmen von UDP-Datagrammen, die auf einem Port reinkommen, bzw. IP+PORT.
Nur die Quell-Adresse und der Quell-Port spezifizieren bei UDP ja gerade nicht, daß ich an diese Paar zurücksende. Von daher hätte ich gerne die TCP-Variante gesehen, um nachzuvollziehen, was eigentlich der Sinn der Übung sein soll.
Was der Sinn ist, muesste der/die Fragestellende mal raushauen :D
Der Port ist so ein Standard Steam Port, vllt. will man auch nur sehen welche Clients da beim eigenen Server anklopfen. Der Port bringt einem halt gor nix, ausser man debugged eben sein eigenes Zeug.
Du meinst ähnliches eines Honeypot, um statistische Daten zu sammeln? Hmmm.
Naja so einen richtigen Sinn hat das Programm nicht, ich probiere mich einfach gerne an neuen Projekten/Herausforderungen aber das Programm sollte mir die IP-Adresse des Servers geben, wenn man das als Sinn sehen möchte
Ja stimmt die Datagramme werden in dem Falls als Paket betrachtet aber die Zusicherung und Reihenfolge ist mir ja auch egal und ich weiß ja das die Verbindung über den Port geht ich verbinde mich ja auch über den Port mit dem Server
Sorry falls ich hier etwas falsch sehe bin noch relativ neu in der IT
ja schon aber wie könnte ich es sonst lösen?
Schauen wir uns doch mal an, was Du machst:
sock.bind((host, port))
Socket an Port 27015 binden.
data, addr = sock.recvfrom(1024)
Datagramm empfange
print(f"Empfangene Daten von {addr[0]}:{addr[1]}: {data}")
SRC IP udn SRC Port des Datagramms ausgeben.
Und genau das macht das Script auch:
# python dummy.py
Port 27015 ist offen und bereit.
Checking 127.0.0.1:27015
Empfangene Daten von 127.0.0.1:42770: b'\n'
Voraussetzung ist natürlich, daß auch mal ein Datagramm empfangen wird.
Du testest moeglicherweise falsch. Dein Script funktioniert, du musst aber auch clientseitig auf UDP umstellen. Wenn du z.B. mit nc testet, nimm den -u Schalter.
Der Umstand dass UDP verbindungslos ist hat erstmal nichts damit zu tun, dass man da nicht auch Traffic hinschicken kann und vom Script entsprechenden Output bekommt.
NAT passiert auf einem anderen Layer, es ist fuer das Script und ein Testing egal, ob dein Client mal irgendwo zwischen drin NATed wurde oder nicht.