/ proc / fd에서 소켓 파일에 대한 자세한 내용은 어떻게 알 수 있습니까? mypid / 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에 대한 연결입니다). 어떤 연결에 연결되어 있습니다. 어떻게해야합니까?

더 일반적으로, 소켓의 다른 쪽 끝에 무엇이 있는지 OS에 어떻게 물어볼 수 있습니까?



답변

lsof 명령

좋은 옵션은입니다 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관심있는 소켓을 필터링하거나 필터링 하십시오.

나는 모든 명령을 결합 할 수 있다고 확신하지만 시작하기에 충분해야합니다.