Você está na página 1de 10

Em alguns cenários, o uso do comando 

ping para analisar a
conexão entre dois hosts não é o bastante. Um administrador
poderá desejar simular o tráfego de dados reais através de
uma rede.

Uma das importantes ferramentas que poderá ser utilizada é o


comando nc (também conhecido como netcat). Funcionando de
forma semelhante ao comando telnet (mas minimizando erros
de interpretação que eram comuns neste), o nc pode ser
utilizado para realizar conexões em portas abertas em hosts
remotos (ou até mesmo na máquina local). 

Por exemplo, o comando pode ser usado para criar uma


conexão em uma dada porta em um host local. A seguir,
criaremos uma conexão na porta 80 (serviço HTTP) do host B
(cujo IP é 192.168.0.32):

[root@curso6:~]# nc –l 80

Detalhes sobre esta conexão poderão ser vistos a partir do


comando lsof, utilizado para exibir arquivos que encontram-se
abertos no sistema, como sockets rede, arquivos comuns,
diretórios, bibliotecas etc:

[root@curso6:~]# lsof –i :80

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE


NAME

nc      3362 root    3u  IPv4  40963      0t0  TCP *:http (LISTEN)

Agora, a partir do host A, podemos também usar o


comando nc para testar a conectividade com a porta 80
oferecida por B:

[root@curso6:~]# nc 192.168.0.32 80
Como a conexão foi realizada com sucesso, ela representa um
arquivo aberto no host B. Dessa maneira, seus detalhes
poderão ser visualizados através do uso do comando lsof:

[root@curso6:~]# lsof –i :80

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE


NAME

nc      2990 root    3u  IPv4  38944      0t0  TCP *:http (LISTEN)

nc      2990 root    4u  IPv4  38945      0t0  TCP


192.168.0.32:http->192.168.0.90:40396 (ESTABLISHED)

Qualquer coisa digitada no host A irá ser exibida no shell


dedicado à criação da conexão no host B.

Outro exemplo de uso do comando nc é a verificação da


disponibilidade de conexão em uma faixa de portas. No
exemplo a seguir, utilizando o host A, vamos fechar a conexão
(Ctrl + c) e em seguida, rodar o comando nc para identificar
portas que encontram-se disponíveis no host B no range entre
80 a 90:

[root@curso6:~]# nc –vz 192.168.32 80-90

Connection to 192.168.0.90 80 port [tcp/http] succeeded!

nc: connect to 192.168.0.90 port 81 (tcp) failed: Connection


refused

nc: connect to 192.168.0.90 port 82 (tcp) failed: Connection


refused

nc: connect to 192.168.0.90 port 83 (tcp) failed: Connection


refused
nc: connect to 192.168.0.90 port 84 (tcp) failed: Connection
refused

nc: connect to 192.168.0.90 port 85 (tcp) failed: Connection


refused

nc: connect to 192.168.0.90 port 86 (tcp) failed: Connection


refused

nc: connect to 192.168.0.90 port 87 (tcp) failed: Connection


refused

nc: connect to 192.168.0.90 port 88 (tcp) failed: Connection


refused

nc: connect to 192.168.0.90 port 89 (tcp) failed: Connection


refused

nc: connect to 192.168.0.90 port 90 (tcp) failed: Connection


refused

Outro comando muito útil que surge neste sentido é o netstat,


responsável por (dentre outras coisas) exibir as conexões de
rede que foram estabelecidas. Para visualizarmos as
conexões TCP que foram estabelecidas, utilizamos a opção –t:

[root@curso6:~]# netstat –t

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address           Foreign


Address         State     

tcp        0      0 192.168.0.32:www-http   192.168.0.90:40402     


ESTABLISHED
Para exibir todas (-a) as conexões TCP (-t) em modo "LISTEN"
ou aquelas "ESTABLISHED", não havendo o processo de
resolução de nomes (-n) lançamos o comando da seguinte
forma:

[root@curso6:~]# netstat -ta

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign


Address         State     

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN    

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN    

tcp        0      0 127.0.0.1:631           0.0.0.0:*              


LISTEN    

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN    

tcp        0      0 192.168.0.32:80         192.168.0.90:40402     


ESTABLISHED

tcp6       0      0 :::22                   :::*                    LISTEN    

tcp6       0      0 ::1:631                 :::*                    LISTEN    

tcp6       0      0 ::1:25                  :::*                    LISTEN 

O comando netstat consegue ainda exibir outras diversas


informações importantes para o diagnóstico e aplicação de
soluções em problemas relacionados a rede. Apesar de já ter
sido praticamente substituído por outros comandos, como
o ss por exemplo, ele ainda costuma ser bastante utilizado.
Ao ser executado sem quaisquer opções, o
comando netstat exibe uma lista completa de todos os
sockets/conexões atualmente abertos/ativos. Observe um
exemplo parcial e adaptado:

[root@curso6:~]# netstat | less

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address           Foreign


Address         State     

tcp        0      0 192.168.0.32:www-http   192.168.0.90:40402     


ESTABLISHED

Active UNIX domain sockets (w/o servers)

Proto RefCnt Flags       Type       State         I-Node   Path

unix  2      [ ]         DGRAM                    27674    /run/user/1000/

unix  2      [ ]         DGRAM                    19235    /var/run/chrony/

unix  2      [ ]         DGRAM                    25281   


/run/user/463/systemd/

unix  2      [ ]         DGRAM                    13513   


/run/systemd/journal/

unix  3      [ ]         DGRAM                    10468   


/run/systemd/notify

Se a intenção também for visualizar aqueles sockets que


estejam em modo "LISTEN", basta utilizar a opção –a (ou --all).
Se o administrador desejar visualizar os PIDs e nomes dos
programas relacionados a cada um desses sockets, a opção –
p (ou --program) também poderá ser usada.

No dia a dia, o processo de pesquisa por sockets se dá de


maneira mais refinada. No exemplo a seguir, vamos exibir os
sockets TCP (-t) e UDP (-u) que estejam em modo "LISTEN" (-
l), não realizando o processo de resolução de nomes (-n): 

[root@curso6:~]# netstat -tuln

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign


Address         State     

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN    

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN    

tcp        0      0 127.0.0.1:631           0.0.0.0:*              


LISTEN    

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN    

tcp6       0      0 :::22                   :::*                    LISTEN    

tcp6       0      0 ::1:631                 :::*                    LISTEN    

tcp6       0      0 ::1:25                  :::*                    LISTEN    

udp        0      0 0.0.0.0:5353            0.0.0.0:*                         

udp        0      0 127.0.0.1:323           0.0.0.0:*                          

udp        0      0 0.0.0.0:43626           0.0.0.0:*                         

udp6       0      0 :::177                  :::*                              


udp6       0      0 :::5353                 :::*                              

udp6       0      0 ::1:323                 :::*                              

udp6       0      0 :::60224                :::*                    

O comando netstat também poderá ser usado para exibir a


tabela de roteamento IP do kernel, bastando para isto utilizar a
opção –r (ou --route).

[root@curso6:~]# netstat -r

Kernel IP routing table

Destination     Gateway         Genmask         Flags   MSS


Window  irtt Iface

192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0


eth0

As estatísticas relacionadas às interfaces também poderão ser


exibidas através do uso dos comandos ip, ifconfig e netstat.
Acompanhe:

[root@curso6:~]# netstat –i

Kernel Interface table

Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK


TX-ERR TX-DRP TX-OVR Flg

eth0      1500      545      0      0 0           418      0      0      0


BMRU

lo       65536      148      0      0 0           148      0      0      0 LRU


[root@curso6:~]# ifconfig

eth0: flags=4163  mtu 1500

inet 192.168.0.32  netmask 255.255.255.0  broadcast


192.168.0.255

inet6 fe80::a00:27ff:fe5a:4e7a  prefixlen 64  scopeid 0x20

ether 08:00:27:5a:4e:7a  txqueuelen 1000  (Ethernet)

RX packets 545  bytes 54032 (52.7 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 418  bytes 34090 (33.2 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10

loop  txqueuelen 1000  (Local Loopback)

RX packets 148  bytes 12392 (12.1 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 148  bytes 12392 (12.1 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@curso6:~]# ip –s link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode
DEFAULT group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

RX: bytes  packets  errors  dropped overrun mcast  

12392      148      0       0       0       0      

TX: bytes  packets  errors  dropped carrier collsns

12392      148      0       0       0       0      

2: eth0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT


group default qlen 1000

link/ether 08:00:27:5a:4e:7a brd ff:ff:ff:ff:ff:ff

RX: bytes  packets  errors  dropped overrun mcast  

54032      545      0       0       0       168    

TX: bytes  packets  errors  dropped carrier collsns

34090      418      0       0       0       0      

Já o comando ss, outro importante utilitário para investigação


de sockets e atuante como substituto ao netstat, ao ser
utilizado sem quaisquer opções, é exibida uma lista de sockets
em estado "não-LISTEN" e que possuam conexões
estabelecidas. Observe um exemplo parcial:

[root@curso6:~]# ss

Netid  State      Recv-Q Send-Q Local Address:Port Peer


Address:Port               
u_str  ESTAB      0      0       * 29070                 *
29071               

u_str  ESTAB      0      0       * 26747                 * 26748   

u_str  ESTAB      0      0       * 30982                 *


30983               

u_str  ESTAB      0      0       * 26274                 *


26275               

u_str  ESTAB      0      0       * 25983                 *


25984               

u_str  ESTAB      0      0       * 31011                 *


31012               

u_str  ESTAB      0      0       * 25771                 * 25772     

Seguindo a mesma lógica que vimos no netstat, se utilizarmos


o comando ss junto às opções "lunt", serão exibidos os
sockets TCP e UDP em modo LISTEN (além de não haver o
processo de resolução de nomes). Além disso, também é
possível acrescentar a opção –p (ou --process) para visualizar
os PIDs dos processos relacionados a cada socket.

Você também pode gostar