특정 PID가 수신하는 포트를 확인하는 방법은 무엇입니까?


13

OS X에서 일부 포트를 수신하는 특정 프로세스의 PID가 있으며이 프로세스가 수신하는 포트를 알아야합니다. 어떻게하니?

lsof어떤 프로세스가 어떤 포트를 수신하고 있는지 알기 위해 사용할 수 있지만 역 연산을 수행해야합니다.

감사합니다.

UPD

OS X은 BSD utils를 사용하므로 netstatLinux 가 아닌 BSD 가 netstat있습니다. 리눅스 netstat-pPID를 보여줄 수있는 옵션을 가지고 있으며 , BSD netstat-p포트를 지정할 때 사용 하며 PID를 보여줄 수있는 옵션이 없습니다.


프로세스가 수신 대기중인 포트를 찾으려고한다는 의미입니까? netstat당신을 위해 이것을 할 수 있습니다. grepnetstat
Centimane

또한 lsof사용법은 한 가지 방법이 아닙니다. 당신은 같은 것을 할 수 있습니다 lsof|grep ${PID}. 모든 것을 조잡하게 덤프 grep하고 PID가있는 라인을 선택합니다. 실수로 다른 값과 일치하는 PID 번호로 인해 관련없는 라인이 표시 될 수 있지만 가능성은
적습니다.

@ 데이브, 네, 당신은 날 따라 와요. 알다시피, BSD 버전의 netstatPID는 PID를 표시 할 수 없습니다.
shau-kote

@ MelBurslan 깔끔한 솔루션처럼 보이지 않습니다. 또한 빠르지는 않습니다. MBP에 시간이 걸립니다.
shau-kote

답변:


13

나는 깊은 독서를 통해 스스로 해결책을 찾았습니다 man lsof. (예, RT * M이 여전히 도움이됩니다.) 조준 해 주셔서 감사합니다.

해결책은 다음과 같습니다 lsof -aPi -p 555 (555는 PID입니다).

설명:

  1. -p PID 번호를 지정합니다.
  2. -i 네트워크 장치 만 표시합니다.
  3. -a 위의 두 가지 조건을 AND로 (그렇지 않으면 OR로 표시됨);
  4. -P 기본적으로 포트 이름 대신 포트 번호를 표시합니다.

또한, lsof -aPi4 -p 555또는lsof -aPi6 -p 55 IPv4 또는 IP6 만 따라 해결합니다.

다른 프로그램 -Fn옵션으로 출력을 구문 분석하는 경우 도움이 될 수 있습니다. 이 옵션 lsof을 사용하면 멋진 형식의 출력 대신 "다른 프로그램의 출력"이 생성됩니다. lsof -aPi4 -Fn -p 555다음과 같이 출력됩니다 :

p554
nlocalhost:4321

추신 : OS X El Capitan에서 테스트했지만 Linux에서도 작동합니다.


6

lsof네트워크 포트를 포함하여 프로세스가 연 파일에 대한 정보를 제공합니다. OSX를 포함한 거의 모든 유닉스 시스템에서 사용할 수 있습니다 .

유닉스에 대한 로제타 스톤 OSX의 "파일이나 포트에 일치 과정"에 대한 다른 도구를 나열하지 않습니다.

TCP 포트에서 수신 대기중인 프로세스를 나열하려면 다음을 사용할 수 있습니다.

lsof -iTCP -sTCP:LISTEN

lsof -iUDPUDP 소켓이 열린 프로세스를 나열합니다. lsof -i모든 개방형 네트워크 소켓 (TCP 클라이언트, TCP 서버 및 기타 IP 프로토콜)을 나열합니다.


0

어떤 포트가 수신 대기 중인지 알고 싶다면 netstat의 -p 옵션을 사용할 수 있습니다. 수퍼 유저 여야합니다.

$ sudo netstat -nlp | grep 80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

그것에 대해 더 알고 싶다면이 링크를 사용해보십시오.


GNU netstat에 관한 것입니다. OS X가 있으므로 BSD를 사용 netstat합니다. -pTCP / IP 포트를 지정 하는 데 사용 되며 PID를 표시하는 옵션이 없습니다.
shau-kote

0

FreeBSD에서는 sockstat이 정보를 사용할 수 있습니다 . sockstatMac이 없기 때문에 OS X에을 가지고 있는지 확실 하지 않습니다.

예를 들어, 모든 TCPv4 연결을 보려면

sockstat -4


sockstat내 Mac 에는 명령 이 없습니다 . :(
shau-kote

0

netstat를 grep, awk 및 sed와 연결하여 Linux 및 Cygwin에서 해당 pid와 함께 포트를 표시 할 수 있습니다.

$ netstat -ano | grep LISTENING | grep -v ‘\[::\]’ | sort -n | uniq -c | awk ‘ {print $3 “\t” $6}’ | sed ‘s/.*://’

자세한 내용은

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.