/ 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
관심있는 소켓을 필터링하거나 필터링 하십시오.
나는 모든 명령을 결합 할 수 있다고 확신하지만 시작하기에 충분해야합니다.