GNU/Linux >> Tutoriales Linux >  >> Linux

Examen de varios puertos al ejecutar NetCat (nc)

estoy usando -w 1 a continuación para limitar los tiempos de espera a 1 segundo. También uso -v por las razones mencionadas en los comentarios. Usé -n para rechazar los retrasos en las búsquedas DNS inversas...

[[email protected] ~]$ for i in $(echo "172.16.1.1,172.16.1.5"|tr "," "\n"); do echo -e "22\n80\n443\n8080" | xargs -i nc -w 1 -zvn $i {}; done
(UNKNOWN) [172.16.1.1] 22 (ssh) open
(UNKNOWN) [172.16.1.1] 80 (www) : Connection timed out
(UNKNOWN) [172.16.1.1] 443 (https) open
(UNKNOWN) [172.16.1.1] 8080 (http-alt) : Connection timed out
(UNKNOWN) [172.16.1.5] 22 (ssh) open
(UNKNOWN) [172.16.1.5] 80 (www) open
(UNKNOWN) [172.16.1.5] 443 (https) open
(UNKNOWN) [172.16.1.5] 8080 (http-alt) : Connection refused
[[email protected] ~]$

Si te gusta GNU Parallel tanto como a mí, prueba esto:

parallel nc -vz host ::: 22 80 443 8080

Salida de muestra:

Connection to foo.example.com 22 port [tcp/ssh] succeeded!
nc: connect to foo.example.com port 80 (tcp) failed: Connection refused
nc: connect to foo.example.com port 443 (tcp) failed: Connection refused
nc: connect to foo.example.com port 8080 (tcp) failed: Connection refused

Este método también es más rápido en algunos casos, ya que prueba la conexión a puertos en paralelo, no en serie. Específicamente, aquí sería donde el host remoto (o el cortafuegos que interviene) descarta sus paquetes para permanecer ocultos (a diferencia de una conexión exitosa o un rechazo forzoso).

Consejo: en la mayoría de las distribuciones de Linux, puede instalar parallel de su administrador de paquetes.

Actualización: Con parallel , esto se generaliza muy bien para cubrir un caso a menudo necesario de múltiples hosts x múltiples puertos. El siguiente ejemplo usa parallel para iterar sobre el producto cruzado, por lo que no necesita escribir ningún bucle anidado.

parallel nc -vz ::: host1 host2 host3 ::: 22 80 443 8080

Salida:

Connection to host1 22 port [tcp/ssh] succeeded!
Connection to host1 80 port [tcp/http] succeeded!
Connection to host1 443 port [tcp/https] succeeded!
nc: connect to host1 port 8080 (tcp) failed: Connection refused
Connection to host2 22 port [tcp/ssh] succeeded!
nc: connect to host2 port 80 (tcp) failed: Connection refused
nc: connect to host2 port 443 (tcp) failed: Connection refused
nc: connect to host2 port 8080 (tcp) failed: Connection refused
Connection to host3 22 port [tcp/ssh] succeeded!
nc: connect to host3 port 80 (tcp) failed: Connection refused
nc: connect to host3 port 8080 (tcp) failed: Connection refused
nc: connect to host3 port 443 (tcp) failed: Connection refused

Al igual que el ejemplo anterior, parallel ejecuta las pruebas de conexión en paralelo. Tenga en cuenta que el paralelismo predeterminado es cuántos subprocesos tiene su sistema, pero puede anularse fácilmente con el -j cambiar a cualquier valor. Podrías salirte con la tuya fácilmente con parallel -j 50 ... o incluso más, ya que probar los sockets no es una tarea intensiva de la CPU.


Linux
  1. 14 puertos de red comunes que debe conocer

  2. .bash_profile no se obtiene cuando se ejecuta Su?

  3. Prueba de servicios de red con Netcat

  4. Cómo agregar o eliminar puertos cuando firewalld está deshabilitado

  5. Verifique qué puertos y procesos se están ejecutando en Ubuntu

Cómo hacer un escaneo de puertos en Linux

Cómo usar Netcat para escanear puertos abiertos en Linux

Abrir un puerto en Linux

REJECT vs DROP al usar iptables

Ejecutando múltiples subprocesos scp simultáneamente

Comportamiento extraño del historial de bash cuando se ejecutan varias sesiones