KM.*_*KM. 7 linux redhat port netcat
我想测试主机上的特定端口是否打开。我在用:
nc -z host 22
nc -z host 80
nc -z host 443
nc -z host 8080
Run Code Online (Sandbox Code Playgroud)
这是有效的,但最好使用像这样的单线:
nc -z host 22 80 443 8080
Run Code Online (Sandbox Code Playgroud)
这不起作用。
nc -z host 22-8080如果可能,我想避免使用手册页中所述的端口范围,因为我要检查的端口 #s 中存在很大差距。另外,我不想扫描每个端口并被视为扫描开放端口。
没有编写 bash 循环,我有哪些测试端口是否打开的选项?我有几十个主机,每个主机都有几个端口要检查。
我在-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 ~]$
Run Code Online (Sandbox Code Playgroud)
如果您和我一样喜欢GNU Parallel ,请尝试以下操作:
parallel nc -vz host ::: 22 80 443 8080
Run Code Online (Sandbox Code Playgroud)
示例输出:
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
Run Code Online (Sandbox Code Playgroud)
在某些情况下,此方法也更快,因为它测试并行连接到端口,而不是串行。具体来说,这就是远程主机(或干预防火墙)丢弃您的数据包以保持隐秘状态(而不是成功连接或强制拒绝)。
提示:在大多数 Linux 发行版中,您可以parallel从包管理器进行安装。
更新:使用parallel,这可以很好地概括以涵盖经常需要的多个主机 x 多个端口的情况。以下示例用于parallel迭代叉积,因此您不需要编写任何嵌套循环。
parallel nc -vz ::: host1 host2 host3 ::: 22 80 443 8080
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
正如前面的示例一样,parallel并行执行连接测试。请注意,默认并行度是您的系统有多少个线程,但可以通过切换-j到任何值轻松覆盖。由于测试套接字不是 CPU 密集型任务,因此您可以轻松逃脱parallel -j 50 ...甚至更高的要求。
| 归档时间: |
|
| 查看次数: |
18062 次 |
| 最近记录: |