/proc/fd에서 소켓 파일에 대한 자세한 정보를 어떻게 찾을 수 있습니까?

/proc/fd에서 소켓 파일에 대한 자세한 정보를 어떻게 찾을 수 있습니까?

/proc/$mypid/fd/를 보면 다음 파일이 보입니다.

lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted)
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 5 -> socket:[1424055882]

코드에 액세스할 수 있으므로 이러한 소켓이 TCP 연결(일부 시스템에서는 포트 5672에 연결되고 다른 시스템에서는 포트 3306에 연결됨)과 연결되어 있다는 것을 알고 있지만 어떤 소켓이 어떤 연결에 바인딩되어 있는지 알고 싶습니다. 어떻게 해야 하나요?

보다 일반적으로 말하면 소켓의 반대쪽 끝에 무엇이 있는지 운영 체제에 어떻게 물어볼 수 있습니까?

답변1

명령의

좋은 선택은 다음과 같습니다 lsof. 앞서 man lsof언급했듯이 관련 정보를 쉽게 얻을 수 있습니다 open files such as Internet sockets or Unix Domain sockets.


그걸 써

/proc/$PID/fd/먼저, 나열된 콘센트 번호를 살펴보세요 .
예를 들어 socket:[14240]관심이 있을 수 있습니다.

그런 다음 lsof -i -a -p $PID사용된 모든 네트워크 파일 목록을 인쇄 하는 데 사용됩니다 $PID.

  • -i사용자 또는 프로세스에 속하는 네트워크 파일 목록 생성

  • -a주어진 매개변수의 논리적 조합 또는 AND

  • -p $PID프로세스에 대한 정보만 선택하세요.

PID로 실행되는 브라우저의 일반적인 출력은 2543다음과 같습니다.

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
browser 2543 pidi   55u  IPv4  14240      0t0  TCP  pidi.router.lan:55038->stackoverflow.com:https (ESTABLISHED)

그리고 더 많은 유사한 라인.

엄청난! 이제 칼럼을 자세히 살펴보세요 DEVICE. 앞서 나열한 매장과 일치합니다 /proc/$PID/fd/!
NAME부분을 통해 소켓 반대편에 무엇이 있는지 알 수 있습니다.

실제 세계에서는 많은 출력을 얻을 수 있지만 필터링되거나 grep관심 있는 소켓에 대해서만 출력됩니다.

모든 명령을 결합하는 것이 가능하다고 확신하지만 시작하는 데에는 이것만으로도 충분합니다.

관련 정보