Ubuntu ip, ping, ss

Três ferramentas respondem quase todas as perguntas sobre a rede: ip mostra as placas, os endereços e as rotas; ping testa se um destino responde; ss lista as conexões e as portas abertas. Nesta aula você vai ler a saída de cada uma, linha por linha.

Você vai aprender
  • Ler a saída completa do ip a e a versão resumida ip -br a.
  • Ver rotas, gateway e vizinhos da rede com ip r e ip neigh.
  • Usar o ping com limite de tentativas e entender a estatística no final.
  • Descobrir quais portas estão abertas e qual programa está usando cada uma com ss.

Se ainda não leu Conceitos de Rede, comece por lá: esta aula usa IP, máscara, gateway e porta o tempo todo. Os exemplos são da máquina fictícia notebook, ligada no Wi-Fi.


O comando ip

O ip é a ferramenta oficial de rede do Linux. Ele tem subcomandos, e cada um cuida de uma parte:

SubcomandoAbreviaçãoMostra
ip addressip aEndereços IP de cada placa
ip routeip rRotas (por onde cada destino sai)
ip linkip lAs placas em si: ligadas, desligadas, endereço físico (MAC)
ip neighbourip nVizinhos: outros aparelhos que o computador já viu na rede

Qualquer abreviação que não seja ambígua funciona: ip a, ip addr e ip address são o mesmo comando.


Ver os endereços: ip -br a

Comece pela versão resumida. Ela mostra uma linha por placa:

ip
A ferramenta de rede.
-br
Opção brief, "resumido": uma linha por placa.
a
Subcomando address: endereços.
$ ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
enp3s0           DOWN
wlp2s0           UP             192.168.0.15/24 fe80::5a1c:3b2d:8e4f:9a10/64

Cada linha tem três colunas: o nome da placa, o estado e os endereços. Os nomes seguem um padrão:

NomeO que é
loLoopback: a placa virtual que o computador usa para falar consigo mesmo. Sempre existe.
enp3s0, eno1Placa de cabo (Ethernet). O "en" vem de Ethernet.
wlp2s0, wlx…Placa Wi-Fi. O "wl" vem de wireless, "sem fio". Adaptadores USB costumam ter nomes como wlx seguido do endereço físico.
docker0, virbr0, wg0Placas virtuais criadas pelo Docker, por máquinas virtuais ou por VPN.

Na coluna de estado, UP quer dizer ligada e com conexão, e DOWN quer dizer desligada ou sem cabo. O lo aparece como UNKNOWN, o que é normal.

Com cores: -c

Acrescente -c (de color) para colorir: estados em verde ou vermelho, endereços em destaque. Fica mais fácil de ler na tela:

$ ip -br -c a

A saída completa: ip a

Sem o -br, o ip a mostra todos os detalhes. Assusta no começo, mas cada linha tem um significado:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    « placa 1: loopback
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo                                                         « IPv4 do localhost
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000   « NO-CARRIER: sem cabo
    link/ether 02:ab:cd:15:00:01 brd ff:ff:ff:ff:ff:ff                                     « endereço físico (MAC)
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000   « Wi-Fi ligado
    link/ether 02:ab:cd:15:00:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.15/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp2s0       « o seu IPv4
       valid_lft 3178sec preferred_lft 3178sec                                             « o empréstimo do IP vence em ~53 min
    inet6 fe80::5a1c:3b2d:8e4f:9a10/64 scope link noprefixroute                            « IPv6 local
       valid_lft forever preferred_lft forever
PedaçoSignificado
3: wlp2s0:Número e nome da placa.
<…UP,LOWER_UP>Sinais de estado. UP: a placa foi ligada pelo sistema. LOWER_UP: há conexão física (cabo ou Wi-Fi associado). NO-CARRIER: ligada, mas sem cabo ou sinal.
mtu 1500Tamanho máximo de cada pacote, em bytes. 1500 é o padrão.
state UPEstado geral: UP funcionando, DOWN parada.
link/ether 02:ab:…Endereço MAC: a "placa do carro" da interface, gravada pelo fabricante.
inet 192.168.0.15/24O endereço IPv4 e a máscara.
brd 192.168.0.255Endereço de broadcast: mensagem para todos do bairro.
dynamicO IP veio do DHCP, entregue pelo roteador. Um IP fixo não tem essa palavra.
valid_lft 3178secPor quanto tempo o IP emprestado ainda vale. O sistema renova sozinho antes de vencer.
inet6 …Endereço IPv6. scope link (começa com fe80:) só vale na rede local.

Só uma placa

Para ver só uma placa, coloque show e o nome no final:

$ ip a show wlp2s0
$ ip -br a show wlp2s0
wlp2s0           UP             192.168.0.15/24 fe80::5a1c:3b2d:8e4f:9a10/64

Formas diferentes de ver o seu IP

FormaComandoQuando usar
Só os númeroshostname -IPara copiar o IP rápido, ou usar num script
Resumo por placaip -br aNo dia a dia: mostra estado e IP de cada placa
Detalhes completosip aPara investigar: MAC, validade do DHCP, flags
Pelo NetworkManagernmcli device show wlp2s0Quando quer IP, gateway e DNS juntos
Pela interface gráficaConfigurações → Wi-Fi → engrenagemQuando não quer abrir o terminal
$ hostname -I
192.168.0.15 2804:14c:5b80:8a1f::1a2b

Rotas e gateway: ip r

A tabela de rotas diz por onde cada destino sai. A linha que importa no dia a dia é a default: o caminho para a internet.

$ ip r
default via 192.168.0.1 dev wlp2s0 proto dhcp src 192.168.0.15 metric 600      « saída para a internet: o roteador
192.168.0.0/24 dev wlp2s0 proto kernel scope link src 192.168.0.15 metric 600   « a rede local: entrega direto

Leia a primeira linha assim: "para qualquer destino (default), mande pelo 192.168.0.1, usando a placa wlp2s0". A explicação de cada pedaço está em Conceitos de Rede.

Por onde sai um destino específico?

ip r get responde qual rota seria usada para chegar a um endereço:

$ ip r get 8.8.8.8
8.8.8.8 via 192.168.0.1 dev wlp2s0 src 192.168.0.15 uid 1000
    cache

Placas e vizinhos: ip link e ip neigh

ip -br link mostra as placas com o endereço físico (MAC), sem os IPs:

$ ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
enp3s0           DOWN           02:ab:cd:15:00:01 <NO-CARRIER,BROADCAST,MULTICAST,UP>
wlp2s0           UP             02:ab:cd:15:00:02 <BROADCAST,MULTICAST,UP,LOWER_UP>

ip neigh mostra os aparelhos da rede local com os quais o computador já conversou, com o MAC de cada um:

$ ip neigh
192.168.0.1 dev wlp2s0 lladdr 02:ab:cd:00:00:10 REACHABLE       « o roteador, respondendo agora
192.168.0.31 dev wlp2s0 lladdr 02:ab:cd:00:00:31 STALE          « um aparelho visto há algum tempo

Ligar e desligar uma placa

Dá para desligar e ligar uma placa com ip link set. Isso exige sudo:

$ sudo ip link set wlp2s0 down
$ sudo ip link set wlp2s0 up
Cuidado em acesso remoto

Se você está conectado por SSH através de uma placa e a desliga, perde a conexão na hora e não consegue religá-la remotamente. No desktop, prefira desligar e ligar o Wi-Fi pelo menu do sistema ou com nmcli (veja Configurar a Rede). Mudanças feitas com ip se perdem ao reiniciar.


ping: o destino responde?

O ping envia um pacote pequeno e espera a resposta, como bater na porta e esperar alguém dizer "oi". Ele mede se o destino responde e quanto tempo leva.

ping
O programa.
-c 3
count, "contagem": envia 3 pacotes e para. Sem isso, o ping roda até você apertar Ctrl+C.
192.168.0.1
O destino: um IP ou um nome.
$ ping -c 3 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=3.12 ms       « resposta 1, em 3 milissegundos
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=2.87 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=4.05 ms

--- 192.168.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms  « enviados, recebidos, perda
rtt min/avg/max/mdev = 2.870/3.346/4.050/0.507 ms               « tempo mínimo/médio/máximo
PedaçoSignificado
icmp_seq=1Número do pacote. Se pular números, pacotes se perderam no caminho.
ttl=64"Tempo de vida": quantos roteadores o pacote ainda podia atravessar.
time=3.12 msTempo de ida e volta. Na rede de casa: poucos ms. Até a internet: 10 a 100 ms.
0% packet lossNenhum pacote perdido. Perda constante indica Wi-Fi fraco ou rede congestionada.

O que o ping devolve

O código de saída diz o resultado, o que é útil em scripts:

$ ping -c 1 192.168.0.1 > /dev/null; echo $?
0                                            « respondeu
$ ping -c 1 -W 1 192.168.0.250 > /dev/null; echo $?
1                                            « ninguém respondeu
$ ping -c 1 servidro.local; echo $?
ping: servidro.local: Nome ou serviço desconhecido
2                                            « nem achou o nome

Opções úteis do ping

OpçãoFazExemplo
-c NEnvia N pacotes e paraping -c 5 ubuntu.com
-i SIntervalo entre pacotes, em segundosping -i 0.5 192.168.0.1
-W SQuanto tempo esperar cada respostaping -c 1 -W 1 192.168.0.9
-4 / -6Força IPv4 ou IPv6ping -4 ubuntu.com
-qMostra só o resumo finalping -q -c 10 8.8.8.8
Ping sem resposta não quer dizer "fora do ar"

Muitos servidores e firewalls ignoram o ping de propósito. Para testar um site, use curl -I; para testar uma porta, use nc -zv (as duas formas estão abaixo).


ss: conexões e portas abertas

O ss (de socket statistics, "estatísticas de sockets") lista as conexões de rede. Um socket é a "tomada" que um programa usa para falar pela rede. A pergunta mais comum é "quais portas estão abertas esperando conexão?":

ss
O programa.
-t
Conexões TCP.
-u
Conexões UDP.
-l
Só as que estão listening, "escutando": portas abertas esperando alguém.
-n
Mostra números (22), em vez de nomes (ssh).
-p
Mostra o process, o programa dono de cada porta.
$ sudo ss -tulpn
Netid State  Recv-Q Send-Q  Local Address:Port  Peer Address:Port Process
udp   UNCONN 0      0       127.0.0.54:53           0.0.0.0:*    users:(("systemd-resolve",pid=612,fd=16))   « DNS local
udp   UNCONN 0      0       127.0.0.53%lo:53        0.0.0.0:*    users:(("systemd-resolve",pid=612,fd=14))
udp   UNCONN 0      0       0.0.0.0:5353            0.0.0.0:*    users:(("avahi-daemon",pid=790,fd=12))
tcp   LISTEN 0      4096    127.0.0.53%lo:53        0.0.0.0:*    users:(("systemd-resolve",pid=612,fd=15))
tcp   LISTEN 0      4096    127.0.0.1:631           0.0.0.0:*    users:(("cupsd",pid=845,fd=7))             « impressão, só local
tcp   LISTEN 0      4096    0.0.0.0:22              0.0.0.0:*    users:(("sshd",pid=1102,fd=3))             « SSH aberto para a rede
tcp   LISTEN 0      4096    [::]:22                 [::]:*       users:(("sshd",pid=1102,fd=4))
ColunaSignificado
NetidTipo: tcp ou udp.
StateLISTEN: porta TCP esperando conexão. UNCONN: socket UDP aberto (UDP não "conecta").
Local Address:PortEm qual endereço e porta o programa escuta. Veja a tabela abaixo.
Peer Address:PortQuem está do outro lado. * = qualquer um.
ProcessPrograma, PID e descritor. Só aparece para todos os programas com sudo.

O endereço local diz quem pode se conectar:

Endereço localQuem alcança
127.0.0.1:631Só o próprio computador. Seguro.
0.0.0.0:22Qualquer máquina da rede (todas as placas IPv4).
[::]:22Qualquer máquina, pelo IPv6.
192.168.0.15:8080Só quem chega por essa placa específica.

Conexões ativas agora

Sem o -l, e filtrando pelo estado established, você vê as conexões abertas neste momento:

$ ss -tn state established
Recv-Q Send-Q   Local Address:Port      Peer Address:Port
0      0         192.168.0.15:49822   185.125.190.20:443       « o navegador falando com ubuntu.com
0      0         192.168.0.15:41736     140.82.112.25:443

Quem está usando a porta 8080?

Filtros do ss seguem a forma 'sport = :PORTA' (source port, porta de origem):

$ sudo ss -tlpn 'sport = :8080'
State  Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0      5            0.0.0.0:8080      0.0.0.0:*    users:(("python3",pid=4410,fd=3))
Outra forma: ss | grep

sudo ss -tulpn | grep 8080 dá o mesmo resultado e é mais fácil de lembrar. O grep filtra as linhas que contêm o texto (veja grep).

Testar uma porta de outra máquina: nc -zv

O ss mostra as portas da sua máquina. Para saber se a porta de outra máquina está acessível, use o nc (netcat). -z só testa, sem enviar dados, e -v mostra o resultado:

$ nc -zv 192.168.0.50 22
Connection to 192.168.0.50 22 port [tcp/ssh] succeeded!          « porta aberta
$ nc -zv 192.168.0.50 3306
nc: connect to 192.168.0.50 port 3306 (tcp) failed: Connection refused   « ninguém escutando ali
E o netstat?

Tutoriais antigos usam netstat -tulpn e ifconfig. Eles são do pacote net-tools, que é antigo e não vem instalado. Use ss e ip: as opções do ss são quase as mesmas do netstat.


Quando não funciona

A placa aparece, mas sem IP
$ ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
enp3s0           DOWN
wlp2s0           DOWN

O que aconteceu: o Wi-Fi está desligado ou não conectou a nenhuma rede. Se a placa de cabo aparece como NO-CARRIER no ip a, o cabo está solto ou com defeito.

Como resolver: ligue o Wi-Fi e escolha a rede pelo menu do canto superior direito, ou com nmcli device wifi connect (veja Wi-Fi). Se o Wi-Fi não liga ou nem aparece, veja Wi-Fi que Não Funciona.

O ss não mostra a coluna Process
$ ss -tlpn
State  Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0      4096   0.0.0.0:22              0.0.0.0:*                       « Process vazio
LISTEN 0      4096   127.0.0.1:631           0.0.0.0:*

O que aconteceu: por segurança, um usuário comum só vê o nome dos próprios programas. Os serviços do sistema pertencem ao root.

Como resolver: rode com sudo ss -tlpn.

Ping com 100% de perda
$ ping -c 3 192.168.0.50
PING 192.168.0.50 (192.168.0.50) 56(84) bytes of data.
From 192.168.0.15 icmp_seq=1 Destination Host Unreachable      « ninguém com esse IP na rede
From 192.168.0.15 icmp_seq=2 Destination Host Unreachable
From 192.168.0.15 icmp_seq=3 Destination Host Unreachable

--- 192.168.0.50 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2036ms

O que aconteceu: "Destination Host Unreachable" significa que nenhum aparelho da rede local respondeu por esse IP: ele está desligado, mudou de IP ou o número está errado. Se não aparece nenhuma mensagem e só o resumo com 100%, o aparelho pode existir mas bloquear o ping.

Como confirmar: veja se o aparelho aparece em ip neigh e confira o IP dele no próprio aparelho.

"Comando 'ifconfig' não encontrado"

O que aconteceu: o ifconfig é antigo e não vem mais instalado no Ubuntu.

Como resolver: use ip a. Se precisar dele por causa de um tutorial antigo, instale com sudo apt install net-tools.


Referência de opções

ip

ComandoDescrição
ip a / ip -br aEndereços, completo ou resumido
ip -br -c aResumido e colorido
ip a show PLACASó uma placa
ip -4 a / ip -6 aSó IPv4 / só IPv6
ip rTabela de rotas
ip r get IPQual rota seria usada para um destino
ip -br linkPlacas e MAC
ip neighVizinhos da rede local
sudo ip link set PLACA up|downLiga ou desliga uma placa (temporário)

ss

OpçãoDescrição
-t / -uTCP / UDP
-lSó portas escutando
-nNúmeros em vez de nomes
-pMostra o programa (use com sudo)
-aTodas: escutando e conectadas
-sResumo com totais
state establishedSó conexões ativas
'sport = :80'Filtra pela porta local

Exercícios

1. IP resumido

Complete para ver uma linha por placa, com o IP de cada uma:

ip

2. Portas abertas

Complete para listar as portas TCP e UDP que estão escutando, com números e o nome do programa:

sudo ss

3. Cinco pings

Complete para enviar exatamente 5 pings ao 8.8.8.8:

ping 8.8.8.8

4. Na saída do ss, uma porta aparece como 127.0.0.1:631. Quem consegue se conectar a ela?

5. No ip a, a placa de cabo mostra NO-CARRIER. O que isso indica?


Resumo

  • ip -br a mostra placas e IPs; ip a mostra todos os detalhes; ip r mostra o gateway.
  • UP,LOWER_UP = ligada e conectada; NO-CARRIER = sem cabo ou sinal.
  • ping -c N testa se um destino responde; código 0 = respondeu, 1 = sem resposta, 2 = erro (como nome inexistente).
  • sudo ss -tulpn lista as portas abertas e o programa dono de cada uma; 127.0.0.1 = só local, 0.0.0.0 = toda a rede.
  • Para testar a porta de outra máquina: nc -zv IP PORTA.