2014-06-13 9 views
9

ha una domanda veloce.timeout netcat non funziona?

Perché il comando netcat seguente non scade se il tentativo di connessione richiede più di 3 secondi (ad esempio: quando la porta non è aperta)? Supponevo che la bandiera -w fosse ciò di cui avevo bisogno. Il sistema operativo è OSX 10.9.

nc -v -z -w 3 127.0.0.1 5050

Supponendo che ha funzionato, ho pensato di implementare come questo (incerto se questo funzionerà, niubbo totale bash)

nc -v -z -w 3 127.0.0.1 5050 | /dev/null && echo "Online" || echo "Offline"

Applausi per qualsiasi aiuto!

+0

Quando provo, ottengo immediatamente una risposta di errore perché la porta non è aperta. Sei sicuro che non sia aperto sul tuo host? Se lo è, ecco perché non sta scadendo, perché è effettivamente connesso. – CDahn

+0

Stranamente, sembra che stia accadendo solo su una porta specifica ... Stavo cercando di usarlo per monitorare se un servizio specifico è in esecuzione sulla mia macchina da una posizione o rete remota. Quel servizio non è attualmente in esecuzione, ma il netcat non sembra scadere, il processo si blocca. qualche idea? – anditpainsme

+0

Stai utilizzando qualche tipo di firewall? Cosa ti mostra "iptables -L"? – CDahn

risposta

15

È necessario reindirizzare a/dev/null, non collegarlo a esso. Provare quanto segue:

nc -v -z -w 3 127.0.0.1 5050 &> /dev/null && echo "Online" || echo "Offline" 

Sulla mia macchina, la porta 5050 non è aperta, e ottengo il seguente:

$ nc -v -z -w 3 localhost 5050 &> /dev/null && echo "Online" || echo "Offline" 
Offline 
+1

Grazie per quello! Per curiosità, perché è il & necessario quando si reindirizza? – anditpainsme

+1

nc scarica l'output dettagliato su stderr, quindi se vuoi solo vedere "Online" e "Offline", devi usare &> per dire a bash di reindirizzare sia stdout che stderr a/dev/null. Se ti sbarazzi del -v, puoi solo dire nc -z -w 3 localhost 5050 && echo "Online" || echo "Offline" – CDahn

+0

Fantastico, buono a sapersi. Grazie. – anditpainsme

3

C'è un vecchio bug report su questo su debian (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=97583) e ancora avendo lo stesso comportamento in Debian GNU/Linux 7.7 (wheezy)

ho trovato una "soluzione" a questa: installare la versione OpenBSD di NC:

apt-get install netcat-openbsd