11

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

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

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

5 ответов5

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 .

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 становится все более стандартным, чем раньше.

3

утилита ss из пакета iproute для Linux

3

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

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

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

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

0

ss -a4 | less

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .