如何知道我使用的是哪种风格的 netcat?

如何知道我使用的是哪种风格的 netcat?

有两种口味netcatnetcat-openbsdNetcat-传统

如何知道我使用的是哪种风格的 netcat?我试过了man nc,但没有说是什么味道。

答案1

首先,你可以在你的机器上安装多种口味。因此,答案取决于您安装了多少个版本以及您输入的命令。

netcat-traditional并且netcat-openbsd可以通过aptUbuntu 中的包管理器进行安装。就我而言,我还通过源代码构建来安装GNU netcat风味这个官方网站

对于“openbsd”风格,您可以使用 <package-name> 找出位置二进制名称dpkg -L(自行搜索以查找相当于dpkg Lif yor package manager is not 的内容apt):

$ dpkg -L netcat-openbsd | dpkg -L grep /bin
/垃圾桶
/垃圾桶/nc.openbsd

然后用于type -a确认二进制名称nc.openbsd可在命令中搜索$PATH并解释为命令:

$ type -a nc.openbsd
nc.openbsd is /bin/nc.openbsd
nc.openbsd is /bin/nc.openbsd

对于“传统”风味是相同的:

$ dpkg -L netcat-traditional | grep /bin
/bin
/bin/nc.traditional
$ type -a nc.traditional
nc.traditional is /bin/nc.traditional
nc.traditional is /bin/nc.traditional

这意味着我可以发出命令nc.openbsd来运行netcat-openbsd工具,也可以发出命令nc.traditional来运行netcat-traditional工具。 (可能会混淆命令包含 '.' 但包名称包含 '-' 的地方)

似乎有 3 种风格可以通过安装apt

$ apt-cache search netcat --names-only
netcat-openbsd - TCP/IP swiss army knife
netcat - TCP/IP swiss army knife -- transitional package
netcat-traditional - TCP/IP swiss army knife

但实际上netcat只是虚拟包:

$ apt-cache show netcat | grep Description-en  -A 2
Description-en: TCP/IP swiss army knife -- transitional package
 This is a "dummy" package that depends on lenny's default version of
 netcat, to ease upgrades. It may be safely removed.

因此,如果需要,您只能安装netcat-openbsdnetcat-traditional通过:apt

sudo apt-get install netcat-openbsd
sudo apt-get install netcat-traditional

nc命令和怎么样netcat?它们可以绑定到可通过 搜索的多种风格,如果您键入或 ,则$PATH其中一个路径将运行。同样,您可以使用来检查,而优先级是第一行(如ncnetcattype -a大胆的以下):

$ 类型 -a nc 
nc 是 /usr/local/bin/nc
nc 是 /bin/nc
nc 是 /usr/local/bin/nc
nc 是 /bin/nc
$ 类型 -a netcat
netcat 是 /usr/local/bin/netcat
netcat 是 /bin/netcat
netcat 是 /usr/local/bin/netcat
netcat 是 /bin/netcat

您可以使用realpath来找出它们的解析路径:

$ 真实路径 /usr/local/bin/netcat 
/usr/local/bin/netcat
$ 真实路径 /bin/netcat
/bin/nc.openbsd
$ 真实路径 /usr/local/bin/nc
/usr/local/bin/netcat
$ 真实路径 /bin/nc
/bin/nc.openbsd

其中4个路径中只有2个在我的系统中是唯一的,一个是“GNU”,另一个是“openbsd”:

$ /usr/local/bin/netcat --version | head -1
netcat (The GNU Netcat) 0.7.1
$ /bin/nc.openbsd -h |& head -1
OpenBSD netcat (Debian patchlevel 1.130-3)

这意味着如果我输入ncOR netcat,它将执行/usr/local/bin/netcat“GNU Netcat”。

您可以尝试update-alternatives调整解析的符号链接路径:

$ realpath /bin/nc
/bin/nc.openbsd
$ realpath /bin/netcat
/bin/nc.openbsd
$ sudo update-alternatives --config nc
There are 2 choices for the alternative nc (providing /bin/nc).

  Selection    Path                 Priority   Status
------------------------------------------------------------
  0            /bin/nc.openbsd       50        auto mode
* 1            /bin/nc.openbsd       50        manual mode
  2            /bin/nc.traditional   10        manual mode

Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /bin/nc.traditional to provide /bin/nc (nc) in manual mode
$ realpath /bin/nc
/bin/nc.traditional
$ realpath /bin/netcat
/bin/nc.traditional

它将两个符号链接/bin/nc/bin/netcat解析符号链接都更改为,但如果我输入OR ,/bin/nc.traditional它仍然不会改变风格,因为在我的 中仍然具有更高的优先级:ncnetcat/usr/local/bin//bin$PATH

$ /bin/nc -h |& head -1
[v1.10-41]
$ nc -h |& head -1
GNU netcat 0.7.1, a rewrite of the famous networking tool.
$ type -a nc | head -1
nc is /usr/local/bin/nc

请注意,netcat 还有更多风格,例如国家猫,索卡特,sbd,网猫6,网络猫, 和密码猫

1更新的实际符号链接是/etc/alternatives/nc/etc/alternatives/netcat,其中/bin/nc/bin/netcat已经分别是到/etc/alternatives/nc和 的符号链接/etc/alternatives/netcat

答案2

当我跑步时nc --version,我得到:

netcat (The GNU Netcat) 0.7.1
Copyright (C) 2002 - 2003  Giovanni Giacobbi

This program comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of this program under the terms of
the GNU General Public License.
For more information about these matters, see the file named COPYING.

Original idea and design by Avian Research <[email protected]>,
Written by Giovanni Giacobbi <[email protected]>.

也许BSD版本也会具体说。

答案3

在 Mac 上(尽管它显示为 GNU 版本):

$ nc -h
GNU netcat 0.7.1, a rewrite of the famous networking tool.
[ further output snipped ]

在 Linux 机器上(特别是 Ubuntu):

$ nc -h
[v1.10-41]
[ further output snipped ]

netcat --version,在另一个答案中建议,向 抛出“无效选项”错误--version,因此-h似乎可能是一个通用测试。

相关内容