Roteiro Rápido do SS - Socket Statistics

De MediaWiki do Campus São José
Revisão de 18h53min de 11 de agosto de 2014 por Arliones.hoeller (discussão | contribs) (→‎Referências)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar
A versão imprimível não é mais suportada e pode ter erros de renderização. Atualize os favoritos do seu navegador e use a função de impressão padrão do navegador.

Roteiro Rápido do SS - Socket Statistics

Tradicionalmente, o comando netstat, distribuído pelo pacote net-tools, era utilizado para coletar estatísticas de conexões de redes em sistemas Unix/Linux. Contudo, há algum tempo este comando vem sendo substituído pelo comando ss, integrante do pacote iproute. Este roteiro rápido sobre o ss apresenta 10 exemplos de uso do socket statistics.

O ss mostra mais informações que o netstat é é mais rápido. O netstat lê vários arquivos do /proc para coletar informações, o que o torna lento quando há muitas conexões ativas, requerendo que ele processe muitos arquivos. O ss busca suas informações diretamente no kernel, sem a necessidade de abertura de arquivos, tornando-o mais rápido. Além disso, as opções utilizadas no ss são similares ao netstat, tornado a substituição fácil.

Exemplo 1: Listando todas as conexões

O comando mais simples para isto é listar todas as conexões como no exemplo abaixo. A saída conterá detalhes de todos sockets TCP, UDP e Unix abertos no sistema.

SS: Exemplo 1
arliones.hoeller:~$ ss
State      Recv-Q Send-Q                                                       Local Address:Port                                                           Peer Address:Port   
CLOSE-WAIT 1      0                                                           150.162.62.103:40369                                                         91.189.89.144:http    
ESTAB      0      0                                                           150.162.62.103:ssh                                                           150.162.62.19:54576   
ESTAB      0      0                                                           150.162.62.103:948                                                            150.162.62.1:nfs     
ESTAB      0      48                                                          150.162.62.103:ssh                                                           150.162.62.19:54302

Exemplo 2: Filtrar conexões TCP, UDP ou Unix

Para ver apenas conexões TCP, UDP ou Unix pode-se usar as opções t, u ou x, como no caso apresentado abaixo. A opção t sozinha listará apenas as conexões que estão "estabelecidas" ou "conectadas", não listando as conexões no estado "ouvindo". Para listar todas, deve-se utilizar a opção -a junto com o filtro.

SS: Exemplo 2
arliones.hoeller:~$ ss -t
State      Recv-Q Send-Q                                     Local Address:Port                                         Peer Address:Port   
CLOSE-WAIT 28     0                                          172.18.18.134:44222                                        91.189.92.10:https   
CLOSE-WAIT 28     0                                          172.18.18.134:43885                                        91.189.92.10:https   
ESTAB      0      0                                          172.18.18.134:47327                                       64.233.186.95:http    
ESTAB      0      0                                          172.18.18.134:47329                                       64.233.186.95:http    
ESTAB      0      0                                          172.18.18.134:44396                                      199.16.158.104:https   
CLOSE-WAIT 28     0                                          172.18.18.134:48739                                        91.189.92.11:https   
ESTAB      0      0                                          172.18.18.134:39354                                     173.194.118.216:http    
ESTAB      0      0                                          172.18.18.134:60996                                       23.38.155.112:http    
ESTAB      0      0                                          172.18.18.134:58321                                      200.143.247.11:http    
ESTAB      0      0                                          172.18.18.134:db-lsp                                      172.18.19.233:54460   
ESTAB      0      0                                          172.18.18.134:42701                                     108.160.162.103:http    
...


arliones.hoeller:~$ ss -ta
State      Recv-Q Send-Q                                     Local Address:Port                                         Peer Address:Port   
LISTEN     0      50                                             127.0.0.1:mysql                                                   *:*       
LISTEN     0      5                                              127.0.1.1:domain                                                  *:*       
LISTEN     0      128                                            127.0.0.1:ipp                                                     *:*       
LISTEN     0      128                                                    *:db-lsp                                                  *:*       
CLOSE-WAIT 28     0                                          172.18.18.134:44222                                        91.189.92.10:https   
CLOSE-WAIT 28     0                                          172.18.18.134:43885                                        91.189.92.10:https   
CLOSE-WAIT 28     0                                          172.18.18.134:48739                                        91.189.92.11:https   
ESTAB      0      0                                          172.18.18.134:db-lsp                                      172.18.19.233:54460   
ESTAB      0      0                                          172.18.18.134:42701                                     108.160.162.103:http    
CLOSE-WAIT 28     0                                          172.18.18.134:48747                                        91.189.92.11:https   
CLOSE-WAIT 28     0                                          172.18.18.134:44220                                        91.189.92.10:https   
CLOSE-WAIT 28     0                                          172.18.18.134:44238                                        91.189.92.10:https   
...

Atividade extra:

  • Filtre os sockets UDP e Unix (um comando para cada).


Exemplo 3: Mostra IP ao invés de nomes

Para gerar a saída mais rapidamente, é possível utilizar a opção n para que o ss não resolva os endereços IP, ou seja, não gere consultas DNS para cada entrada da tabela gerada. Isto também vai impedir a resolução de nomes para as portas utilizadas.

SS: Exemplo 3
arliones.hoeller:~$ ss -nt
State      Recv-Q Send-Q                                       Local Address:Port                                         Peer Address:Port 
ESTAB      0      0                                            172.18.18.134:37858                                     173.194.118.168:443   
CLOSE-WAIT 28     0                                            172.18.18.134:44222                                        91.189.92.10:443   
CLOSE-WAIT 28     0                                            172.18.18.134:43885                                        91.189.92.10:443   
CLOSE-WAIT 28     0                                            172.18.18.134:48739                                        91.189.92.11:443   
ESTAB      0      0                                            172.18.18.134:44539                                       78.40.123.180:80    
ESTAB      0      0                                            172.18.18.134:42701                                     108.160.162.103:80    
...


Exemplo 4: Exibir apenas sockets ouvindo conexões

No comando abaixo, a opção l listará apenas os sockets que estão aguardando conexões. Por exemplo, um servidor Apache (web) abre um sockect no modo listen na porta 80, onde aguardará conexões.

SS: Exemplo 4
arliones.hoeller:~$ ss -ltn
State      Recv-Q Send-Q                                       Local Address:Port                                         Peer Address:Port 
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                                                      *:17500                                                   *:*     
LISTEN     0      128                                                     :::80                                                     :::*     
LISTEN     0      128                                                    ::1:631                                                    :::*

Atividade extra:

  • Liste os sockets UDP e Unix ouvindo por conexões (um comando para cada).

Exemplo 5: Imprimir nome e PID dos processos donos dos sockets

No Unix/Linux, todo socket é propriedade de um processo. Em algumas situações pode ser interessante identificar o processo responsável, por exemplo, por manter uma das portas do computador/servidor aberta. O comando no exemplo abaixo, através da opção p, lista o processo dono de cada porta ouvindo por conexões (l).

SS: Exemplo 5a
arliones.hoeller:~$ ss -ltp
State      Recv-Q Send-Q                                     Local Address:Port                                         Peer Address:Port   
LISTEN     0      50                                             127.0.0.1:mysql                                                   *:*       
LISTEN     0      5                                              127.0.1.1:domain                                                  *:*       
LISTEN     0      128                                            127.0.0.1:ipp                                                     *:*       
LISTEN     0      128                                                    *:db-lsp                                                  *:*        users:(("dropbox",2582,35))
LISTEN     0      128                                                   :::http                                                   :::*       
LISTEN     0      128                                                  ::1:ipp                                                    :::*

Contudo, o mapeamento entre alguns processos e seus sockets apenas está disponível para o superusuário (root). No exemplo abaixo, o mesmo comando é executado como superusuário utilizando o sudo.

SS: Exemplo 5b
arliones.hoeller:~$ sudo ss -ltp
[sudo] password for arliones.hoeller: 
State      Recv-Q Send-Q                                     Local Address:Port                                         Peer Address:Port   
LISTEN     0      50                                             127.0.0.1:mysql                                                   *:*        users:(("mysqld",1111,10))
LISTEN     0      5                                              127.0.1.1:domain                                                  *:*        users:(("dnsmasq",1815,5))
LISTEN     0      128                                            127.0.0.1:ipp                                                     *:*        users:(("cupsd",942,11))
LISTEN     0      128                                                    *:db-lsp                                                  *:*        users:(("dropbox",2582,35))
LISTEN     0      128                                                   :::http                                                   :::*        users:(("apache2",1303,4),("apache2",1302,4),("apache2",1301,4),("apache2",1300,4),("apache2",1299,4),("apache2",1287,4))
LISTEN     0      128                                                  ::1:ipp                                                    :::*        users:(("cupsd",942,10))

Exemplo 6: Imprimir resumo de estatísticas

A opção s imprime estatísticas do sistema, como no exemplo abaixo.

SS: Exemplo 6
arliones.hoeller:~$ ss -s
Total: 780 (kernel 0)
TCP:   94 (estab 20, closed 30, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*	  0         -         -        
RAW	  0         0         0        
UDP	  16        10        6        
TCP	  64        61        3        
INET	  80        71        9        
FRAG	  0         0         0

Exemplo 7: Mostra informação de tempo

A opção o apresenta as informações de tempo de cada conexão, como no exemplo abaixo para as conexões TCP.

SS: Exemplo 7
arliones.hoeller:~$ ss -tn -o
State      Recv-Q Send-Q                                       Local Address:Port                                         Peer Address:Port 
CLOSE-WAIT 28     0                                            172.18.18.134:48739                                        91.189.92.11:443   
ESTAB      0      0                                            172.18.18.134:44539                                       78.40.123.180:80     timer:(keepalive,43sec,0)
ESTAB      0      0                                            172.18.18.134:42701                                     108.160.162.103:80    
CLOSE-WAIT 28     0                                            172.18.18.134:36591                                        91.189.92.23:443   
ESTAB      0      0                                            172.18.18.134:34382                                       173.194.68.16:993   
...

Exemplo 8: Filtrar conexões usando IPv4 ou IPv6

Para mostrar apenas sockets IPv4 use -f inet ou -4.

SS: Exemplo 8a
arliones.hoeller:~$ ss -tl -f inet
State      Recv-Q Send-Q                                     Local Address:Port                                         Peer Address:Port   
LISTEN     0      50                                             127.0.0.1:mysql                                                   *:*       
LISTEN     0      5                                              127.0.1.1:domain                                                  *:*       
LISTEN     0      128                                            127.0.0.1:ipp                                                     *:*       
LISTEN     0      128                                                    *:db-lsp                                                  *:*

Para mostrar apenas sockets IPv6 use -f inet6 ou -6.

SS: Exemplo 8b
arliones.hoeller:~$ ss -tl6
State      Recv-Q Send-Q                                     Local Address:Port                                         Peer Address:Port   
LISTEN     0      128                                                   :::http                                                   :::*       
LISTEN     0      128                                                  ::1:ipp                                                    :::*


Exemplo 9: Filtrando conexões TCP pelo estado

O comando ss permite filtrar conexões pelo seu estado, ou seja, established, closed, connected, etc. O comando abaixo, por exemplo, mostra todas as conexões TCP que usam IPv4 e estão no estado established.


SS: Exemplo 9
arliones.hoeller:~$ ss -t4 state established
Recv-Q Send-Q                                          Local Address:Port                                              Peer Address:Port   
0      0                                               172.18.18.134:38991                                           191.191.70.105:29742   
0      0                                               172.18.18.134:44539                                            78.40.123.180:http    
0      0                                               172.18.18.134:42701                                          108.160.162.103:http    
0      0                                               172.18.18.134:39872                                           111.221.77.159:40033   
0      0                                               172.18.18.134:34382                                            173.194.68.16:imaps   
0      0                                               172.18.18.134:39266                                           200.135.37.117:ldap    
0      0                                               172.18.18.134:39264                                           200.135.37.117:ldap    
0      0                                               172.18.18.134:55074                                            172.18.109.10:microsoft-ds 
0      0                                               172.18.18.134:48637                                           173.194.41.177:https   
0      0                                               172.18.18.134:39982                                           200.135.37.117:ldap    
0      0                                               172.18.18.134:41332                                            91.190.216.55:12350   
0      0                                               172.18.18.134:44137                                             150.162.62.2:imaps   
0      0                                               172.18.18.134:49030                                             74.125.29.16:imaps   
0      0                                               172.18.18.134:55944                                           134.170.19.178:https   
0      0                                               172.18.18.134:40947                                           200.135.37.117:ldap    
0      0                                               172.18.18.134:40717                                           200.135.37.117:ldap    
0      0                                               172.18.18.134:34296                                            173.194.68.16:imaps   
0      0                                               172.18.18.134:37497                                            200.135.190.2:imap2   
0      0                                               172.18.18.134:33714                                            173.194.68.16:imaps


Exemplo 10: Filtrando conexões pelo endereço e número da porta

O comando ss também suporta filtragem por endereço IP e porta de um socket. O exemplo abaixo apresenta todos sockets utilizando a porta do SSH como porta de origem ou destino.

SS: Exemplo 10a
arliones.hoeller:~$ ss -at '( dport = :ssh or sport = :ssh )'
State       Recv-Q Send-Q                                Local Address:Port                                    Peer Address:Port   
LISTEN      0      128                                              :::ssh                                               :::*       
LISTEN      0      128                                               *:ssh                                                *:*       
ESTAB       0      0                                      172.18.129.3:42619                                  150.162.62.97:ssh

Sockets com porta destino 443 ou 80.

SS: Exemplo 10b
arliones.hoeller:~$ ss -nt '( dst :443 or dst :80 )'
State       Recv-Q Send-Q                                  Local Address:Port                                    Peer Address:Port 
ESTAB       0      0                                        172.18.129.3:56492                                 63.245.216.132:443   
ESTAB       0      0                                        172.18.129.3:60719                                 64.233.186.189:443   
CLOSE-WAIT  1      0                                        172.18.129.3:47454                                   91.189.94.25:80    
ESTAB       0      0                                        172.18.129.3:38591                                 173.194.118.96:443

Referências

Nos links abaixo há mais exemplos de uso do ss.