Es gibt also mehrere Dinge, die netcat genannt werden; Ubuntu hat sogar /etc/alternatives symbolic-link-hackery dafür.
Ich denke, ein Teil Ihres Problems ist, dass UDP keine Sitzungen durchführt. Ich habe einen Teil der Datei /usr/share/doc/netcat-traditional/README.gz unten kopiert, was ziemlich gut erklärt.
UDP-Verbindungen werden anstelle von TCP geöffnet, wenn -u angegeben ist. Dies sind eigentlich keine "Verbindungen", da UDP ein verbindungsloses Protokoll ist, obwohl netcat intern den "connected UDPsocket"-Mechanismus verwendet, den die meisten Kernel unterstützen. Obwohl netcat behauptet, dass eine ausgehende UDP-Verbindung sofort „offen“ ist, werden keine Daten gesendet, bis etwas von der Standardeingabe gelesen wird. Die meisten UDP-Protokolle verwenden Zeitüberschreitungen und Wiederholungsversuche, um ihr Ding zu erledigen, und in vielen Fällen werden sie sich nicht die Mühe machen, überhaupt zu antworten, also sollten Sie eine Zeitüberschreitung angeben und auf das Beste hoffen. Sie werden mehr aus UDP-Verbindungen herausholen, wenn die Standardeingabe aus einer Datenquelle gespeist wird, die wie verschiedene Arten von Serveranfragen aussieht.
OK, vielleicht ist das keine so gute Erklärung, aber ich konnte es finden.
Wenn Sie es noch nicht getan haben, möchten Sie vielleicht mit allen Netcat-Optionen experimentieren, die Sie finden können und die mit Warten zu tun haben ... haben Sie damit experimentiert:
-
Verwenden Sie sowohl -l als auch -u, um sicherzustellen, dass Sie sich im "lauschenden" Modus befinden
-
-vv, um genau zu sehen, was passiert
-
-q -1 ...was "ewig warten" sollte, selbst nachdem es EOF empfangen hat (hoffentlich wieder zuhören?)
Sie können socat
verwenden dafür. Es hat eine sehr schöne Option fork
:
fork
Verwaltet nach dem Herstellen einer Verbindung seinen Kanal in einem untergeordneten Prozess und hält den übergeordneten Prozess bei dem Versuch, weitere Verbindungen herzustellen, entweder durch Zuhören oder durch Verbinden in einer Schleife (Beispiel).
Client (ja, das führen Sie vom Client aus):
$ ssh -L 7753:localhost:7753 YourServer.com "/usr/bin/socat tcp4-listen:7753,reuseaddr,fork UDP:8.8.8.8:53"
Kunde:
$ sudo socat udp4-listen:53,reuseaddr,fork tcp:localhost:7753
$ dig @127.0.0.1 google.com