Sé que /dev/tcp/<host>/<port>
es un camino mágico manejado específicamente por algunos proyectiles en las redirecciones. Pero según man bash
:
Si el sistema operativo en el que se ejecuta bash proporciona estos archivos especiales, bash los usará; de lo contrario los emulará internamente [...]
En el cuadro de Linux que estoy usando en este momento, el /dev/tcp
archivo especial no está presente, por lo que Bash lo emulará . Pero, ¿existe realmente un sistema similar a Unix que proporcione el /dev/tcp
archivo especial con la misma semántica que el que admite Bash?
devices
tcp
character-special-files
Sylvain Leroux
fuente
fuente
/dev
es un tmpfs en los linux actuales, y estaba en la partición raíz en los más antiguos. Por eso es imposible actualmente. Podría hacerse posible fácilmente con una extensión sysfs o procfs (ambos fs son muy flexibles y similares (en realidad, probablemente nadie sabe por qué no son iguales)), nadie lo hace hoy, pero podría hacerse en alrededor de 100 líneas de código.Respuestas:
Creo que la documentación de Bash es algo engañosa sobre este tema. Mirando el código, incluso volviendo a la versión 2.04 donde se introdujeron las redirecciones de red,
/dev/tcp
y/dev/udp
funciona de la siguiente manera:configure
script verifica si se admiten varias funciones de red; si es así, si las redirecciones de red están habilitadas (que es el caso por defecto), el código de red interno está integrado;/dev/tcp
y/dev/udp
(en el formato correcto) se maneja internamente; de lo contrario, se genera una advertencia (“/ dev / (tcp | udp) / host / port no es compatible sin conexión en red”) y Bash intenta abrir la ruta dada en el sistema;Esto se reduce a:
/dev/tcp
y/dev/udp
siempre se manejarán internamente;/dev/(tcp|udp)/host/port
, se utilizará, de lo contrario con toda probabilidad la redirección fallará;/dev/(tcp|udp)/host/port
, se utilizará, de lo contrario, con toda probabilidad, la redirección fallará./dev/tcp
existe en algunos sistemas, pero que yo sepa, ninguno admite la misma abstracción que Bash. En Solaris,/dev/tcp
se usa con landd
herramienta para consultar y cambiar la configuración de red. En XTI (vea también Open Group si es miembro), lat_open
función se puede usar/dev/tcp
para abrir una conexión TCP, pero no usa la configuración basada en rutas, hay una estructura de datos separada para especificar el host de destino y puerto (y otros parámetros).fuente