netstat를 사용하여 열린 네트워크 포트를 어떻게 나열합니까?


205

내장 명령으로 터미널에 열린 네트워크 포트를 나열하고 싶습니다. 내가 아는 것처럼 netstat사용할 명령입니다. 그러나 유용한 정보를 얻는 데 어려움을 겪고 있습니다.

열린 포트를 netstat어떻게 나열 합니까? 이 경우에 도움이되는 특정 플래그가 있습니까?

답변:


308
netstat -ap tcp | grep -i "listen"

Achive Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)   
tcp4       0      0  localhost.25035        *.*                    LISTEN
sudo lsof -PiTCP -sTCP:LISTEN

COMMAND     PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
GitHub      850 grgarside   6u   IPv4 0x23c345381d089301      0t0  TCP localhost:25035 (LISTEN)

2
감사! 그러나 출력은 읽기가 쉽지 않지만 lsof조금 더 좋습니다.
Jonas

12
를 사용해야 sudo lsof ...합니다. sudo가 없으면 lsof는 사용자가 소유 한 프로세스 만 볼 수 있으므로 시스템 프로세스가 연 포트를 표시하지 않습니다. 또한 lsof에게 LISTEN 상태의 포트만보고 싶다고 말함으로써 grep 명령을 건너 뛸 수 있습니다 sudo lsof -PiTCP -sTCP:LISTEN.
Gordon Davisson

1
→ grgarside : grep -i "listen"2 가지 예제 의 효과에주의하십시오 .
dan

1
GNU netstat를 사용하면 각 포트를 연 프로세스의 pid를 선택적으로 나열 할 수 있습니다. BSD netstat에서도 그 행동을 취할 수있는 방법이 있습니까?
Chris

2
방금 -v플래그를 켭니다. pid는 마지막 두 번째 열에 있습니다.
Chris

64

아마도 당신은 lsof를 사용할 수 있습니다 :

lsof -Pn -i4

-i4는 ipv4 주소 및 포트만 표시 함을 의미합니다. -P 및 -n 빠른 출력

이 같은 출력

  lsof -Pn -i4 | grep LISTEN
QQPlatfor 22767 xxxx   15u  IPv4 0x36c2bfa04e49385d      0t0  TCP *:49969 (LISTEN)
GoAgentX  33377 xxxx    4u  IPv4 0x36c2bfa06e68b12d      0t0  TCP *:56154 (LISTEN)
GoAgentX  33377 xxxx   20u  IPv4 0x36c2bfa04e492f8d      0t0  TCP 127.0.0.1:56155 (LISTEN)

2
이 명령은 무엇을합니까?
nohillside

3
lsof열린 파일을 나열합니다. 네트워크 소켓은 파일로 계산되므로 열려있는 각 네트워크 소켓 (듣거나 사용중인 활성)이에 나열됩니다 lsof.
Craig Trader

또한 프로세스 ID를 보여줍니다 (netstat는 그렇지 않습니다)
lib

1
lsof -Pn -i6for IPV6
Jared Burrows

2
내 컴퓨터 중 적어도 하나는이 답변에 0.1s가 걸리고 @grgarside는 28 + s입니다. 차이점은 -i4IPv4 주소 만 보는 스위치입니다.
Davor Cubranic 2012

8

가장 간단한 방법은 다음을 사용하는 것입니다 netstat.

$ netstat -ap tcp
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  10.0.2.23.58792        17.172.233.109.5223    ESTABLISHED
tcp4      87      0  my_iMac__at_home.55481 stackoverflow.co.http  ESTABLISHED
tcp4     116      0  my_iMac__at_home.55478 stackoverflow.co.http  ESTABLISHED
tcp4      58      0  my_iMac__at_home.63452 stackoverflow.co.http  ESTABLISHED
tcp4      87      0  my_iMac__at_home.63429 stackoverflow.co.http  ESTABLISHED
tcp4       0      0  localhost.63173        localhost.773          ESTABLISHED
tcp4       0      0  localhost.773          localhost.63173        ESTABLISHED
tcp4       0      0  localhost.63173        *.*                    LISTEN     
tcp4       0      0  localhost.63172        *.*                    LISTEN     
tcp4       0      0  localhost.ipp          *.*                    LISTEN     
tcp6       0      0  localhost.ipp          *.*                    LISTEN     

… 올바른 헤더를 얻고 두 서버의 수신 대기와 이미 양방향으로 설정된 연결을 확인하기 위해 필터링을 추가하지 않고도. 이 예에서 첫 번째 줄은 내 Mac에서으로의 연결을 보여줍니다 17.172.233.109.

whois 17.172.233.109

그것이 애플에 있다고 가르쳐주었습니다.


6

첫째, 저는 BSD 전문가는 아니지만 OP와 마찬가지로 * nix 상자에서 다음을 실행하는 것과 동등한 것을 원했습니다.

netstat -tulpn

MacOS에서 lsof * 및 netstat *를 제공하는 다른 질문 / 응답을 읽었으며 여전히 더 컴팩트 한 출력을 원했습니다. 그래서 이것은 내가 함께 정리 한 것입니다.

netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print cred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"

약간 과잉이므로 출력을 측정하기 위해 색상을 추가했습니다. 이 거대 함을 기억하거나 입력하고 싶지 않기 때문에. 나는 그것을 bash 함수에 넣은 다음 필요할 때 호출합니다. bash 함수는 다음과 같습니다.

macnst (){
    netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print colred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"
}

~ / .bash_profile 또는 ~ / .zshrc에서 제공하는 파일에 이러한 편의 함수의 작은 컬렉션이 있습니다. 컬렉션에 추가되고 있습니다. 이것을 더 좋고 희미하게 만드는 다른 기회를 보는 것이 흥미로울 것입니다.

샘플 출력 :

> macns
proto: tcp4     addr.port: 127.0.0.1.9999     pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.35729            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62087            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62070            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62085            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp4     addr.port: *.61993            pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
proto: tcp46    addr.port: *.61992            pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.42329    pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.61983    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.63342    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.6942     pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.3075     pid: 67931    name:  /Applications/electerm.app/Contents/Frameworks/electerm Helper.app/Contents/MacOS/electerm Helper
proto: tcp6     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: 127.0.0.1.9770     pid: 71       name:  /Applications/Pritunl.app/Contents/Resources/pritunl-service

터미널 봇의 gif를 여기에 코드 형식으로 붙여 넣지 마십시오. 큰 글꼴이 필요한 경우에는 복사하기가 어렵고 읽을 수도 있습니다.
Mark

이미지는 gif가 아니며 출력을 보여주는 화면 일뿐입니다. 클릭하면 PNG입니다. imgur ..에서 호스팅되지만 이것이 StackExchange의 기본값입니다. 어쨌든 다른 스크린 샷을 찾고 있다면 다시 잡을 수 있습니다.
kroolk

내 의견에서 OK GIF를 스크린 샷으로 바꾸면 어떤 형식이 중요하지 않습니다. 요점은 텍스트 여야한다는 것입니다
Mark

샘플 출력에서 ​​긴 명령을 제거했기 때문에 실제로 복사 할 필요가 없으며 이전보다 잘자를 수 있기 때문에 실제로는 스크린 샷으로 더 잘 작동합니다.
mwfearnley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.