/ proc / fd에서 소켓 파일에 대한 자세한 내용은 어떻게 알 수 있습니까?


33

/ 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에 어떻게 물어볼 수 있습니까?


1
사용 socat....
heemayl

답변:


40

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관심있는 소켓을 필터링하거나 필터링 하십시오.

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


고맙습니다! 공감 및 수락. lsof에 소켓이 "unix 0xffff88002704d380 0t0 1423733559 socket"으로 나타나는 것을 보았습니다. 어떻게 0xffff88002704d380이 무엇인지 파헤 쳐야합니까?
benhsu

1
"unix 0xfff ..."는 unix_sock 구조의 커널 메모리 주소처럼 보입니다. 이 구조에는 소켓 끝점에 대한 포인터가 포함되어 있습니다. 를보십시오 grep -rni ffff88002704d380 /proc. / proc / 아래 어딘가에 답이있을 수 있습니다 cat. 파일 grep이 발견되었습니다. 그러나 이것에 나를 고정시키지 마십시오 ... 여기 끔찍한 잘못 일 수 있습니다.
pidi

lsof에서 소켓에 대한 다른 정보를 읽고 /proc/net/tcp, /proc/net/tcp6, /proc/net/udp, 소켓 유형에 따라에 정도.
Jesin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.