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.