我正在testing,如果主机上的特定端口是打开的。 我在用:
nc -z host 22 nc -z host 80 nc -z host 443 nc -z host 8080
哪个有效,但是使用如下的单行将会很好:
nc -z host 22 80 443 8080
这不起作用。
如果可能的话,我想避免端口范围nc -z host 22-8080 (如果可能的话),因为我希望检查的端口号有很大的差距。 此外,我不想扫描每个端口,并被视为扫描打开的端口。
在写一个bash循环的时候,我testing端口是否打开的选项是什么? 我有几十个主机,每个主机都有几个端口来检查。
我正在使用下面的-w 1来限制超时到1秒。 我也使用-v的原因在评论中提到。 我用-n拒绝反向DNS查询的延迟…
[mpenning@tsunami ~]$ 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 [mpenning@tsunami ~]$
Netcat并不是一个真正的扫描仪,因为评论显示nmap在这里是一个更好的select。 不使用端口范围选项我想你留在一个shell脚本包装;
for host in $(cat hostlist); do for port in $ports; do nc -z $host $port; done done
等等..
在Redhat 6中,你可以像这样运行一个真正的一行:
nc -znv -w 2 <host> <port1>; nc -znv -w 2 <host> <port2>
-ztesting端口
-n不parsingDNS
-v给出详细的输出
-w在2秒后超时
; 只要你不介意再input一个命令就可以一个接一个地命令。
如果您正在扫描多个端口,我喜欢使用循环的build议,但是如果它是2或3,并且您已经尝试通过类似SSH的列表循环,则像这样的string命令是有用的。
在Gentoo Linux上(安装了net-analyzer / netcat-110-r9):
$ nc -vz www.example.com 80 443 www.example.com [93.184.216.34] 80 (http) open $ nc -vvz www.example.com 80 443 www.example.com [93.184.216.34] 80 (http) open www.example.com [93.184.216.34] 443 (https) : Connection refused