如何知道我使用的是哪種風格的 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 netcat-openbsd | 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似乎可能是通用測試。

相關內容