sintaxis resultados puertos ejemplos comandos comando abiertos linux unix networking sockets tcp

linux - puertos - resultados de netstat



Redirigir el tráfico TCP a un socket de dominio UNIX bajo Linux (5)

Debería poder enlazar a TCP 1234, obtener un socket fd para / tmp / foo y usar la llamada de selección para ''escuchar'' los datos tanto en 1234 como en / tmp / foo. Cualquier información escrita en 1234, usted reescribe a / tmp / foo y viceversa.

Ahora actúa como un proxy y transfiere datos hacia adelante y hacia atrás.

Y aquí hay una página web que podría ayudar: http://osr507doc.sco.com/en/netguide/dusockC.io_multiplexing.html

Supongamos que una aplicación Linux heredada escucha en un socket de dominio UNIX /tmp/foo .

Además de comunicarme con esta aplicación heredada sobre el mecanismo de socket de dominio UNIX, deseo poder conectarme a ella a través de una conexión TCP en el puerto, por ejemplo, 1234.

¿Cuál es la forma más fácil de vincularse al puerto TCP 1234 y luego redirigir todas las conexiones entrantes al socket de dominio UNIX /tmp/foo ?


En adiciones a la answer de @knorv: con xinetd puede funcionar como un daemon

# cat /etc/xined.d/mysrv service mysrv { disable = no type = UNLISTED socket_type = stream protocol = tcp wait = no server = /usr/bin/socat server_args = STDIN UNIX-CLIENT:/tmp/mysocket.sock bind = 127.0.0.1 port = 1234 }


Mas facil? Probablemente Netcat (aka nc ):

nc -l 1234 | nc -U /tmp/foo

El primer comando escucha en el puerto 1234 las conexiones entrantes y canaliza los datos resultantes al segundo comando. El segundo se conecta al socket de dominio Unix /tmp/foo y escribe su entrada en ese socket. Tenga en cuenta que esto solo aceptará una única conexión y saldrá tan pronto como se desconecte. Si desea seguir escuchando para obtener más conexiones, use la opción -k :

nc -lk 1234 | nc -U /tmp/foo

Puede probar que esto está funcionando configurando un receptor para ese socket en un terminal:

nc -lUk /tmp/foo

Y escribiéndole en otro:

nc localhost 1234

socat , como recomienda knorv , es más capaz, pero más complicado de usar.



Resulta que se puede usar socat para lograr esto:

socat TCP-LISTEN:1234,reuseaddr,fork UNIX-CLIENT:/tmp/foo

Y con un poco de seguridad adicional:

socat TCP-LISTEN:1234,bind=127.0.0.1,reuseaddr,fork,su=nobody,range=127.0.0.0/8 UNIX-CLIENT:/tmp/foo

Estos ejemplos han sido probados y funcionan como se esperaba.