Mac OS X에서 주어진 TCP 포트를 듣고있는 사람은 누구입니까?


1381

리눅스에서 내가 사용할 수 있습니다 netstat -pntl | grep $PORT또는 fuser -n tcp $PORT(PID) 지정된 TCP 포트에서 수신되는 과정을 알아. Mac OS X에서 동일한 정보를 얻으려면 어떻게합니까?


27
죄송합니다, netstat -p tcp | grep $PORT맥 OS X에 NETSTAT는 PID를 표시 할 수 없기 때문에 PID를 표시하지 않습니다.
pts

12
netstat -anv는 Mac OS X에 포트를 표시합니다 (출처 : @SeanHamiliton의 솔루션)
Curtis Yallop

답변:


2047

macOS High Sierra 이상에서 다음 명령을 사용하십시오.

lsof -nP -iTCP:$PORT | grep LISTEN

또는 단지 IPv4 만 보려면 :

lsof -nP -i4TCP:$PORT | grep LISTEN

이전 버전에서는 다음 형식 중 하나를 사용하십시오.

lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN

$PORT포트 번호 또는 쉼표로 구분 된 포트 번호 목록으로 대체 하십시오.

sudo# 1024 미만의 포트에 대한 정보가 필요한 경우 앞에 추가하십시오 (공백 이옵니다 ).

-n플래그는 호스트 이름 대신 IP 주소를 표시하기위한 것입니다. 호스트 이름을 얻기위한 DNS 조회가 느려질 수 있기 때문에 (많은 호스트의 경우 몇 초 또는 1 분) 명령이 훨씬 빠르게 실행됩니다.

-P플래그는 원시 포트 번호 대신 같은 확인 된 이름 표시하기위한 것입니다 http, ftp또는 같은 난해한 서비스 이름을 dpserve, socalia.

더 많은 옵션에 대해서는 주석을 참조하십시오.

자주 함께 사용되므로 완전성을 위해 :

PID를 종료하려면

kill -9 <PID>
# kill -9 60401

153
sudo소유하지 않은 프로세스를 보려면 접두사를 붙 입니다.
Gordon Davisson

30
사자에, 변경 작업sudo lsof -i TCP:$PORT | grep LISTEN
dhaval

58
Mountain Lion에서는 필요하지 않습니다 grep.sudo lsof -iTCP:$PORT -sTCP:LISTEN
Siu Ching Pong -Asuka Kenji-

16
너무 많은 검색 후이 것이 가장 좋습니다. 명령을 직접 복사하려는 사용자는 $ PORT를 실제 포트 번호로 바꾸거나 변수 PORT 및 여러 포트에 대해서도 변수를 정의해야합니다. export PORT = 8080,4433; lsof -n -i4TCP : $ PORT
siddhusingh

2
조사 할 포트가 1024 이상인 경우 sudo가 필요하지 않습니다.
stigkj

626

Snow Leopard (10.6), 최대 Mojave (10.14) 및 Catalina (10,15) 부터 macOS의 모든 버전은 다음을 지원합니다.

sudo lsof -iTCP -sTCP:LISTEN -n -P

개인적으로 나는이 간단한 기능으로 끝났습니다 ~/.bash_profile.

listening() {
    if [ $# -eq 0 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P
    elif [ $# -eq 1 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
    else
        echo "Usage: listening [pattern]"
    fi
}

그런 다음 listeningcommand는 일부 포트에서 수신 대기하는 프로세스 목록을 제공 listening smth하고 일부 패턴에 대해 grep합니다.

이를 통해 특정 프로세스 (예 : listening dropbox포트 또는 포트)를 쉽게 물어볼 수 listening 22있습니다.

lsofcommand에는 포트, 프로토콜, 프로세스 등을 묻는 몇 가지 특수 옵션이 있지만 개인적으로 위의 기능을 훨씬 더 편리하게 찾을 수 있습니다.이 모든 하위 수준 옵션을 기억할 필요가 없기 때문입니다. lsof매우 강력한 도구이지만 불행히도 사용하기에 편안하지 않습니다.


7
이것은 내 도트 파일에서 진행됩니다. 나는 몇 개월마다 검색하고 항상이 답변을 제공합니다.
danemacmillan

1
OP가 말한대로 이것이 받아 들여야한다고 생각 -pntl합니다. 모든 서비스가 나열됩니다. 허용 된 답변은 하나 이상의 포트 번호를 지정하도록 요청합니다. 이는 원격으로 동일하지 않습니다.
seeafish

440

다음을 사용할 수도 있습니다.

sudo lsof -i -n -P | grep TCP

이것은 매버릭스에서 작동합니다.


3
-i옵션을 사용하면 훨씬 빨라집니다. 0.02 초 대 2 초 내 응용 프로그램에서 이것은 큰 차이를 만들었습니다.
Eric Boehs

이러한 특정 플래그는 -i, -n, -P를 수행합니다. 나는 그들이 정확히 무엇을 의미하는지 찾을 수 없습니다
Chad Watkins

sudo lsof -i -n -P | grep TCP | grep $
PORT-

"| $ PORT를 grep을"또는 "| LISTEN GREP"나는 추가 제안
KC Baltz

큰! 모하비에서도 작동합니다.
Gefilte Fish

291

2016 년 1 월 업데이트

아무도 제안하지 않은 것이 놀랍습니다.

lsof -i :PORT_NUMBER

필요한 기본 정보를 얻습니다. 예를 들어 포트 1337을 확인하십시오.

lsof -i :1337

상황에 따라 다른 변형 :

sudo lsof -i :1337
lsof -i tcp:1337

PID 자체를 추출하기 위해이를 쉽게 구축 할 수 있습니다. 예를 들면 다음과 같습니다.

lsof -t -i :1337

또한이 명령과 동일합니다.

lsof -i :1337 | awk '{ print $2; }' | head -n 2 | grep -v PID

빠른 그림 :

여기에 이미지 설명을 입력하십시오

자주 함께 사용되므로 완전성을 위해 :

PID를 종료하려면

kill -9 <PID>
# kill -9 60401

또는 하나의 라이너로 :

kill -9 $(lsof -t -i :1337)

2
이 명령은 또한 청취자 이외의 PID를 표시하며 질문은 청취자에게만 명시 적으로 요구됩니다.
pts

3
당신은 또한 실행할 수 있습니다 lsof -t -i :1338. -t프로세스 ID를 반환하므로 awk / head 할 필요가 없습니다.
KFunk

아무것도를 제외하고 근무 kill -9 $(lsof -t -i :5000)엘 캐피 탄
goksel

대단하다. 나는 그것을 죽이기 전에 거기에 무엇이 있는지 알고 싶습니다. 그래서 (이것에 기초하여) 방금 bashrc에 추가했습니다 : whatsonport() { ps -ef | grep `lsof -t -i :$1` }, 그래서 :⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
Sigfried

1
고마워, lsof -i :PORT_NUMBER나를 위해 일을했다.
marika.daboja


48

LISTEN, ESTABLISHED 및 CLOSED 포트

sudo lsof -n -i -P | grep TCP

LISTEN 포트만

sudo lsof -n -i -P | grep LISTEN

특정 LISTEN 포트의 경우 예 : 포트 80

sudo lsof -n -i -P | grep ':80 (LISTEN)'

또는 간단한 요약 [서비스 / 앱 설명 없음]을 원하면 NETSTAT로 이동하십시오. 여기서 좋은 점은 sudo가 필요 없다는 것입니다.

netstat -a -n | grep 'LISTEN '

사용 된 항목 설명 :

-n 호스트 이름을 억제합니다

IPv4 및 IPv6 프로토콜의 경우 -i

-P 포트 이름을 생략

모든 소켓에 대해 -a [over netstat]

-n [over netstat]는 이름을 확인하지 않고 네트워크 주소를 숫자로 표시합니다.

High Sierra 10.13.3 및 Mojave 10.14.3 에서 테스트

  • 마지막 구문 netstat 는 Linux에서도 작동합니다.

자세한 설명은 실제로 저와 같은 초보자에게 매우 유용합니다. @PYK에게 감사
Tomaz Wang

46

OS X에서 netstat에 -v 옵션을 사용하여 연관된 pid를 제공 할 수 있습니다.

유형:

netstat -anv | grep [.]PORT

출력은 다음과 같습니다.

tcp46      0      0  *.8080                 *.*                    LISTEN      131072 131072   3105      0

PID는 마지막 열 이전의 숫자입니다 (이 경우 3105).


grep LISTEN리스너 만 표시하려면 추가해야합니다 .
pts

3
이것이 내가 필요한 것입니다! lsof포트를 찾을 수 없습니다. 그러나 netstat그것이 열려 있음을 보여주었습니다. -v내가 부족했던 비밀 소스였습니다.
Aaron McMillin

32

macOS에서는 netstat 을 사용하여 특정 포트에서 수신 대기하는 프로세스 ID를 얻는 쉬운 방법이 있습니다. 이 예제는 포트 80에서 컨텐츠를 제공하는 프로세스를 찾습니다.

포트 80에서 실행되는 서버 찾기

netstat -anv | egrep -w [.]80.*LISTEN

샘플 출력

tcp4  0 0  *.80       *.*    LISTEN      131072 131072    715      0

마지막 열의 두 번째는 PID입니다. 위의 값은 715 입니다.

옵션

-a -서버가 사용하는 포트를 포함하여 모든 포트를 표시합니다

-n-숫자를 표시하고 이름을 찾지 마십시오. 이것은 명령을 훨씬 빠르게 만듭니다

-v -상세 출력, 프로세스 ID 얻기

-w-검색어. 그렇지 않으면 명령은 "80"뿐만 아니라 포트 8000 및 8001에 대한 정보를 반환합니다.

LISTEN -LISTEN 모드의 포트, 즉 서버에 대해서만 정보 제공


2
-v 플래그는 그것을 만든
user9869932

18

최신 macOS 버전에서는 다음 명령을 사용할 수 있습니다.

lsof -nP -i4TCP:$PORT | grep LISTEN

기억하기 어려운 경우 bash함수를 작성 하고 친숙한 이름으로 내 보내야합니다.

vi ~/.bash_profile

그런 다음 해당 파일에 다음 줄을 추가하고 저장하십시오.

function listening_on() {
    lsof -nP -i4TCP:"$1" | grep LISTEN
}

이제 listening_on 80터미널에 입력 하고 포트에서 수신중인 프로세스를 확인할 수 있습니다 80.


13

Snow Leopard (OS X 10.6.8)에서 'man lsof'를 실행하면 다음이 생성됩니다.

lsof -i 4 -a

(실제 수동 입력은 'lsof -i 4 -a -p 1234'입니다)

이전 답변은 Snow Leopard에서 작동하지 않았지만 pts의 답변에 'lsof'가 사용되는 것을 볼 때까지 'netstat -nlp'를 사용하려고했습니다.


10

나는 리눅스 사람이다. Linux에서는 netstat -ltpn이러한 문자를 사용 하거나 조합 하여 매우 쉽습니다 . 그러나 Mac OS X netstat -an | grep LISTEN에서는 가장 인도적입니다. 문제 해결시 다른 사람들은 추악하고 기억하기가 매우 어렵습니다.


2
이 질문은 특정 TCP 포트를 명시 적으로 요청했으며 명령은 모든 포트에서 리스너를 표시합니다.
pts

7
lsof -n -i | awk '{ print $1,$9; }' | sort -u

누가 무엇을하고 있는지 표시합니다. 호스트 이름을 보려면 -n을 제거하십시오 (약간 느림).


1
귀하의 답변은 나쁘지 않지만, 몇 년 전부터 고도로 선전 된 여러 답변과 받아 들여진 질문이 있습니다. 앞으로는 최근 질문, 특히 아직 답변되지 않은 질문에 초점을 맞추십시오.

이 명령은 비 TCP 포트와 청취자도 표시합니까? 이 질문은 TCP 포트의 리스너 만 명시 적으로 묻습니다.
pts

lsof (8) 매뉴얼 페이지에 따라 : If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
Misha Tavkhelidze

@Misha Tavkhelidze : 청취자도 표시하지 않으므로 질문에 대답하지 않습니다.
pts

추가 -sTCP:LISTENlsof
미샤 Tavkhelidze

3

이것은 내가 필요한 것을했다.

ps -eaf | grep `lsof -t -i:$PORT`

1

나는 어디에서 누가 듣고 있는지를 알 수있을뿐만 아니라 확립 된 연결과 어떤 국가를 표시 할 수있는 작은 스크립트를 만들었습니다. OSX 시에라에서 작동

#!/bin/bash
printf "\nchecking established connections\n\n"
for i in $(sudo lsof -i -n -P | grep TCP | grep ESTABLISHED | grep -v IPv6 | 
grep -v 127.0.0.1 | cut -d ">" -f2 | cut -d " " -f1 | cut -d ":" -f1); do
    printf "$i : " & curl freegeoip.net/xml/$i -s -S | grep CountryName | 
cut -d ">" -f2 | cut -d"<" -f1
done

printf "\ndisplaying listening ports\n\n"

sudo lsof -i -n -P | grep TCP | grep LISTEN | cut -d " " -f 1,32-35

#EOF

Sample output
checking established connections

107.178.244.155 : United States
17.188.136.186 : United States
17.252.76.19 : United States
17.252.76.19 : United States
17.188.136.186 : United States
5.45.62.118 : Netherlands
40.101.42.66 : Ireland
151.101.1.69 : United States
173.194.69.188 : United States
104.25.170.11 : United States
5.45.62.49 : Netherlands
198.252.206.25 : United States
151.101.1.69 : United States
34.198.53.220 : United States
198.252.206.25 : United States
151.101.129.69 : United States
91.225.248.133 : Ireland
216.58.212.234 : United States

displaying listening ports

mysqld TCP *:3306 (LISTEN)
com.avast TCP 127.0.0.1:12080 (LISTEN)
com.avast TCP [::1]:12080 (LISTEN)
com.avast TCP 127.0.0.1:12110 (LISTEN)
com.avast TCP [::1]:12110 (LISTEN)
com.avast TCP 127.0.0.1:12143 (LISTEN)
com.avast TCP [::1]:12143 (LISTEN)
com.avast TCP 127.0.0.1:12995 (LISTEN)
com.avast [::1]:12995 (LISTEN)
com.avast 127.0.0.1:12993 (LISTEN)
com.avast [::1]:12993 (LISTEN)
Google TCP 127.0.0.1:34013 (LISTEN)

북한에 연결되어 있는지 확인하는 데 유용 할 수 있습니다! ;-)


0

이것은 macOS High Sierra에서 좋은 방법입니다.

netstat -an |grep -i listen

맞습니다! 허용되는 답변은 실제로 올바른 방법입니다 ... mac os x의 netstat는 pid 대 포트 매핑을 표시하지 않습니다.
tr4nc3 2016 년

0

사용자 브렌트 셀프에서 영감을 얻은 것 :

lsof -i 4 -a | grep LISTEN


0

macOS의 경우 두 명령을 함께 사용하여 시스템에서 수신 대기하는 프로세스 및 원격 서버에 연결하는 프로세스에 대한 정보를 표시합니다. 즉, 호스트에서 수신 포트와 현재 (TCP) 연결을 확인하려면 다음 두 명령을 함께 사용할 수 있습니다

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

내 의견을 추가하겠다고 생각했지만 누군가를 도울 수 있기를 바랍니다.

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