Status das portas de rede

1

Espero que seja possível obter os detalhes necessários de cada porta de rede em /etc/services . Se eu tiver que desenvolver um programa em C ++ para obter o status de cada porta, como devo iniciá-lo? Eu não tenho permissão para chamar netstat , ss ou qualquer coisa semelhante do meu programa. Existe algum arquivo no sistema de arquivos do qual eu possa obter as informações?

    
por Jackzz 26.12.2014 / 12:39

3 respostas

2

Ainda não está claro se você deseja implementar netstat -a -t -u ou a associação externa de /etc/services e netstat -a -t -u ou outra coisa, mas aqui estão algumas ideias que podem ajudar:

  • Os números das portas TCP e UDP variam de 1 a 65536. O arquivo /etc/services que você mencionou lista um subconjunto da portas bem conhecidas e portas registradas . Uma lista maior está em o nome da empresa e o número da porta do protocolo de transporte da IANA Registro . Você pode usar o getservent () para recuperar cada registro listado em /etc/services .

  • No Linux, você pode obter uma lista de todos os soquetes que estão em estado de escuta, conexão, conectado ou parcialmente fechado e seus endereços e portas locais e remotos, lendo os arquivos /proc/net/tcp , /proc/net/tcp6 , /proc/net/udp e /proc/net/udp6 . A saída de netstat -a -t -u -n é quase exatamente igual a esses arquivos, apenas muito mais bonita. Os endereços, números de porta e estados estão em hexadecimal. A versão bonita do campo de estado pode ser produzida usando os nomes em /usr/include/netinet/tcp.h :

    enum
    {
      TCP_ESTABLISHED = 1,
      TCP_SYN_SENT,
      TCP_SYN_RECV,
      TCP_FIN_WAIT1,
      TCP_FIN_WAIT2,
      TCP_TIME_WAIT,
      TCP_CLOSE,
      TCP_CLOSE_WAIT,
      TCP_LAST_ACK,
      TCP_LISTEN,
      TCP_CLOSING
    };
  • No FreeBSD, você chamaria sysctlbyname("net.inet.tcp.pcblist",...) , que recupera uma matriz de xtcpcb structs. Provavelmente, é melhor olhar para o código-fonte netstat para ver como interpretar essas estruturas.
por 30.12.2014 / 04:09
2

netstat é a ferramenta usada para conhecimento básico de conexões de rede. Você não especificou em qual sistema operacional você estava, mas assumirei o Linux. Nesse caso, netstat -tun | awk '{ if ($4 ~ ":<portNumber>") print }' deve fazer a maior parte do que você está querendo. Isso imprime todos os soquetes TCP e UDP e seleciona algo que termina em dois-pontos e o número da porta que você está procurando.

Por exemplo, procurando pessoas conectadas a sshd no meu sistema.

[root@xxx5b ~]# netstat -tun | awk '{ if ($4 ~ ":22") print }'
tcp        0     64 10.xxx.5.140:22             10.xxx.255.178:51976         ESTABLISHED
tcp        0      0 10.xxx.5.140:22             10.xx.255.178:58535         ESTABLISHED
[root@xxx5b ~]#

Se você não gosta do awk , pode sempre apenas netstat -tun | less e apenas verificar visualmente a saída. Se não houver uma porta listada em netstat , há algo muito errado com seu sistema.

    
por 26.12.2014 / 16:56
-1

Use este comando:

nmap localhost -p 0-65535

Isso listará todas as portas abertas no seu sistema.

    
por 26.12.2014 / 16:29