Недавно мне понадобилась какая-нибудь утилита, которая регистрировала бы все уникальные IP-адреса, с которыми взаимодействовали все процессы Java на сервере.
Я немного погуглил и не нашел хорошего и простого решения для этого. Поэтому я решил немного пошалить и написал следующий сценарий.
while true do netstat -nput 2>/dev/null | grep 'java' | tr -s ' ' | cut -f5 -d ' ' | cut -f1 -d ':' | uniq | while read -r ip; do grep -qxF $ip ip.log || echo $ip >> ip.log; done sleep 5 done
Давайте рассмотрим его шаг за шагом, чтобы объяснить, что он делает:
while true
– это означает, что при выполнении он будет выполняться до тех пор, пока не остановится, легкоnetstat -ввод 2>/dev/null
– netstat печатает сетевые подключения--n
– показывать числовой адрес вместо того, чтобы пытаться разрешить имена хостов-p
– показать PID программы-u
– включить UDP-соединения-t
– включить TCP-соединения
grep 'java'
– принимает только те строки, в которых есть Java (PID содержит java для приложений Java)trs ' '
– заменяет каждую последовательность пробелов одним пробеломcut -f5 -d ' '
– занимает пятую колонку (разделенную пробелами)cut -f1 -d ':'
– берет первую часть (разделенную символом:) – удаляет портuniq
– делает список уникальнымво время чтения -r ip; выполните grep -q x F $ip ip.log
echo $ip >> ip.log; готово- добавляет его в файл журнала, если он его еще не содержит
grep -qx
-q- тихо, ничего не записывайте в стандартный вывод
-x- выберите только те совпадения, которые точно соответствуют всей строке
-F
Надеюсь, это поможет вам, или если у вас есть лучшее решение, пожалуйста, дайте мне знать.
Вы можете следовать за мной по Twitter чтобы получить больше потрясающего контента, подобного этому.
Оригинал: “https://dev.to/pavel_polivka/logging-unique-ip-addresses-your-java-code-communicates-with-19ik”