%3A%20%EC%82%AC%EC%9A%A9%EC%9E%90%EA%B0%80%20%EC%86%8C%EC%BC%93%20%EB%A3%A8%ED%8A%B8%EC%99%80%20%EC%97%B0%EA%B2%B0%EB%90%9C%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%22%EC%9B%90%EA%B2%A9%22%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98%20%EC%82%AC%EC%9A%A9%EC%9E%90%20ID%EB%A5%BC%20%EC%96%BB%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
우분투 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
.