Я тестирую приложение, которое открывает свои собственные порты (действует как сервер для этих портов, следовательно, прослушивает эти порты) и где то же приложение подключается к портам, связанным другими приложениями (действует как клиент для этих портов).
Я хотел бы получить представление о том, какие порты создает приложение и к каким приложениям и портам оно подключается.
Я часто использую параметры -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становится все более стандартным, чем раньше.
Я хотел бы выполнить эту команду перед запуском приложения, которое я хочу отслеживать, но могу ли я определить, какой pid приложение получит перед запуском?
Баз
@Baz, если вы хотите отслеживать приложение при его запуске (например, до того, как узнаете, что это PID), вам следует попробовать straceрешение, предложенное @olivecoder.
Я предполагаю, что вы говорите об IPv4 ... Если нет, вы можете заменить 4 в предыдущей команде на 6. Параметр -a должен показать все порты (прослушивающие и не подключенные). Вы можете добавить -n к параметрам, если не хотите разрешать имена на дисплее.
Еще один инструмент, который может сделать это
lsof
:Используются следующие параметры:
-i
распечатать интернет-порты, открытые процессом-a
заставить все варианты быть И-ред-p 1981
показать вывод для процесса 1981-n
запретить поиск имени хоста и показывать IP вместо-P
запретить поиск службы и показать номер портаlsof
имеет преимущество в том, что вы можете указать процесс для проверки, вместо того, чтобы вытаскивать его из большего вывода.netstat
более надежно доступен в системах, хотяlsof
становится все более стандартным, чем раньше.источник
strace
решение, предложенное @olivecoder.ss
утилита из пакета iproute для Linuxисточник
У нас уже есть хорошие ответы, но они только перечисляют порты, которые открыты в момент выполнения команды.
strace
является правильным инструментом для контроля соединений, открытых в течение срока службы приложения:Вывод покажет вам дополнительную информацию, такую как запросы UDP и открытые, но закрытые соединения.
источник
ss -a4 | less
Я предполагаю, что вы говорите об IPv4 ... Если нет, вы можете заменить 4 в предыдущей команде на 6. Параметр -a должен показать все порты (прослушивающие и не подключенные). Вы можете добавить -n к параметрам, если не хотите разрешать имена на дисплее.
источник