netstat(/proc/net): 사용자가 소켓 루트와 연결된 이유는 무엇입니까? "원격" 프로세스의 사용자 ID를 얻는 방법은 무엇입니까?

netstat(/proc/net): 사용자가 소켓 루트와 연결된 이유는 무엇입니까? "원격" 프로세스의 사용자 ID를 얻는 방법은 무엇입니까?

우분투 16.04

2개의 노드 앱인 app-1과 app-2가 있고 사용자 이름이 해당 앱 이름과 일치하며 동일한 인스턴스(각각 포트 8001 및 8002)에서 로컬로 수신 대기합니다. app-1이 app-2에 요청하면 app-2의 요청을 처리하는 소켓의 RemoteHost를 찾을 수 있습니다. 그런 다음 netstat를 통해 이 RemoteHost를 조회하고 일부 사용자/프로세스 정보를 검색하려고 하면 소켓과 연결된 사용자가 uid: 0또는 이라는 것을 알게 됩니다 root. 내 기대는 이 연결과 관련된 사용자가 app-1요청을 생성한 응용 프로그램이기 때문이라는 것입니다. 그래서 내 질문의 첫 번째 부분은: 왜 사용자 root가 아닌가 app-1?

파트 2: 내 목표는 remoteHost(예: 127.0.0.1:53900)의 정보만을 기반으로 원격 프로세스의 사용자 ID를 얻는 것입니다. OS는 어떤 프로세스/사용자 ID가 해당 호스트/포트 조합을 사용하고 있는지 정확히 알아야 하는 것 같습니다. 따라서 netstat이것이 작동하지 않는다고 가정하면 이전 단락에서 언급한 이유로 이 정보를 얻기 위해 어떤 다른 시스템 호출이나 유틸리티를 볼 수 있습니까?

답변1

당황스럽게도 1부에서 문제는 time-wait한쪽이 연결을 닫은 후에만 연결을 확인하고 있었다는 점인 것 같습니다(상태는 ). 테스트로 연결 유형을 연결 유지로 변경했는데 이제 사용자 정보가 예상대로 표시됩니다.

파트 2에 대한 대답은 netstat(/proc/net/*)과 동일한 파일을 읽고 검색 하는 것입니다 remoteHost.

관련 정보