Какие порты использует приложение

Какие порты использует приложение

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

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

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

решение1

Для этого можно использовать 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.

решение2

Другой инструмент, который может это сделать, —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становится более стандартным, чем раньше.

решение3

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

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

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

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

решение4

ss -a4 | less

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

Связанный контент