Компактная CLI-утилита на Go для извлечения IPv4 и IPv6 адресов из текстовых файлов или stdin. Поддерживает режим уникальных адресов, чтение из нескольких файлов, потоковую обработку. Применяется в OSINT и threat intelligence пайплайнах: парсинг логов, дампов данных, HTTP-ответов, конфигурационных файлов для быстрого извлечения IP-индикаторов.
# go install (рекомендуется, модуль зеркалирован на GitHub) go install github.com/hrbrmstr/ipx@latest # Из исходников git clone https://github.com/hrbrmstr/ipx cd ipx go build -o ipx . sudo mv ipx /usr/local/bin/ # Использование cat access.log | ipx # все IP из stdin ipx -u dump.txt # уникальные IP (дедупликация) ipx -4 /var/log/syslog # только IPv4 ipx -6 -u /var/log/syslog # только IPv6, без дублей grep "connection from" /var/log/*.log | ipx -u | wc -l
Извлекайте IPv4 и IPv6 адреса из текста.
ipx считывает текст из файлов или стандартного ввода и печатает каждый найденный валидный IP-адрес по одному в строке. Он работает как с IPv4, так и с IPv6 — включая сжатые формы вроде ::1 и 2001:db8:: — и нормализует вывод в каноническое представление.
go install github.com/hrbrmstr/ipx@latest
Или соберите из исходного кода:
git clone https://github.com/hrbrmstr/ipx.git
cd ipx
go build -o ipx .
ipx [flags] [file ...]
Если файлы не указаны, ipx читает данные из стандартного ввода.
| Флаг | Описание |
|---|---|
-4 |
Выводить только адреса IPv4 |
-6 |
Выводить только адреса IPv6 |
-u |
Убрать дубликаты из вывода (печатать каждый адрес не более одного раза) |
Извлечь все IP-адреса из файла журнала:
ipx /var/log/nginx/access.log
Передать ввод через ipx:
curl -s https://example.com | ipx
Показывать только адреса IPv4:
dig example.com ANY +short | ipx -4
Показывать только адреса IPv6, убрав дубликаты:
ipx -6 -u /var/log/syslog
Извлечь уникальные IP-адреса из нескольких файлов:
ipx -u access.log.1 access.log.2 access.log.3
Сочетать с другими инструментами:
grep -ri "connection from" /var/log/ | ipx -4 -u | wc -l
ipx использует широкое регулярное выражение для поиска строк-кандидатов, которые выглядят как IP-адреса, а затем проверяет каждого кандидата с помощью функции Go net.ParseIP. Этот двухэтапный подход позволяет избежать как ложных срабатываний (например, номеров версий вроде 1.2.3.4 в строках semver), так и пропусков (например, адресов IPv6 с сжатием ::).
Весь вывод нормализуется. Например, 2001:0db8:0000:0000:0000:0000:0000:0001 выводится как 2001:db8::1.
MIT