답변:
예를 들어 / proc / $ PID / net / tcp 파일을 읽고 프로세스가 연 TCP 포트에 대한 정보를 얻을 수 있습니다.
이 파일은 프로세스가 연 tcp 포트 목록이 아닙니다 . 현재 네트워크 네임 스페이스에서 열려있는 모든 tcp 포트의 목록이며 동일한 네트워크 네임 스페이스에서 실행중인 프로세스 의 내용 은와 동일 합니다 /proc/net/tcp
.
프로세스에서 열린 포트를 찾으려면에서 소켓 설명자 목록을 가져온 /proc/<pid>/fd
다음 해당 설명자를의 inode
필드 와 일치시켜야 합니다 /proc/net/tcp
.
fd
스레드의 디렉토리는 단지 반복 fd
프로세스의 디렉토리.
부디
cat /proc/$PID/net/tcp
그리고 당신은 이와 같은 결과를 얻을 것입니다
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:01BB 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 2891985097 1 0000000000000000 100 0 0 10 0
출력의 두 번째 열 (local_address)은 16 진수 포트를 보여줍니다. 16 진수 코드를 10 진수로 변환하려면 프로그래밍 계산기를 사용하십시오.
예를 들어, 포트 : 01BB (16 진수)는 HTTPS 기본 포트 인 433 (10 진수)과 같습니다.
fd
각 스레드의 모든 디렉토리 를 거쳐야 합니까? 아니면/proc/pid/fd
디렉토리 가 디렉토리를 "상속"/proc/pid/task/tid/fd
합니까?