DatagramTunneler
Einfaches plattformübergreifendes Client/Server-Programm, das UDP-Datagramme über eine TCP-Verbindung (auch Tunnel genannt) weiterleitet. Der Client schließt sich einer Multicast-Gruppe an und leitet die empfangenen Datagramme an den Server weiter, der sie wiederum per Multicast in sein eigenes Subnetz sendet.
- Entworfen mit Blick auf Einfachheit
- Getestet unter OSX 10.13.3 , Ubuntu 16.04 und Centos 7.4
- NICHT Windows-kompatibel
Inhalt
Anforderungen
Installation
Zusammenfassung
Beispiele
Wie funktioniert es?
Das DTEP-Protokoll
Lizenzierung
Anforderungen
- Ein Computer, auf dem eine Linux- oder Mac OS-Distribution ausgeführt wird
- Ein C++-Compiler
Installation in 10 Sekunden
- Laden Sie das Repository herunter oder klonen Sie es.
- Gehen Sie in das Repository:
cd <path_to_the_repo>/DatagramTunneler
- Erstellen Sie den DatagramTunneler, indem Sie einfach make ausführen:
- Sie sind bereit, die DatagramTunneler-Binärdatei auszuführen:
./bin/DatagramTunneler -h
Weitere Informationen zur Ausführung finden Sie in der folgenden Zusammenfassung
Zusammenfassung
Um den DatagramTunneler nutzen zu können, müssen Sie zuerst die Serverseite und dann die Clientseite starten. Wenn Sie dies nicht tun, kann der Client einfach keine Verbindung zum Server herstellen und wird sofort beendet.
Server
dgramtunneler --server -i <udp_iface_ip> -t <tcp_listen_port> [-u <udp_dst_ip>:<port>]
- <udp_iface_ip> : Schnittstelle zur Veröffentlichung der weitergeleiteten Datagramme
- <tcp_listen_port> : TCP-Port, der zum Abhören von Clientverbindungen verwendet wird
- <udp_dst_ip>:<port> : (optional) UDP-Ziel-IP und Port, an dem der Server die weitergeleiteten Datagramme veröffentlicht. Wenn nicht angegeben, werden Datagramme auf demselben Kanal veröffentlicht, dem der Client beigetreten ist.
Kunde
dgramtunneler --client -i <udp_iface_ip> -t <tcp_srv_ip>:<tcp_srv_port> -u <udp_dst_ip>:<port>
- <udp_iface_ip> : Schnittstelle, die zum Beitritt zum von -u bereitgestellten Multicast-Kanal verwendet wird
- <tcp_srv_ip>:<port> : IP und Port des Servers, an den das Datagramm weitergeleitet wird
- <udp_dst_ip> : <port> : UDP-Ziel-IP und Port des Kanals, dem wir beitreten möchten
Beispiele
(Vergessen Sie nicht, einen kleinen Stern zu vergeben, wenn dieses Tool für Sie nützlich ist :]) Serverseite:
./bin/datagramtunneler --server -i 192.168.0.104 -u 228.14.28.52:1234 -t 28052
Kundenseite:
./bin/datagramtunneler --client -i 192.168.0.105 -u 228.1.2.3:7437 -t 192.168.0.104:28052
Wie funktioniert es?
Der Zweck des DatagramTunneler besteht darin, Multicast-Daten von einem Subnetz A in ein anderes Subnetz B zu übertragen, wo dieser Multicast-Kanal nicht verfügbar ist. Um dies zu erreichen, ist der DatagramTunneler in zwei Seiten aufgeteilt: eine Client-Seite und eine Server-Seite, wie im Diagramm unten dargestellt:
Die Client-Seite
Die Clientseite sollte in dem Subnetz ausgeführt werden, in dem der Multicast-Kanal beitreten kann. Sobald es gestartet ist, wird es Folgendes tun:
- Verbindung zum DatagramListener Server (TCP) herstellen
- Dem Multicast-Kanal beitreten (UDP)
- Leiten Sie alle empfangenen Datagramme über die hergestellte TCP-Verbindung an den Server weiter. Datagramme werden über TCP mithilfe des Datagram Tunneler Encapsulation Protocol (oder DTEP) übertragen.
Die Serverseite
Die Serverseite sollte in dem Subnetz laufen, in dem der Multicast nicht verfügbar ist. Sobald es gestartet ist, wird es Folgendes tun:
- Warten Sie auf eine Client-Verbindung (beachten Sie, dass während der gesamten Lebensdauer der Server-/Client-Instanzen nur eine Verbindung akzeptiert wird. Sobald die Verbindung zum Tunnel getrennt wird, werden beide Enden beendet.
- Sobald eine Verbindung mit einem Client hergestellt ist, werden alle vom Client gesendeten Datagramme auf einem Multicast-Kanal veröffentlicht. Bei diesem Kanal kann es sich um einen beliebigen Kanal handeln, der beim Starten des Servers angegeben wurde. Wenn er nicht angegeben ist, verwendet er denselben Multicast-Kanal, der mit dem empfangenen Datagramm codiert ist (vgl. DTEP).
Das Datagram Tunneler Encapsulation Protocol (DTEP)
Das Datagram Tunneler Protocol oder DTEP ist ein einfaches Binärprotokoll, das im folgenden Diagramm beschrieben wird:
Ein DTEP-Paket verfügt über einen 1-Byte-Header, der die Art der darin enthaltenen Nutzdaten angibt.
Pakettyp 0x00 = HEARTBEAT
Dieser Pakettyp hat keine Nutzlast. Es wird vom Client an den Server gesendet und stellt sicher, dass beide Enden der Verbindung wissen, ob das andere Ende aktiv ist.
Pakettyp 0x01 = DATAGRAMM
Dieses Paket kapselt das vom Client beobachtete Datagramm. Hier ist die vollständige Beschreibung:
Obwohl dieses Diagramm selbsterklärend sein sollte, finden Sie hier eine Aufschlüsselung aller Felder:
- Datagrammlänge : Anzahl der Bytes des gekapselten Datagramms (die Länge des DTEP-Headers ist NICHT enthalten)
- UDP-Kanaladresse : Zieladresse der Multicast-Gruppe, der der Client beigetreten ist, um dieses Datagramm zu empfangen
- UDP-Kanal-Port : Zielport der Multicast-Gruppe, der der Client beigetreten ist, um dieses Datagramm zu empfangen
- Gekapseltes UDP-Datagramm : tatsächliches Datagramm, das der Client vom Multicast-Kanal empfängt
Lizenzierung
Siehe LIZENZ