Существует два вида 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)
Это значит, что если я наберу nc
OR 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
, но это все равно не изменит суть, если я введу nc
OR, 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
по-видимому, является потенциально универсальным тестом.