linux - listening - ubuntu check open ports
Conexión TCP, solo bash (2)
Encontré esta línea en un guión. Si bien entiendo globalmente lo que hace (abrir una conexión TCP bidireccional), necesito algunas explicaciones sobre la sintaxis. Aquí está la línea:
exec 5<>"/dev/tcp/${SERVER}/${PORT}"
Y mis preguntas:
-
<
y>
generalmente se usan para redirigir los IO. ¿Qué significa eso? ¿Es utilizable en otro contexto? ¿Cómo? - ¿Por qué funciona, mientras que
/dev/tcp
no existe? - ¿Por qué 5? ¿Puede ser otro número? ¿Cuáles son los valores permitidos?
- ¿Por qué es necesario el
exec
? (dado que nada es realmente ejecutado )
Gracias.
<y> generalmente se usan para redirigir los IO. ¿Qué significa eso? ¿Es utilizable en otro contexto? ¿Cómo?
Es lo mismo: la entrada y la salida se redirigen a fd 5.
¿Por qué funciona, mientras que / dev / tcp no existe?
Es un archivo especial: si el host es un nombre de host o una dirección de Internet válidos, y el puerto es un número de puerto entero o un nombre de servicio, bash intenta abrir una conexión TCP al zócalo correspondiente.
¿Por qué 5? ¿Puede ser otro número? ¿Cuáles son los valores permitidos?
Sí, puede tener algún valor, pero debe asegurarse de no utilizar un fd ya en uso.
¿Por qué es necesario el ejecutivo? (dado que nada es realmente ejecutado)
exec significa que la redirección ocurre en el shell actual, no dentro de una subshell.
Solo puedo responder por la parte ejecutiva:
El ejecutor sin un comando dado se puede usar para cambiar las redirecciones de E / S. <> en este caso significa abierto para lectura + escritura. 5 es el número de canal (o el descriptor de archivo). Esto tiene sentido si otros comandos envían su salida / leen su entrada del canal 5.
Para "/ dev / tcp / $ {SERVER} / $ {PORT}" no sé si es una característica de una versión de Linux específica o si es una característica de bash (supongo que la última).
- EDIT: desde la página del manual bash: -
Bash handles several filenames specially when they are used
in redirections, as described in the following table:
/dev/fd/fd
If fd is a valid integer, file descriptor fd is
duplicated.
/dev/stdin
File descriptor 0 is duplicated.
/dev/stdout
File descriptor 1 is duplicated.
/dev/stderr
File descriptor 2 is duplicated.
/dev/tcp/host/port
If host is a valid hostname or Internet address,
and port is an integer port number or service
name, bash attempts to open a TCP connection to
the corresponding socket.
/dev/udp/host/port
If host is a valid hostname or Internet address,
and port is an integer port number or service
name, bash attempts to open a UDP connection to
the corresponding socket.