Как узнать, какую версию Netcat я использую?

Как узнать, какую версию Netcat я использую?

Существует два вида netcat:netcat-openbsdиnetcat-традиционный.

Как узнать, какую версию Netcat я использую? Я пробовал, man ncно там не указано, какая это версия.

решение1

Прежде всего, вы можете установить несколько вариантов на свой компьютер. Поэтому ответ зависит от того, сколько вариантов вы установили и какую команду вы вводите.

netcat-traditionalи netcat-openbsdдоступен для установки через менеджер пакетов aptв Ubuntu. В моем случае я также собираю из исходников для установки GNU netcatаромата черезэтот официальный сайт.

Для версии «openbsd» вы можете выяснить местоположение двоичного имени с помощью dpkg -L<package-name> (погуглите самостоятельно, чтобы найти эквивалент, dpkg Lесли ваш менеджер пакетов не является таковым apt):

$ dpkg -L netcat-openbsd | grep /bin
/bin
/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-openbsdи netcat-traditionalчерез только aptесли хотите:

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

Как насчет команд ncи netcat? Они могут быть привязаны к нескольким вариантам поиска по $PATH, один из путей будет запущен, если вы введете ncили netcat. Опять же, вы можете использовать type -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

Из них только 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разрешил символическую ссылку¹ в /bin/nc.traditional, но это все равно не изменит суть, если я введу ncOR, netcatпоскольку /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, напримернкат,сокат,сбд,netcat6,pnetcat, икриптокот.

¹ Фактически обновленными символическими ссылками были /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по-видимому, является потенциально универсальным тестом.

Связанный контент