Як перевірити відкриті / закриті порти на моєму комп’ютері?


135

Як перевірити відкриті / закриті порти на моєму комп’ютері?

Я використовував netstat -aу командному рядку.

  • Чи вказує стан порту "LISTENING" про те, що порт відкритий?
  • Чи закритий будь-який порт, який не відображається на виході?


2
@Justgivemeaname: nmapце інструмент для перевірки наявності відкритих портів на іншому хості. Якщо ви можете працювати netstatна машині, користуватися ним набагато швидше і надійніше.
Девід Фоерстер

@DavidFoerster: Не знав про це netstat, тому я дізнався це. У посиланні сказано, що його слід використовувати з іншого хоста. Дякую!
Justgivemeaname

Відповіді:


163

Є кілька параметрів netstat, які корисні для цього:

  • -lабо --listeningпоказує лише розетки, які зараз прослуховуються для вхідного з'єднання.
  • -aабо --allпоказує всі розетки, які зараз використовуються.
  • -tабо --tcpпоказує розетки tcp.
  • -uабо --udpпоказує розетки udp.
  • -nабо --numericпоказує хости та порти як номери, замість того, щоб розв’язувати в dns і шукати в / etc / services.

Ви використовуєте їх суміш, щоб отримати те, що ви хочете. Щоб знати, які номери портів зараз використовуються, скористайтеся одним із таких:

netstat -atn           # For tcp
netstat -aun           # For udp
netstat -atun          # For both

На виході всі згадані порти використовуються або для прослуховування вхідного з'єднання, або підключені до однорангової **, всі інші закриті. Порти TCP і UDP мають ширину 16 біт (вони переходять від 1-65535)

** Вони також можуть з'єднуватися / відключатися від однорангових.


71

Ви можете використовувати цю команду:

netstat -tulnp | grep <port no>

Якщо він показує якийсь процес, його використовують. Його закрито (не використовується), якщо немає виходу.


20

Ще один альтернативний командний рядок, простий у використанні, щоб дізнатися, який процес використовує порт:

lsof -n -i4TCP:$PORT | grep LISTEN

Наступну функцію я додав у свій .bash_profile,

function pslisten {
    echo `lsof -n -i4TCP:$1 | grep LISTEN`
}

а тепер запустіть "pslisten 5060", щоб побачити, хто захоплює мій SIP-порт.

Це теж робота з Apple Mac OS X.


13

Чи вказується стан порту "LISTENING" про те, що порт відкритий?

Так. Це означає, що деяка служба прослуховує цей порт на вашому комп'ютері для вхідного зв'язку, тобто цей порт відкритий для встановлення нових з'єднань.

Будь-який порт, який не відображається у висновку, вказує, що він закритий?

Так. Пам'ятайте, netstat -aбудуть показані всі активні ( прослуховування ) та пасивні ( не прослуховуючі ) з'єднання, тобто порти, які діють як обидва сервера (деякі сервіси слухають ці порти для з'єднань з іншої машини / процесу) та встановлені (з'єднання встановлюються на цих порти незалежно від того, хост / послуга може бути сервером або клієнтом)

Всі порти TCP та UDP належать до категорії, що називається sockets, і є ціла маса таких. Щоб переглянути інформацію про розетку, ви можете перевірити man ss.


Дякую. Ви написали, що -aозначає сервер і встановлено. Чи означає "сервер" порти, які слухаються деякими службами? Чи означає "встановлені" порти, де є існуючі з'єднання незалежно від того, це порт клієнта чи сервера? Тоді які порти -aне відображаються?
Тім

Я не думаю, що -aваріант означає "всі активні" розетки; це просто означає "все". netstat показує всі активні розетки за замовчуванням, але не залишає пасивні розетки (відкриті, прослуховування). За допомогою -aпараметра показані як активні, так і пасивні розетки.
Егон Оліє

@EgonOlieux Спасибі Я стою виправлений; редагував відповідь.
heemayl

@heemayl Друга частина вашої відповіді все ще невірна. TCP-розетка в стані "прослуховування" ніколи не може бути з'єднанням; вона ні до чого не пов'язана, вона лише слухає. Через це прослуховування сокетів TCP також називають пасивними сокетами. Якщо клієнт намагається підключитися до розетки (прослуховування) на сервері, на сервері буде створений новий сокет для встановлення зв'язку з клієнтом. Сокет, який є частиною встановленого з'єднання, називається активним сокетом.
Egon Olieux

3

Інший варіант - ss . Це набагато простіше у використанні….

Команда нижче буде виводити лише список поточних розеток прослуховування.

root@server:~# ss -l

    Netid  State      Recv-Q Send-Q                                     Local Address:Port                                                      Peer Address:Port   


u_dgr  UNCONN     0      0                                                      * 23353                                                                * 23352                
u_dgr  UNCONN     0      0                                                      * 568                                                                  * 362                  
u_dgr  UNCONN     0      0                                                      * 14836                                                                * 14837                
u_dgr  UNCONN     0      0                                                      * 20446                                                                * 369                  
u_dgr  UNCONN     0      0                                                      * 22877                                                                * 369                  
u_dgr  UNCONN     0      0                                                      * 504                                                                  * 347                  
u_dgr  UNCONN     0      0                                                      * 16298                                                                * 369                  
u_dgr  UNCONN     0      0                                                      * 23343                                                                * 369                  
u_dgr  UNCONN     0      0                                                      * 24125                                                                * 369                  
u_dgr  UNCONN     0      0                                                      * 24617                                                                * 369                  
u_dgr  UNCONN     0      0                                                      * 23352                                                                * 23353                
u_dgr  UNCONN     0      0                                                      * 23334                                                                * 369                  
u_dgr  UNCONN     0      0                                                      * 17113                                                                * 369                  
u_dgr  UNCONN     0      0                                                      * 16957                                                                * 369                  
u_dgr  UNCONN     0      0                                                      * 14793                                                                * 362                  
u_dgr  UNCONN     0      0                                                      * 23345                                                                * 362                  
u_dgr  UNCONN     0      0                                                      * 24070                                                                * 369                  
udp    UNCONN     0      0                                                      *:sunrpc                                                               *:*                    
udp    UNCONN     0      0                                                      *:981                                                                  *:*                    
udp    UNCONN     0      0                                                     :::sunrpc                                                              :::*                    
udp    UNCONN     0      0                                                     :::981                                                                 :::*                    
tcp    LISTEN     0      128                                            127.0.0.1:85                                                                   *:*                    
tcp    LISTEN     0      128                                                    *:ssh                                                                  *:*                    
tcp    LISTEN     0      128                                                    *:3128                                                                 *:*                    
tcp    LISTEN     0      100                                            127.0.0.1:smtp                                                                 *:*                    
tcp    LISTEN     0      128                                                    *:8006                                                                 *:*                    
tcp    LISTEN     0      128                                                    *:sunrpc                                                               *:*                    
tcp    LISTEN     0      128                                                   :::ssh                                                                 :::*                    
tcp    LISTEN     0      100                                                  ::1:smtp                                                                :::*                    
tcp    LISTEN     0      128                                                   :::sunrpc                                                              :::*                    

1
Я про це не знав, дякую zee
нік лисиця

2

Або це може допомогти за допомогою годинника, а потім пограйте з тим, що ви хочете бачити.

sudo watch -d -n0 "netstat -atnp | grep ESTA"

sudo watch -d -n0 "netstat -tulnp | grep ESTA"

1
-конфліктує з -l, -а захоплює все, чи СТВОРЕНО або СПИСОК, і -лі просто захоплює СПИСОК, тож насправді це '-ltnp' tcp, '-lunp' udp або '-ltunp' tcp + udp
ModerateJavaScriptDev

1

Насправді є кращий спосіб побачити, які порти у вас відкриті. Проблема з netstatчи lsofполягає в тому, що вони запитують мережевий стек і насправді не підключаються до машини, а натомість намагаються побачити, що працює в системі. Кращий підхід - використовувати nmapтак:

nmap -sT -O localhost

Щоб побачити відкриті порти.


0
  1. Спробуйте це, щоб отримати список відкритих портів у цьому діапазоні.

    for p in {1..1023}
    do
       (echo >/dev/tcp/localhost/$p) >/dev/null 2>&1 && echo "$p open"
    done
    
  2. І ця команда покаже, що це таке!

    cat /etc/services | grep {PORTNumber}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.