Mudanças entre as edições de "Roteiro Rápido do SS - Socket Statistics"
Linha 234: | Linha 234: | ||
== Referências == | == Referências == | ||
− | [http://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html nixCraft] | + | *[http://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html nixCraft] |
− | [http://www.binarytides.com/linux-ss-command/ BinaryTides] | + | *[http://www.binarytides.com/linux-ss-command/ BinaryTides] |
Edição das 18h46min de 11 de agosto de 2014
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
|