![네트워크 포트 상태](https://linux55.com/image/60391/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%20%ED%8F%AC%ED%8A%B8%20%EC%83%81%ED%83%9C.png)
에서 각 네트워크 포트에 필요한 세부 정보를 얻을 수 있기를 원합니다 /etc/services
. 각 포트의 상태를 얻기 위해 C++ 프로그램을 개발해야 한다면 어떻게 시작해야 합니까? 나는 내 프로그램에서 전화나 그와 유사한 것을 허용하지 않습니다 netstat
. ss
정보를 얻을 수 있는 파일이 파일 시스템에 있습니까?
답변1
AND에 대해 외부 조인을 구현하려는지 netstat -a -t -u
또는 다른 것에 대해 구현하려는지는 아직 명확하지 않지만 다음은 도움이 될 수 있는 몇 가지 아이디어입니다./etc/services
netstat -a -t -u
TCP 및 UDP 포트 번호 범위는 1~65536입니다.
/etc/services
당신이 언급한 파일은 다음과 같습니다하위 집합~의유명한 항구그리고등록된 포트. 더 큰 목록은 다음 위치에 있습니다.IANA 서비스 이름 및 전송 프로토콜 포트 번호 레지스트리. 당신은 그것을 사용할 수 있습니다getService()검색에 나열된 모든 기록을 검색합니다/etc/services
./proc/net/tcp
Linux에서는 파일/proc/net/tcp6
을 읽어/proc/net/udp
수신, 연결, 연결 또는 부분적으로 닫힌 모든 소켓과 해당 로컬 및 원격 주소와 포트의 목록을 얻을 수 있습니다/proc/net/udp6
. 출력은netstat -a -t -u -n
이 파일과 거의 동일하지만 더 아름답습니다. 주소, 포트 번호, 상태는 모두 16진수입니다. 다음 이름을 사용하여 상태 필드의 멋진 버전을 생성할 수 있습니다/usr/include/netinet/tcp.h
.
낱낱이 세다 { TCP_ESTABLISHED = 1, TCP_SYN_SENT, TCP_SYN_RECV, TCP_FIN_WAIT1, TCP_FIN_WAIT2, TCP_TIME_WAIT, TCP_닫기, TCP_CLOSE_WAIT, TCP_LAST_ACK, TCP_듣기, TCP_CLOSING };
- FreeBSD에서는 호출할 수
sysctlbyname("net.inet.tcp.pcblist",...)
있으며 구조체 배열을 검색합니다xtcpcb
.netstat
이러한 구조가 어떻게 해석되는지 확인하려면 소스 코드를 살펴보는 것이 가장 좋습니다 .
답변2
netstat
예이것네트워킹의 기초를 학습하기 위한 도구입니다. 어떤 운영 체제를 사용하고 있는지 지정하지 않았지만 이 경우 Linux가 netstat -tun | awk '{ if ($4 ~ ":<portNumber>") print }'
원하는 대부분의 작업을 수행해야 한다고 가정합니다. 콜론과 포트 번호로 끝나는 소켓을 선택하여 모든 TCP 및 UDP 소켓을 인쇄합니다.
sshd
예를 들어, 내 시스템에 연결된 사람을 찾습니다 .
[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 ~]#
마음에 들지 않으면 언제든지 출력물을 시각적으로 스캔 awk
할 수 있습니다 . netstat -tun | less
목록에 포트가 없으면 netstat
시스템에 심각한 문제가 있는 것입니다.
답변3
다음 명령을 사용하십시오.
nmap localhost -p 0-65535
그러면 시스템에 열려 있는 모든 포트가 나열됩니다.