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/servicesque 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/udpe/proc/net/udp6. A saída denetstat -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 dextcpcbstructs. Provavelmente, é melhor olhar para o código-fontenetstatpara ver como interpretar essas estruturas.