使用 netcat 扫描开放端口

使用 netcat 扫描开放端口

我只是在思考它的实用性网猫。因此,为了测试目的,我在我的 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 8080nc -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,但这并不相关)

相关内容