为什么'~$ nc -z T43 1-1024' 没有产生任何输出,尽管'~$ ping T43' 成功了?

为什么'~$ nc -z T43 1-1024' 没有产生任何输出,尽管'~$ ping T43' 成功了?

为什么'~$ nc -z T43 1-1024' 没有产生任何输出,尽管'~$ ping T43' 成功了?

'~$ nc -z -v T43 1-1024' 打印 '连接到 T43 22 端口 [tcp/ssh] 成功!' 和 'nc:连接到 T43 端口 1000 (tcp) 失败:连接被拒绝。'

'man nc':“端口扫描:了解目标机器上哪些端口是开放的并且正在运行服务可能会很有用。-z 标志可用于告诉 nc 报告开放端口,而不是启动连接。例如:'$ nc -z host.example.com 20-30'。

答案1

我已经检查过了源代码,首先是原始的(netcat-openbsd_1.89.orig.tar.gznetcat.c)。 (367-388)中的相关行(已编辑):

if (vflag || zflag) {
    /* ... */

    /* Don't look up port if -n. */
    if (nflag)
        sv = NULL;
    else {
        sv = getservbyport(
            ntohs(atoi(portlist[i])),
            uflag ? "udp" : "tcp");
    }

    printf("Connection to %s %s port [%s/%s] succeeded!\n",
        host, portlist[i], uflag ? "udp" : "tcp",
        sv ? sv->s_name : "*");
}

但是 diff 包(netcat-openbsd_1.89-4ubuntu1.diff.gz) 包含一个补丁,删除了详细显示功能:

--- netcat-openbsd-1.89.orig/debian/patches/silence-z.patch
+++ netcat-openbsd-1.89/debian/patches/silence-z.patch
@@ -0,0 +1,13 @@
+Index: netcat-openbsd-1.89/netcat.c
+===================================================================
+--- netcat-openbsd-1.89.orig/netcat.c  2008-06-19 16:33:52.000000000 -0400
++++ netcat-openbsd-1.89/netcat.c   2008-06-19 16:34:58.000000000 -0400
+@@ -364,7 +364,7 @@
+               continue;
+ 
+           ret = 0;
+-          if (vflag || zflag) {
++          if (vflag) {
+               /* For UDP, make sure we are connected. */
+               if (uflag) {
+                   if (udptest(s) == -1) {

因此看来没有标志vz标志分支永远不会“运行”,也不会显示消息。(虽然我不是专业的 C 程序员,所以请对此持怀疑态度。)

此外变更日志指的是这个:

netcat-openbsd (1.89-3) 不稳定;紧急程度=低

  • 静音 -z 标志,以与 netcat-traditional 兼容(关闭:#464564)

Debian 错误报告 #464564包含以下内容:

即使未选择 -v,-z 标志也会生成“已成功连接”消息。这与原始版本有很大不同,并且混淆了 -z 和 -v 标志的功能。已附加补丁。

所以我认为这是手册页中的一个错误:端口扫描部分没有遵循改变的功能。

相关内容