Какие порты используются приложением [дубликаты]

11

Я тестирую приложение, которое открывает свои собственные порты (действует как сервер для этих портов, следовательно, прослушивает эти порты) и где то же приложение подключается к портам, связанным другими приложениями (действует как клиент для этих портов).

Я хотел бы получить представление о том, какие порты создает приложение и к каким приложениям и портам оно подключается.

Как я могу это сделать?

Baz
источник

Ответы:

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 для имен хостов и т. д.)

В приведенном выше выводе вы видите, что есть процесс ssh-демона ( sshd) с PID, 1725прослушивающим порт 22на всех сетевых интерфейсах ( 0.0.0.0). Также есть процесс клиента ssh (PID 2491), связанный с IP-адресом 1.2.3.5в номере порта 22, мой IP-адрес есть, 1.2.3.4и мой внешний порт есть 45734. Вы видите, что соединение установлено. Поэтому я вошел через ssh.

хаос
источник
Установленное 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 заставить все варианты быть И-ред
  • -p 1981 показать вывод для процесса 1981
  • -n запретить поиск имени хоста и показывать IP вместо
  • -P запретить поиск службы и показать номер порта

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

gowenfawr
источник
Я хотел бы выполнить эту команду перед запуском приложения, которое я хочу отслеживать, но могу ли я определить, какой pid приложение получит перед запуском?
Баз
@Baz, если вы хотите отслеживать приложение при его запуске (например, до того, как узнаете, что это PID), вам следует попробовать straceрешение, предложенное @olivecoder.
gowenfawr
3

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

strace является правильным инструментом для контроля соединений, открытых в течение срока службы приложения:

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

Вывод покажет вам дополнительную информацию, такую ​​как запросы UDP и открытые, но закрытые соединения.

olivecoder
источник
0

ss -a4 | less

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

rotten777
источник