Як я можу перерахувати свої порти відкритої мережі за допомогою 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був трохи кращий, дякую.
Йонас

12
Вам потрібно користуватися sudo lsof .... Без sudo lsof може бачити лише ваші процеси, якими ви володієте, і, отже, не відображатиметься жоден порт, відкритий системними процесами. Крім того, ви можете пропустити команду grep, повідомивши lsof, що ви хочете бачити тільки портів у стані LISTEN sudo lsof -PiTCP -sTCP:LISTEN.
Гордон Девіссон

1
→ grgarside: остерігайтеся ефектів у grep -i "listen"межах 2-х прикладів.
дан

1
За допомогою GNU netstatви можете необов'язково перелічити сторінку процесу, який відкрив кожен порт. Чи є такий спосіб отримати таку поведінку і з BSD netstat?
Кріс

2
Я щойно зробив, виявляється, -vпрапор увімкнено. Під буде знаходитись у другому до останнього стовпця.
Кріс

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.
Крейг Трейдер

Він також показує ідентифікатор процесу (netstat doesn’t)
lib

1
lsof -Pn -i6для IPV6
Джаред Берроуз

2
Щонайменше на моїй машині ця відповідь займає 0,1 секунди, тоді як @ grgarside - 28+ с. Різниця полягає в -i4перемиканні, щоб дивитися тільки на адреси IPv4.
Давор Кубраніч

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     

… Без додаткової фільтрації, щоб отримати правильні заголовки та бачити як прослуховування серверів, так і з'єднання, вже встановлені в обох напрямках. У цьому прикладі 1-й рядок демонструє з'єднання від мого Mac до 17.172.233.109, що далі:

whois 17.172.233.109

навчив мене, що він знаходиться в Apple.


6

По-перше, я не фахівець з BSD, але, як і в ОП, я хотів приблизно відповідати виконанню наступних дій у * nix box або щось близьке:

netstat -tulpn

Я читав інші запитання / відповіді, пропонуючи lsof * і netstat * на MacOS, і все ще хотів чогось із більш компактним виходом. Отже, ось що я швидко зібрав:

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-файли термінального бота, вставте текст тут у форматі коду. Важко скопіювати, а також читати, якщо вам потрібні великі шрифти
Позначте

Зображення не є gif, це лише екран, що показує вихід. Якщо натиснути, ви побачите, що це PNG. Хостинг в imgur .. але я вважаю, що за замовчуванням StackExchange я думаю. У будь-якому випадку, якщо ви шукаєте інший знімок екрана, я можу знову захопити.
kroolk

Гаразд у моєму коментарі замініть GIF на скріншот, не має значення, який формат. Справа в тому, що це повинен бути текст
Марк

Оскільки вилучив довгу команду з вибірки зразка, вона фактично зараз працює краще як скріншот, оскільки з неї нічого не потрібно копіювати, і оскільки вона також може обрізати краще, ніж раніше.
mwfearnley
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.