Como saber qual sabor do netcat estou usando?

3

Existem dois tipos de netcat : netcat-openbsd e netcat-traditional .

Como saber qual sabor do netcat estou usando? Eu tentei man nc , mas não diz qual é o sabor.

    
por user263210 28.11.2017 / 18:38

3 respostas

7

Primeiro de tudo, você pode instalar vários sabores em sua máquina. Portanto, a resposta depende de quantos sabores você instalou e de qual comando você digitou.

netcat-traditional e netcat-openbsd está disponível para ser instalado através do gerenciador de pacotes apt no Ubuntu. No meu caso, eu também construo a partir da fonte para instalar o GNU netcat flavor através do site oficial .

Para o sabor "openbsd", você pode descobrir o nome binário do local com dpkg -L < package-name > (Pesquisando-se para encontrar o equivalente a dpkg L se seu gerenciador de pacotes não for apt ):

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

Em seguida, use type -a para confirmar que o nome binário nc.openbsd é pesquisável em $PATH e interpretado como comando:

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

Para o sabor "tradicional" é o mesmo:

$ 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

Isso significa que posso emitir o comando nc.openbsd para executar a ferramenta netcat-openbsd e também o comando nc.traditional para executar a ferramenta netcat-traditional . (Pode confundir onde o comando contém '.', Mas o nome do pacote contém '-')

Parece que há 3 versões para instalar via 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

Mas, na verdade, netcat é apenas pacote fictício:

$ 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.

Você só pode instalar netcat-openbsd e netcat-traditional via apt se quiser:

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

Como sobre os comandos nc e netcat ? Eles podem ser vinculados a diversos tipos pesquisáveis por $PATH , um dos caminhos será executado se você digitar nc ou netcat . Novamente, você pode usar type -a para verificar, enquanto a prioridade é a primeira linha (como negrito abaixo):

$ type -a nc 
nc is /usr/local/bin/nc
nc is /bin/nc
nc is /usr/local/bin/nc
nc is /bin/nc
$ type -a netcat
netcat is /usr/local/bin/netcat
netcat is /bin/netcat
netcat is /usr/local/bin/netcat
netcat is /bin/netcat

Você pode usar realpath para descobrir o caminho resolvido deles:

$ realpath /usr/local/bin/netcat 
/usr/local/bin/netcat
$ realpath /bin/netcat 
/bin/nc.openbsd
$ realpath /usr/local/bin/nc
/usr/local/bin/netcat
$ realpath /bin/nc
/bin/nc.openbsd

4 deles apenas 2 caminhos são únicos no meu sistema, um é "GNU" e o outro é "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)

Isso significa que, se eu digitar nc OR netcat , ele executará /usr/local/bin/netcat , que é "GNU Netcat".

Você pode tentar update-alternatives para ajustar o caminho da ligação simbólica resolvida:

$ 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

Ele alterou /bin/nc e /bin/netcat symlink¹ resolvido para /bin/nc.traditional , mas ainda assim não alterou o sabor se eu digitar nc OR netcat , pois /usr/local/bin/ ainda tem maior precedência sobre /bin no meu $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

Observe que há mais sabores de netcat, por exemplo ncat , socat , sbd , netcat6 , pnetcat e cryptcat .

¹ O link simbólico atual foi atualizado em /etc/alternatives/nc e /etc/alternatives/netcat , que /bin/nc e /bin/netcat já tinham link simbólico para /etc/alternatives/nc e /etc/alternatives/netcat , respectivamente.

    
por 28.11.2017 / 21:13
1

Quando executo nc --version , obtenho:

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]>.

Talvez a versão do BSD diga especificamente também.

    
por 28.11.2017 / 18:42
1

Em um Mac (embora ele se apresente como a versão GNU):

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

Em uma caixa do Linux (especificamente no Ubuntu):

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

netcat --version , sugerido em outra resposta, emitiu um erro de 'opção inválida' para --version , portanto, -h parece ser potencialmente um teste universal.

    
por 28.11.2017 / 18:58

Tags