我只是在思考它的实用性网猫。因此,为了测试目的,我在我的 Linux 操作系统上安装了 Apache,并通过在我的浏览器中访问 localhost url 来验证 Apache 是否运行。
我想使用 netcat 测试我的机器上的端口 8080 是否打开。我nc -z localhost 8080
在控制台中输入了内容,但没有任何显示。Apache 正在运行,因此端口 8080 已打开。我不明白为什么没有显示任何内容?
此外,如果我尝试使用扫描一系列端口,nc -z localhost 1-9999
我也得不到任何结果。这是否意味着我的机器上没有打开任何端口?
答案1
我不明白为什么什么都没有显示
在我的 Kubuntu 中,我安装了 OpenBSD 实现的nc
。它的手册上写道 [强调我的]:
了解目标机器上哪些端口是开放的并且正在运行服务可能很有用。可以
-z
使用该标志来报告nc
开放端口,而不是发起连接。通常,将此选项与选项结合使用可以打开详细输出到 stderr-v
。
因此尝试nc -zv localhost 8080
或nc -zv localhost 1-9999
。
我注意到我可以测试单身的通过检查退出状态来检查端口。打开端口会nc
返回0
;失败的连接会nc
返回1
。此方法无论有没有都适用-v
。
一般来说,当通过这种方式测试端口时,最好设置一个合理短的超时时间(例如-w 7
),以避免在被扫描的机器完全静止时出现长时间的延迟。
答案2
我不知道你为什么会期望输出。从手册页中:
-z 指定 nc 只扫描监听守护进程,而不向它们发送任何数据。
如果你连接到 http 服务器但没有发送任何数据,会发生什么?你得不到任何回应。与正常情况相比cat
:
ljm@verlaine[~]$ touch this
ljm@verlaine[~]$ cat this
ljm@verlaine[~]$ cat that
cat: that: No such file or directory
this
是一个空文件。因此,cat this
您得不到任何答案。不是“嘿,我找到了这个;但它是空的”消息,而只是 的内容this
。它的工作方式与 相同nc
。
举例来说,pi
监听我的网络上的 80 端口。
ljm@verlaine[~]$ nc -z pi 80
ljm@verlaine[~]$ nc -z pi 83
pi.home [192.168.178.2] 83 (mit-ml-dev) : Connection refused
ljm@verlaine[~]$ echo -n "GET / HTTP/1.0\r\n\r\n" | nc pi 80
HTTP/1.1 404 Not found
Content-Type: text/plain
Content-length: 11
Not found
因此,第一个nc -z pi 80
连接到端口 80(成功)没有发送任何内容并且没有得到答复。
第二,nc -z pi 83
您会收到一条消息,nc
解释哪里出了问题。
第三个nc
向网络服务器发送一些数据并得到答案(404,但这并不相关)