우분투 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
.