O comando ss é uma ferramenta nova e mais rápida para acompanhar as conexões TCP e soquetes de sistema. Por ser capaz de exibir mais informações e com mais agilidade, o ss está substituindo o netstat.
netstat vs ss
Não vou me aprofundar muito nesta questão. Cada um usa o que quiser.
Contudo, há algumas diferenças que pesam a favor do uso do ss:
- O comando netstat coleta informações para elaborar suas estatísticas a partir da leitura de vários arquivos
/proc
.
Esta abordagem tem se mostrado frágil quando há uma grande quantidade de conexões a monitorar — neste ponto, o netstat começa a ficar muito mais lento. - O comando ss obtém suas informações direto do kernel space, o que lhe acrescenta mais velocidade de resposta e maior quantidade (e qualidade) de infomações.
O comando netstat não está mais presente nas instalações padrão do CentOS e Red Hat 7. Você continua podendo instalar, se quiser, dos repositórios.
No Ubuntu 14.04 LTS, o netstat ainda está presente na instalação padrão.
As opções de uso do ss são muito similares às do netstat —. O que torna a substituição muito mais fácil.
O utilitário ss pode prover informações sobre os seguintes itens:
- Todos os TCP sockets.
- Todos os UDP sockets.
- Todas as conexões ssh/ftp/http/https estabelecidas.
- Todos os process locais conectados ao servidor X.
Todas estas estatísticas podem ser providas e filtradas por seus estados (conectado, sincronizado, SYN-RECV, SYN-SENT, TIME-WAIT), por seus endereços e portas etc.
Vamos ver alguns dos usos mais comuns do comando. Abra um terminal e me acompanhe! 😉
Liste todas as conexões com o comando ss
A maneira mais simples de executar o comando, é sem qualquer opção.
Para poder examinar pausadamente, cada tela do resultado, acrescente o comando less:
ss | less
A saída vai ter todos os detalhes das conexões tcp, udp e sockets unix.
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port u_str ESTAB 0 0 * 17367 * 19700 u_str ESTAB 0 0 * 10072 * 13617 u_str ESTAB 0 0 * 18044 * 16029 u_str ESTAB 0 0 @/tmp/.ICE-unix/2182 16727 * 15846 u_str ESTAB 0 0 * 12406 * 12405 u_str ESTAB 1 0 * 79183 * 79184 u_str ESTAB 0 0 * 16150 * 15350 u_str ESTAB 0 0 * 8004 * 8005 u_str ESTAB 0 0 /var/run/dbus/system_bus_socket 16946 * 18476 :
Use a opção -s
ou --summary
para ver um resumo geral das estatísticas de conexão.
ss -s
Estas informações são úteis quando a quantidade de soquetes é tão grande que tentar obter a informação do arquivo /proc/net/tcp
chega a ser doloroso.
Total: 553 (kernel 0) TCP: 47 (estab 32, closed 4, orphaned 4, synrecv 0, timewait 3/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 0 0 0 UDP 13 10 3 TCP 43 40 3 INET 56 50 6 FRAG 0 0 0
Como ver todas as portas de rede abertas
A opção -l
exibe apenas as portas que estão em modo escuta (LISTENING) e que, normalmente, são omitidas.
ss -l
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port nl UNCONN 0 0 rtnl:NetworkManager/920 * nl UNCONN 0 0 rtnl:whoopsie/1162 * nl UNCONN 0 0 rtnl:dnsmasq/2659 * nl UNCONN 0 0 15:upowerd/1511 * nl UNCONN 0 0 15:gvfs-gphoto2-vo/2461 * nl UNCONN 0 0 15:-4132 * nl UNCONN 0 0 15:-4128 * 15218 * 0 tcp LISTEN 0 50 127.0.0.1:mysql *:* tcp LISTEN 0 5 127.0.1.1:domain *:* tcp LISTEN 0 128 127.0.0.1:ipp *:* tcp LISTEN 0 128 :::http :::* tcp LISTEN 0 128 ::1:ipp :::*
Use o comando grep para filtrar resultados específicos para você:
ss -pl | grep mysql
u_str LISTEN 0 50 /var/run/mysqld/mysqld.sock 12880 * 0 tcp LISTEN 0 50 127.0.0.1:mysql *:*
Opções para exibir diversos soquetes com ss
As opções, que seguem, são muito comuns e podem ser combinadas. Experimente.
Como exibir todos os soquetes TCP:
ss -t -a
Como exibir todos os soquetes UDP:
ss -u -a
Como exibir todos os soquetes RAW:
ss -w -a
Como exibir todos os soquetes UNIX:
ss -x -a
A opção -t
, isoladamente, só vai relacionar as conexões estabelecidas ou CONNECTED. Ela não relata as conexões em modo escuta ou LISTENING.
Como listar apenas as conexões LISTENING
O comando ss -ltn
vai relacionar todos os soquetes em modo escuta.
Veja, no exemplo abaixo, o servidor web Apache usando um soquete na porta 80 para escutar as conexões que chegam:
ss -ltn
Como você pode acompanhar, abaixo, a opção -n
esconde os nomes dos serviços. Experimente dar o mesmo comando, sem esta opção, para ver a diferença.
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 5 *:9090 *:* LISTEN 0 50 127.0.0.1:3306 *:* LISTEN 0 5 127.0.1.1:53 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 128 :::80 :::* LISTEN 0 128 ::1:631 :::*
Como exibir todas as conexões SMTP estabelecidas
ss -o state established '( dport = :smtp or sport = :smtp )'
Como listar todos os nomes de processos em LISTENING e seus respectivos PIDs
O comando abaixo mostra os nomes dos processos em modo escuta, ao lado de seus PIDs (Process IDentification):
sudo ss -ltp
Como você pode notar, este é um dos momentos em que invocar o comando ss com privilégios administrativos traz resultados mais relevantes.
[sudo] password for justincase: State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 5 *:9090 *:* users:(("python2",2855,11)) LISTEN 0 50 127.0.0.1:mysql *:* users:(("mysqld",1220,10)) LISTEN 0 5 127.0.1.1:domain *:* users:(("dnsmasq",1909,5)) LISTEN 0 128 127.0.0.1:ipp *:* users:(("cupsd",2152,11)) LISTEN 0 128 :::http :::* users:(("apache2",1388,4),("apache2",1387,4),("apache2",1386,4),("apache2",1385,4),("apache2",1384,4),("apache2",1375,4)) LISTEN 0 128 ::1:ipp :::* users:(("cupsd",2152,10))
Conexões HTTP estabelecidas com o ss
A linha de comando, abaixo, mostra as conexões HTTP estabelecidas:
ss -o state established '( dport = :http or sport = :http )'
A imagem, a seguir, mostra um exemplo do resultado do comando anterior.
Como encontrar todos os processos locais conectados ao servidor X
Não são poucos os casos em que vi grande utilidade em exibir os processos conectados ao servidor X (X server). Veja a fórmula:
ss -x src /tmp/.X11-unix/*
Como listar todos os soquetes TCP em estado de FIN-WAIT-1
Término da conexão — a fase de finalização de uma conexão usa um handshake (“aperto de mão” ou cumprimento) em 4 vias, em que cada parte conectada conclui independentemente.
Quando uma das pontas deseja terminar uma conexão, ela emite um pacote FIN a que a outra responde com um ACK.
Assim, uma típica finalização, requer um par de segmentos FIN e ACK de cada ponta TCP.
Assim que estas trocas se concluem, a parte que começou, espera um curto período antes de fechar a conexão — durante o qual ela se torna indisponível a se conectar novamente. Isto previne possíveis confusões causadas por pacotes chegando atrasados junto a novas conexões.
Para listar todos os soquetes em estado FIN-WAIT-1 em nossa rede, com seus respectivos timers, use o seguinte comando:
ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 192.168.254/24
Troque os últimos números da linha de comando acima pelos valores correspondentes à sua rede.
FIN-WAIT-1 — estado em que as duas pontas (servidor e cliente) estão esperando por uma requisição da finalização de uma conexão vinda do TCP remoto ou uma permissão para requerê-la.
FIN-WAIT-2 — representa o estado de espera pelo fim da conexão no TCP remoto.
Como exibir as conexões exclusivamente IPv4 OU IPv6
Para exibir apenas as conexões IPv4 socket, use -f inet
ou -4
:
ss -tl -f inet
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 127.0.0.1:smtp *:* LISTEN 0 128 127.0.0.1:9050 *:* LISTEN 0 128 *:90 *:* LISTEN 0 128 *:db-lsp *:* LISTEN 0 5 127.0.0.1:6600 *:*
Para exibir exclusivamente as conexões IPv6, use -f inet6
ou -6
:
ss -tl6
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 ::1:smtp :::* LISTEN 0 128 :::12865 :::* LISTEN 0 128 :::http :::* LISTEN 0 128 :::ssh :::* LISTEN 0 128 ::1:ipp :::*
Há mais para se falar e outras formas de usar o comando ss. Infelizmente, artigos na web não podem se estender muito.
Para quem deseja se aprofundar um pouco mais, há alguns links ao final deste texto.
Recomendo especialmente a Wikipedia, onde você pode encontrar muita informação sobre redes.
Se você for usuário avançado e acredita que pode acrescentar algo mais ao post e aos outros leitores, use a seção de comentários e receba o crédito por sua contribuição.
No mais, divirta-se nas redes!
One reply on “Como ver informações da rede TCP/UDP e de sockets no Linux com ss”
Oi gostaria de tirar uma duvida como sei qual a capacidade de tunnel ssh no servidor por exemplo quero saber se ele suporta 10 30 50 100 pessoas conectadas através do squid3 e ssh nesse caso tenho que saber quantos sockets tcp o servidor suporta?