ich habe ein kleines Projekt bei dem ich wortwörtlich fest stecke und nicht mehr weiter weiß,
vielleicht kann mir einer von Euch weiter helfen.
Also Kurzfassung:
Ich möchte an einem entfernten System Wartungsarbeiten durchführen können mit einer Software,
die auf Port 5555 UDP sendet/empfängt.
Ich habe einen SSH Tunnel aufgebaut und entsprechend konfiguriert - funktioniert auch bestens.
Nun kann ich ich ja kein UDP-Verkehr direkt per SSH übertragen - auf der Gegenseite, ein Linux
System erledige ich die Konvertierung per socat.
Für meinen Windows Rechner wollte ich mir ein kleines Python Script schreiben und habe mich einem
CODE snippet aus dem Netz bedient - siehe unten.
Das Script empfängt also brav auf UDP Port 5555 und leitet es an TCP 5555 (dem Tunnel) weiter -
kommt an der Gegenseite an, Antwort wird zurück geschickt und vom Script wieder in ein
UDP Packet gepackt damit die Software die ebenfalls auf dem Localhost Rechner läuft die
Daten wieder empfängt.
Leider lauscht das Script ja ebenfalls auf UDP 5555 auf Localhost und ich habe eine schöne
Datenschleife gebaut.
Irgendwie stehe ich da gerade auf dem Schlauch, mir fehlt da der Lösungsansatz.
Über Ideen wäre ich sehr dankbar....
Code: Alles auswählen
import socket, time
from threading import Thread
class Udp2Tcp (Thread):
def __init__ (self):
Thread.__init__(self)
self._port = 5555
self._dst = '127.0.0.1'
self._dst_port = 5555
self.daemon = True
self.start()
def _init(self):
self.udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.udp.bind(('127.0.0.1', self._port))
self.tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.tcp.connect((self._dst, self._dst_port))
self.tcp.setblocking(True)
def run(self):
self._init()
while True:
try:
data, address = self.udp.recvfrom(1024)
if len(data) > 0:
print("Received {0} bytes via udp from {1}".format(len(data), address))
self.tcp.sendall(data)
data2 = self.tcp.recv(1024)
if len(data2) > 0:
print("Received {0} bytes via tcp".format(len(data2)))
print(data)
self.udp.sendto(data2, (self._dst, self._port))
#self.udp.sendall(data, (self._dst, self._port))
except Exception as e:
print(e)
self._deinit()
def _deinit(self):
self.tcp.shutdown(socket.SHUT_RDWR)
self.udp.shutdown(socket.SHUT_RDWR)
if __name__ == '__main__':
print ("Opening gateway ...")
v = Udp2Tcp()
time.sleep(120)
print ("Closing gateway ...")