Respostas:
Se você deseja apenas obter o número e não precisar de mais detalhes, pode ler os dados /proc/net/sockstat{,6}
. Lembre-se de que você deve combinar os dois valores para obter a contagem absoluta de conexões.
Se você deseja obter as informações do próprio kernel, pode usá NETLINK_INET_DIAG
-las para obter as informações do kernel sem precisar lê-las em/proc
Uma maneira mais rápida? Dessa forma, produz uma resposta em uma fração de segundo, na verdade, leva 0,009 segundos no meu computador!
Você está procurando uma maneira que exija menos digitação? Nesse caso, defina um alias, por exemplo
alias tcpcount="wc -l /proc/net/tcp"
Agora você pode apenas digitar o apelido, por exemplo, tcpcount
é o que eu usei no meu exemplo, para obter esse número.
Digite a linha ou adicione-a ao seu .bashrc para que o alias seja definido sempre que você efetuar login.
Para um grande número de conexões, o seguinte pode ser executado um pouco mais rápido (e um pouco mais lento para um número muito pequeno de conexões):
#!/bin/bash
/usr/bin/tail -1 /proc/net/tcp | (IFS=:
read COUNT DISCARD
echo $COUNT
)
Ou talvez ...
awk 'END {print NR}' /proc/net/tcp
Ambas as soluções assumem que "wc" não é o ideal para contar apenas o número de linhas. Meus testes mostram que essa suposição é verdadeira.
O primeiro trabalha com a premissa de que o comando tail é realmente bom em descartar dados desnecessários, tanto que compensa a criação de um subcasco extra e o trabalho extra em variáveis de ambiente. Ele aproveita o fato de que as linhas em / proc / net / tcp já estão numeradas para eliminar a necessidade de contar as linhas. A solução final assume que o awk conta bem o suficiente para compensar qualquer desvantagem devido ao carregamento de um programa maior e à criação de vários processos. A solução awk tem o benefício adicional de se encaixar perfeitamente em uma definição simples de alias de uma linha (o que oferece benefícios adicionais por não haver script chamado, portanto, nenhum processo de shell extra é bifurcado, oferecendo vantagem adicional de mili-segundos).
/proc/net/tcp
. Você pode tentar netstat -n -t | wc -l
, mas meu palpite é que netstat também lê/proc/net/tcp
netstat -nt
com cerca de 180.000 conexões. Eu não vejo nenhuma razão pela qual deve ser tão lento ... (leitura /proc/net/tcp
também é muito lento)
awk
abordagem é lamentavelmente mais lenta que wc
. tail
parece estar a par wc
.
Use o ss -s
comando para obter a resposta detalhada.
ss -s