![/proc/net/tcp에 나타나지 않는 /proc/[pid]/net/tcp의 연결](https://linux55.com/image/162032/%2Fproc%2Fnet%2Ftcp%EC%97%90%20%EB%82%98%ED%83%80%EB%82%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%2Fproc%2F%5Bpid%5D%2Fnet%2Ftcp%EC%9D%98%20%EC%97%B0%EA%B2%B0.png)
모든 네트워크 연결을 얻고 이를 사용하여 PID와 연결하는 코드를 구현하고 있습니다.
tcp4의 경우 내가 나열한 각 pid에 대해 거기에서 소켓의 링크를 검색하고 해당 inode 번호를 읽고 연결에 대한 세부 정보를 얻기 /proc/pid/fd
위해 검색합니다 ./proc/net/tcp
그러나 inode 번호를 찾아보면 다음과 같은 결과 /proc/net/tcp
가 나옵니다.더 적은에서 검색했을 때보다 연결이 더 좋아졌습니다 /proc/[pid]/net/tcp
. 예를 들어, 위 프로세스를 의존하면서 실행하면 /proc/net/tcp
브라우저에서 열린 소켓만 볼 수 있는 반면, 의존하면 /proc/[pid]/net/tcp
동생과 "java" 프로세스가 열린 연결을 갖는 것을 볼 수 있습니다.
그렇다면 나는 그것에 의존해야 하는가 /proc/net/tcp
, 아니면 /proc/[pid]/net/tcp
이 목적을 위해 의지해야 하는가? psutil은 Python에서 널리 사용되는 패키지이고 /proc/net/tcp
한쪽에서는 이를 사용하고 있기 때문에 혼란스럽습니다 /proc/[pid]/net/tcp
.
답변1
/proc/net
예 심볼릭 링크 이므로 /proc/self/net
프로세스와 확인된 프로세스가 다른 상태에 있는 경우에만 /proc/net
및 /proc/[pid]/net
가 다릅니다.[pid]
/proc/net
네트워크 네임스페이스.
모든 소켓을 나열하려면 동일한 네트워크 네임스페이스에 있는 두 프로세스의 모든 네임스페이스를 확인해야 합니다. 두 프로세스의 /proc/PID/ns/net
inode 번호는 동일합니다. 이를 통해 시스템의 다양한 네트워크 네임스페이스를 모두 열거할 수 있습니다.