Redirigeant le trafic TCP à un socket de domaine UNIX sous Linux
Assumer un héritage application Linux à l'écoute sur une socket de domaine UNIX /tmp/foo
.
En plus de communiquer avec cet héritage de l'application sur le socket de domaine UNIX mécanisme, je veux être capable de se connecter via TCP-connexion sur le port de dire 1234.
Quel est le moyen le plus facile de se lier à TCP sur le port 1234, et ensuite rediriger toutes les connexions entrantes à la socket de domaine UNIX /tmp/foo
?
Vous devez vous connecter pour publier un commentaire.
S'avère socat peuvent être utilisés à cet effet:
Et avec un peu de sécurité supplémentaire:
Ces exemples ont été testés et fonctionnent comme prévu.
stunnel
autour de plusieurs couches de complexité!su=nobody
partie-H tcp://127.0.0.1:4321
(notez qu'il permet d'accéder au menu fixe démon pour quelqu'un qui peut ouvrir une connexion à127.0.0.1
. Pas uid/gid de chèques ou de quoi que ce soit, mais c'est également vrai pour lenetcat
/socat
approche)su=nobody
.Plus facile? Probablement Netcat (aka
nc
):La première commande à l'écoute sur le port 1234 pour les connexions entrantes, et les tuyaux les données obtenues à la deuxième commande. Le second relie à la socket de domaine Unix
/tmp/foo
, et écrit son entrée au socket. Notez que ce n'accepte qu'une seule connexion, et la sortie dès que la connexion est abandonnée. Si vous souhaitez rester à l'écoute pour plus de connexions, utilisez le-k
option:Vous pouvez tester que cela fonctionne par la mise en place d'un écouteur pour que prise dans un terminal:
Et de l'écriture dans un autre:
socat, comme recommandé par knorv, est plus capable, mais plus compliqué à utiliser.
nc -U
option? Je n'ai pas de Quantique de la machine de test, mais sur la Précision desnc
a la-U
option, et ce que j'ai dit dans mon commentaire fonctionne très bien. Avez-vous essayé exactement ce que j'ai écrit? Si vous n'êtes pas de trouver quenc
fonctionne pour vous, je vous recommande d'essayersocat
; il peut faire beaucoup plus denc
, avec beaucoup plus fine de contrôle de la façon dont cela fonctionne, mais il est un peu plus compliqué à comprendre comment l'utiliser.nc -l 1234 | nc -U /tmp/foo
donnenc: invalid option -- 'U'
etnc -h for help
.socat
fonctionne très bien 🙂netcat-traditional
etnetcat-openbsd
.netcat-openbsd
est celui que j'ai installé, et semble avoir plus de fonctionnalités quenetcat-traditional
. Vous pouvez installer les deux à la fois, avecnc
etnetcat
liés à l'un ou l'autre.socat
qui transmettra la réponse à revenir vers nous.Vous devriez être capable de se lier à TCP 1234, obtenez une prise fd pour /tmp/foo et sélectionnez appel à "écouter" pour les données sur les deux 1234, et /tmp/foo. Toutes les données écrites à 1234, vous réécrivez /tmp/foo et vice-versa.
Vous maintenant agir comme un proxy et le transfert de données d'avant en arrière.
Et voici une page web qui pourraient vous aider: http://osr507doc.sco.com/en/netguide/dusockC.io_multiplexing.html
Dans additons à @knorv de réponse: avec
xinetd
il peut fonctionner comme un démonPas essayé mais il semble que 'lighttpd' peut le faire pour vous:
http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModProxyCore