Які порти використовує додаток [дублікат]


11

Я тестую програму, яка відкриває власні порти (діє як сервер для цих портів, отже, слухає їх) і де ця сама програма підключається до портів, пов'язаних з іншими програмами (виступає клієнтом для цих портів).

Я хотів би отримати огляд того, до яких портів створюється додаток і до яких програм та портів він підключається.

Як я можу це зробити?

Відповіді:


17

Ви можете використовувати netstatдля цього. Дивіться приклад (я жартував ssh):

netstat -putan | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1725/sshd
tcp        0      0 1.2.3.4:45734           1.2.3.5:22              ESTABLISHED 2491/ssh
tcp6       0      0 :::22                   :::*                    LISTEN      1725/sshd

Пояснення:

Я часто використовую параметри -putan(тому що їх легко запам’ятати).

  • -p: показати PID програми / процесу
  • -u: показати udp-порти / з'єднання
  • -t: показати порти / з'єднання tcp
  • -a: показувати розетки для прослуховування та не для прослуховування
  • -n: числовий вихід (не слід шукати DNS для імен хостів тощо)

На виході вище, ви бачите, що на всіх мережевих інтерфейсах ( sshdPID) 1725на порту є порт ssh-демон ( ) з PID- прослуховуванням . Також є номер ssh-клієнта (PID ), підключений до IP-адреси за номером порту , моя IP-адреса і мій зовнішній порт . Ви бачите, що зв’язок встановлений. Тому я увійшов через via .220.0.0.024911.2.3.5221.2.3.445734ssh


Встановлене TCP-з'єднання на порт 22 не вказує на успішну автентифікацію. TCP повинен бути встановлений до того, як може відбутися аутентифікація в будь-якому напрямку.
jamesbtate

@Puddingfox так правда, ми могли б краще сказати "Я підключений до цього порту", але для розуміння я сказав "я ввійшов", тому що це більш наочно.
хаос

1
хе-хе ... `-путан ' Я так спокусився виправити цю незначну орфографічну помилку;)
Джеймс Мерц

Навіщо використовувати застарілі утиліти, коли доступні сучасні? ss -lntp - це утиліта, що надається пакетом iproute2 .
MariusMatutiae

7

Ще один інструмент, який може це зробити lsof:

# lsof -i -a -p 1981
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:22 (LISTEN)
#

Використовувані параметри:

  • -i друкувати порти Інтернету, відкриті процесом
  • -a змусити AND-редагувати всі варіанти
  • -p 1981 показати вихід для процесу 1981 року
  • -n щоб заборонити пошук імені хоста і замість цього показати IP-адресу
  • -P щоб заборонити пошук служби та замість цього показати номер порту

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


Я хотів би запустити цю команду перед запуском програми, яку я хочу відстежувати, але чи можу я встановити, який pid додаток отримає перед його запуском?
Баз

@Baz, якщо ви хочете відслідковувати програму під час її запуску (наприклад, до того, як ви дізнаєтесь, що це PID), слід спробувати straceрішення, яке запропонував @olivecoder.
gowenfawr


3

У нас вже є хороші відповіді, але вони лише перелічують порти, відкриті в момент запуску команди.

strace є правильним інструментом для контролю за з'єднаннями, відкритими протягом життя програми:

strace -e socket,connect,close -f -o hipchat.strace.txt hipchat

Вихідні дані відображатимуть додаткову інформацію, як UDP-запити та відкриті, але закриті з'єднання.


0

ss -a4 | less

Я припускаю, що ви говорите про IPv4 ... Якщо ні, ви можете замінити 4 у попередній команді на 6. Параметр -a повинен показати всі порти (прослуховування та не). Ви можете додати -n до параметрів, якщо ви не хочете вирішувати імена на дисплеї.

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