UDP Broadcast
Verfasst: Dienstag 31. Oktober 2017, 16:53
Hallo Leute,
ich würde gerne mit Hilfe eines UDP Broadcast die Adressen aller Geräte in einem Netzwerk herausfinden.
Als Beispiel: Ich sende eine Nachricht, z.B. "Ping" an jedes Gerät im Netzwerk und ich will dann, dass diese Geräte mir mit ihrer IP-Adresse antworten.
Durch einige Tutorials und Guides bin ich jetzt soweit gekommen:
Wenn ich den Code ausführe mit s.sendto('Ping'.encode('utf-8'), ("255.255.255.255", port)) bekomme ich nur die IP meines Routers zurück, wenn ich statt der 255.255.255.255 Adresse, die von meinem Router verwende, also 192.168.173.255, dann bekomme ich nur die IP meines Rechners zurück.
Die Frage die ich mir jetzt stelle ist ob der Code richtig ist und das Problem eher an meinem Router und den Freigaben liegt oder ob der Code falsch ist.
Danke schonmal im Voraus :=)
ich würde gerne mit Hilfe eines UDP Broadcast die Adressen aller Geräte in einem Netzwerk herausfinden.
Als Beispiel: Ich sende eine Nachricht, z.B. "Ping" an jedes Gerät im Netzwerk und ich will dann, dass diese Geräte mir mit ihrer IP-Adresse antworten.
Durch einige Tutorials und Guides bin ich jetzt soweit gekommen:
Code: Alles auswählen
from socket import *
import time
import threading
port = 5002
class PingerThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
print('start thread')
s = socket(AF_INET, SOCK_DGRAM)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
time.sleep(0.1)
s.sendto('Ping'.encode('utf-8'), ("255.255.255.255", port))
a = PingerThread()
a.start()
try:
s = socket(AF_INET, SOCK_DGRAM)
s.bind(('', port)
except:
print('failed to bind')
s.close()
raise
s.blocking(0)
data = s.recvfrom(1024)
print(data)
s.close()
if __name__ == "__main__":
PingerThread().run()
Die Frage die ich mir jetzt stelle ist ob der Code richtig ist und das Problem eher an meinem Router und den Freigaben liegt oder ob der Code falsch ist.
Danke schonmal im Voraus :=)