Einfacher Socket Server in Bash?

76

Gibt es eine Möglichkeit, schnell eine Verbindung zu einem TCP-Port / einer IP-Adresse herzustellen und einfach alle Informationen an STDOUT auszudrucken? Ich habe eine einfache Debugging-Lösung, die Dinge in 127.0.0.1:4444 schreibt, und ich möchte in der Lage sein, einfach einen Port von Bash zu binden und alles zu drucken, was auftaucht. Gibt es eine einfache Möglichkeit, dies zu tun?

Naftuli Kay
quelle
verwandte unix.stackexchange.com/questions/49936/…
Ciro Santilli 法轮功 冠状 病 六四 事件 2

Antworten:

117
$ nc -k -l 4444 > filename.out

sehen nc(1)

Nikolai Fetissov
quelle
3
Gibt es eine Möglichkeit, die es nicht erfordert, dass sie in einer Schleife ausgeführt wird, dh bis zum Tod binden? Ich verbinde und trenne wiederholt die Steckdose und ncsterbe, wenn ich sie nicht so laufen lasse : while true; do nc -l 4444; done.
Naftuli Kay
In einigen Distributionen müssen Sie es in 'nc -k -l -p 4444' ändern.
Rostislav Matl
1
Wenn Sie ncat anstelle von nc verwenden, können Sie mehrere Verbindungen gleichzeitig haben, während Sie genau dieselbe Syntax verwenden.
Sietse van der Molen
2
Ja, verwenden Sie ncatanstelle von nc(es wird mitgeliefert nmapund es ist eine moderne Inkarnation von nc)
Freedom_Ben
51

Nur weil Sie gefragt haben, wie es geht bash, obwohl die netcatAntwort sehr gültig ist:

  $ exec 3<>/dev/tcp/127.0.0.1/4444
  $ cat <&3
Diego Torres Milano
quelle
13
Aber das funktioniert nicht zum Zuhören. Ich denke nicht, dass es möglich ist, mit strengem Bash zuzuhören
Vijayender
8
Diese Lösung erfordert in der Tat einen Listening-Server. Bash kann dies nicht tun, /dev/tcpwie in unix.stackexchange.com/a/49947/13746
xebeche
1
Hören? Dafür ist xinetd da! : D
Evi1M4chine
14

Das funktioniert wie erwartet:

 nc -k -l 4444 |bash

und dann du

echo "ls" >/dev/tcp/127.0.0.1/4444

dann sehen Sie die Auflistung von bash durchgeführt.

[Eine kurze Sicherheitswarnung]
Wenn Sie so etwas auf Ihrem Computer laufen lassen, haben Sie natürlich ein weit offenes Gateway für alle Arten von Angriffen, da Befehle von jedem Benutzerkonto auf jedem Host in Ihrem Netzwerk gesendet werden können. Dies implementiert keinerlei Sicherheit (Authentifizierung, Identifikation) und sendet alle übertragenen Befehle unverschlüsselt über das Netzwerk, sodass sie sehr leicht missbraucht werden können.

luk
quelle
Wenn Sie nicht haben /dev/tcp, können Sie laufen:echo "ls" | nc 127.0.0.1 4444
fzbd
1
@fzbd: Es gibt kein / dev / tcp. Dies ist eine spezielle Bash-Datei, daher lswird dies nicht
angezeigt
@MarcinFabrykowski Richtig, aber wenn Sie diese Befehle auf anderen Shells ausführen, ist kein Handler verfügbar. Es kann auch fehlschlagen, wenn Ihre Bash nicht mit kompiliert wurde --enable-net-redirections.
fzbd
5

Hinzufügen einer Antwort mit ncatdiesem @Freedom_Ben spielte an:

ncat -k -l 127.0.0.1 4444

und Erklärung der Optionen von man ncat:

-k, --keep-open            Accept multiple connections in listen mode
-l, --listen               Bind and listen for incoming connections
Kilokahn
quelle
ncatkommt mit nmapund unterstützt gleichzeitige Verbindungen, während der Legacy- ncBefehl dies nicht tut.
Serge Stroobandt