web-dev-qa-db-fra.com

Simple Socket Server dans Bash?

Y at-il un moyen de lier rapidement à une TCP adresse port/ip et simplement imprimer toutes les informations à STDOUT? J'ai une solution de débogage simple qui écrit des choses à 127.0.0.1:4444 et je ' J'aimerais pouvoir simplement lier un port de bash et imprimer tout ce qui se présente. Existe-t-il un moyen simple de le faire?

70
Naftuli Kay
$ nc -k -l 4444 > filename.out

voir nc(1)

105
Nikolai Fetissov

Juste parce que vous avez demandé comment le faire dans bash, bien que netcat answer soit très valide:

  $ exec 3<>/dev/tcp/127.0.0.1/4444
  $ cat <&3
46
Diego Torres Milano

Cela fonctionne comme vous l'attendez:

 nc -k -l 4444 |bash

et puis vous

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

alors vous voyez la liste effectuée par bash.

[Un bref avertissement de sécurité]
Bien sûr, si vous laissez une chose comme celle-ci s'exécuter sur votre ordinateur, vous disposez d'une passerelle largement ouverte pour toutes sortes d'attaques car les commandes peuvent être envoyées à partir de n'importe quel compte utilisateur sur n'importe quel hôte de votre réseau. Cela n'implique aucune sécurité (authentification, identification) et envoie toutes les commandes transmises non chiffrées sur le réseau, de sorte qu'il est très facile d'en abuser.

10
luk

Ajouter une réponse en utilisant ncat à laquelle @Freedom_Ben a fait allusion:

ncat -k -l 127.0.0.1 4444

et explication des options de man ncat:

-k, --keep-open            Accept multiple connections in listen mode
-l, --listen               Bind and listen for incoming connections
4
Kilokahn