Mac OS X에서 네트워크 연결을 수신하도록 모든 프로세스를 얻으려고 합니다. netstat
해당 옵션이 없으면 -p
lsof를 사용하려고 합니다.
lsof -i -sTCP:LISTEN
나에게 청취 세션의 공정한 목록을 제공했지만 전부는 아닙니다. 예를 들어, 연결을 수신하는 프로세스가 있는 포트 10080에 텔넷을 연결할 수 있지만 이것이 표시되지 않습니다 lsof
. 무엇을 놓치고 있습니까?
$ telnet localhost 10080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> Connection closed.
하지만
$ sudo lsof -n -i | grep 10080
$
답변1
sudo lsof -iTCP -sTCP:LISTEN
sudo lsof -iTCP -sTCP:LISTEN -P
sudo lsof -iTCP -sTCP:LISTEN -P -n
sudo lsof -iTCP -sTCP:LISTEN -n
... | wc -l
내가 정기적으로 사용하는 Lion MBP에서는 모두 동일한 32개 항목( )을 반환합니다.
-P -n
이름 확인이 발생하지 않도록 lsof
하며 차단하지 않습니다. 이들 중 어느 하나라도 없으면 속도가 매우 느려질 수 있습니다.
UDP의 경우: sudo lsof -iUDP -P -n | egrep -v '(127|::1)'
. -n
합계가 없으면 -P
시간이 오래 걸립니다.
알림: 여기에는 방화벽 설정이 포함되지 않습니다.
답변2
sudo lsof -nP -iTCP -sTCP:듣기
이 명령은 모든 네트워크 파일을 표시하고 TCP 프로토콜을 사용하여 열려 있는 모든 포트를 수신합니다.
sudo lsof -nP -iTCP:
5432
-sTCP:LISTEN
이 명령은 수신 대기 중인 포트만 표시합니다.5432
답변3
저는 이 쉘 함수를 작성했습니다. 이를 붙여넣으면 ~/.bashrc
멋진 보고서가 제공됩니다.
ports() {
(
echo 'PROC PID USER x IPV x x PROTO BIND PORT'
(
sudo lsof +c 15 -iTCP -sTCP:LISTEN -P -n | tail -n +2
sudo lsof +c 15 -iUDP -P -n | tail -n +2 | egrep -v ' (127\.0\.0\.1|\[::1\]):'
) | sed -E 's/ ([^ ]+):/ \1 /' | sort -k8,8 -k5,5 -k1,1 -k10,10n
) | awk '{ printf "%-16s %-6s %-9s %-5s %-7s %s:%s\n",$1,$2,$3,$5,$8,$9,$10 }'
}