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

8 min

language: ja bn en es hi pt ru zh-cn zh-tw

Привет, я бездарь.

Ой-ой, кажется, в заголовке использована фраза, которую я где-то слышал... До сих пор иногда думаю, что это хорошее название для сайта. В эти дни на медосмотре у меня было идеальное низкое давление 60-100. Второе измерение показало очень низкое давление, так что, конечно, использовали первое значение.

Введение

Внезапно
я подумал: «Хочу наглядно выводить, какие порты используются и какие службы им соответствуют».

Причина в следующем:

  • При личном использовании хочу легко проверять и выводить информацию без необходимости в схеме конфигурации сервера.
  • Хочу выводить в формате Markdown или в виде текстового файла.
  • Проверка используемых портов
    Честно говоря, по мере того как я запускаю все больше своих собственных вещей, я часто задаюсь вопросом: «Какой порт я использовал?»
    Таких случаев становится много, и как только у меня будет собрана нужная информация, я хочу в какой-то степени автоматизировать это с помощью скрипта и легко проверять в виде файла .md.
    Кстати, причина, по которой я настаиваю на текстовых файлах, заключается в том, что
    это упрощает работу с данными.
    Я напишу об этом подробнее позже.

Просто набрав одну эту команду:

lsof -i -P -n | grep "LISTEN" |  awk '{print $1 "," $3 "," $9}' | sort | uniq

получим:

$ lsof -i -P -n | grep "LISTEN" |  awk '{print $1 "," $3 "," $9}' | sort | uniq
pulseaudi,haturatu,*:38169
pulseaudi,haturatu,*:44409
pulseaudi,haturatu,*:4713

Вывод будет выглядеть примерно так.
Кстати, результат вывода тот же и без опций lsof, но, похоже, в версии BSD он отличается, поэтому я использую все опции.

Преобразование в CSV

Хотя о форматах файлов часто говорят разное, мне нравится формат CSV.
Честно говоря, я не думаю, что CSV плох при работе с CSV-файлами. Единственная очевидная вещь заключается в том, что если вы замените запятые с помощью sed, и запятая используется внутри строки, то она тоже будет заменена.
TSV пока не очень привычен, поэтому CSV лучше. (Честно говоря, если заменять с помощью sed, то что будет иметь меньше ошибок: запятая или табуляция...)

Я немного отвлекся, но если легко преобразовать это в CSV, то можно скопировать и вставить прямо в Excel, и даже простое открытие обеспечит высокую читаемость.
Можно легко открыть его как файл .csv, перенаправив стандартный вывод, например, в LibreOffice. Далее добавим информацию о TCP и UDP.

$ lsof -i -P -n | grep "LISTEN" |  awk '{print $1 "," $3 "," $9 "/" $8}' | sort | uniq > test.csv

Image
Получится примерно так:

Таким образом,
Image
возможно, будет довольно легко визуализировать.

Честно говоря, сначала я выводил данные грубо, используя `print " "` без пробелов, как в `printf %10s`, но в конечном итоге, для команды, предназначенной для формата CSV, мне кажется, что передача ее через пайп команде column делает саму команду более понятной и читаемой...
Image

Если преобразовывать в формат Markdown

Сначала я думал сделать таблицу в формате Markdown, но мне не очень нравятся таблицы в Markdown, поэтому я решил, что будет достаточно использовать «```» для удобного копирования и вставки.
При необходимости я выведу данные с помощью `awk`.

Цель вывода в формате Markdown заключается в том, что если запускать это как cron-задачу для регулярной отправки в приватный репозиторий на GitHub или аналогичном сервисе, то можно будет легко проверять информацию в любое время.

Размышления о других необходимых вещах

Далее, для проверки объема диска есть df -h, vmstat, free и т.д., но это уже больше относится к мониторингу ресурсов всей системы, так что, возможно, лучше будет извлекать информацию из /proc/cpuinfo, /proc/meminfo и т.п.
Было бы еще лучше, если бы информация о таблицах БД была легко визуализируемой. Если бы я это делал, то мог бы запускать некоторые команды, связанные с БД, с помощью `which *` и выводить информацию только для тех, которые возвращают статус 0, что было бы еще более тщательно. Но я немного неохотно берусь за это.

Схемы конфигурации сильно различаются у разных людей, и я понимаю, что подробные проектные документы для промежуточного ПО, конечно, необходимы, но общую картину системы трудно проверить, если она не собрана в одном месте, поэтому я задаюсь вопросом, нет ли способа упростить личное управление.
Легко создавать диаграммы с помощью таких инструментов, как draw.io, но я также хочу сократить затраты на проверку до создания этих диаграмм.

Бонус: Молчание Wireguard

Кстати, когда я это делал, я задался вопросом, почему lsof не показывает Wireguard, работающий на UDP51820, и затем нашел ответ.
the wireguard not listening on port after started
Raspberry Pi で WireGuard + VPS
Похоже, это потому, что он функционирует как модуль ядра. По моей собственной интерпретации, Wireguard работает на уровне 3, а "

процесс показывает открытые файлы", поэтому я подумал, может быть, поэтому он не выводит его. Я ошибаюсь?

Кстати, японская документация Red Hat довольно понятна.
Глава 8. Настройка WireGuard VPN
На этом сегодня все. Если мне придет в голову что-то еще хорошее, я, возможно, напишу продолжение, а может быть, и нет.
До новых встреч.

Related Posts