OSIPs
Этот скрипт рекурсивно сканирует каждый файл из заданной папки, извлекает все IPv4 и IPv6 адреса, отфильтровывает публичные IP-адреса и затем запрашивает эти IP-адреса в сетях TOR, сервисе WhoIs и службе определения местоположения. Он создаёт 4 файла: CSV-файл и JSON-файл со всеми деталями IP-адресов, CSV-файл с индексом каждого найденного IP-адреса и KML-файл со всеми собранными местоположениями.
Возможности
- Обрабатывает любое количество файлов за один запуск
- Также может быть запущен для одного входного файла
- Извлекает все уникальные корректные IPv4 и IPv6 адреса (корректно сравнивает два адреса, даже если они записаны по-разному)
- Собирает общедоступную информацию Who Is для всех публичных IP-адресов
- Запрашивает все публичные IP-адреса в ретрансляторах TOR
- Собирает информацию о географическом местоположении для всех публичных IP-адресов
- Может быть запущен с параметрами командной строки в неинтерактивном режиме для лёгкой интеграции в другие скрипты
- Может быть запущен без параметров, а входные значения могут быть введены интерактивно
- Позволяет пользователю выбирать, какие шаги выполнять или исключать
- Подробно выводит информацию на консоль на каждом выполняемом шаге
- Экспортирует все детали IP-адресов как в CSV-файл, так и в JSON-файл
- Экспортирует KML-файл, который можно легко загрузить на карту
- Сохраняет индекс всех найденных IP-адресов в отдельном CSV-файле для удобного отслеживания
Предварительные требования:
Python 3.9.x
Установка
Для установки зависимостей выполните:
pip install -r requirements.txt
Компиляция в исполняемый файл
pip install pyinstaller
pyinstaller --onefile osips.py
Использование
python osips.py [-h] [-F INPUTFOLDER] [-f INPUTFILE] [-p INPUTFILESPATTERN] [-o OUTPUTFILESNAME] [-t {y,n,Y,N}] [-w {y,n,Y,N}] [-l {y,n,Y,N}] [-locationEndpoint LOCATIONENDPOINT]
Интерактивно
python osips.py
Неинтерактивно
python osips.py --checkTor Y --checkWhoIs Y --checkLocations Y --inputFolder testFolder/ --inputFilesPattern * --outputFilesName test
Справка
python osips.py -h
Опции
-h, --help
Показать справку и выйти
-F INPUTFOLDER, --inputFolder INPUTFOLDER
Папка, содержащая файлы с IP-адресами (лог-файлы, файлы электронной почты, текстовые файлы и т.д.). IP-адреса могут быть IPv4 и/или IPv6 и могут находиться в любом месте файлов. Скрипт обработает каждый файл в папке и просканирует каждый IP-адрес.
-f INPUTFILE, --inputFile INPUTFILE
Используйте эту опцию для сканирования только одного файла вместо папки с файлами. Файл может быть любым текстовым файлом, содержащим IP-адреса (лог-файлы, файлы электронной почты, текстовые файлы и т.д.).
-p INPUTFILESPATTERN, --inputFilesPattern INPUTFILESPATTERN
Укажите шаблон для файлов во входной папке. Пример: * для всех файлов, *.txt для текстовых файлов.
-o OUTPUTFILESNAME, --outputFilesName OUTPUTFILESNAME
Имя для выходных файлов, БЕЗ РАСШИРЕНИЯ. С этим именем будут созданы 4 разных файла: CSV-файл с подробными данными IP-адресов, индексный файл с индексами IP, JSON-файл с данными и KML-файл с местоположениями.
-t {y,n,Y,N}, --checkTor {y,n,Y,N}
Укажите, хотите ли вы проверять каждый публичный IP-адрес на соответствие IP-адресам ретрансляторов TOR.
-w {y,n,Y,N}, --checkWhoIs {y,n,Y,N}
Укажите, хотите ли вы извлекать информацию WhoIs для каждого публичного IP-адреса.
-l {y,n,Y,N}, --checkLocations {y,n,Y,N}
Укажите, хотите ли вы геокодировать каждый публичный IP-адрес и извлечь информацию о местоположении с помощью https://reallyfreegeoip.org.
-locationEndpoint LOCATIONENDPOINT
По умолчанию конечная точка REST для местоположения: "https://reallyfreegeoip.org/json/". Вы можете указать другую конечную точку, включая заполнитель . Результат должен быть в формате JSON и содержать следующие поля: country_name, region_code, region_name, city, zip_code, time_zone, latitude, longitude, metro_code.
Примечания
- Инструмент извлекает IPv4-адреса только в десятичной нотации с точками (xxx.xxx.xxx.xxx). Он не извлекает IPv4-адреса в десятичной, восьмеричной или шестнадцатеричной нотации из-за высокой вероятности ложных срабатываний.
- В зависимости от количества найденных публичных IP-адресов, запросы к онлайн-сервисам могут занять много времени. Если вы имеете дело с большим количеством IP-адресов, рекомендуется сначала запустить инструмент без запросов к сервисам и просто извлечь IP-адреса. После просмотра результата извлечения вы можете оценить общее время работы инструмента при запросах к сервисам и в итоге выбрать запрос только к одному или двум сервисам.
- Ретрансляторы TOR проверяются в момент запуска инструмента. Поскольку эти IP-адреса постоянно меняются, эта информация может быть не очень точной. Если для IP-адреса также можно определить дату, его следует проверить в ExoneraTor по адресу: https://metrics.torproject.org/exonerator.html
- Информация Who Is, а также информация о местоположении собирается в реальном времени из общедоступных сервисов, поэтому IP-адреса отправляются на эти сервисы. Существуют загружаемые базы данных, которые позволили бы собирать эту информацию локально, но эти загрузки не бесплатны и требуют постоянных обновлений. Этот инструмент не предназначен для работы с локальными базами данных.
- Сервис, используемый по умолчанию для сбора местоположения: https://reallyfreegeoip.org. Это бесплатный сервис без ограничений, но он может быть не очень точным. Вы можете сменить этот сервис на другой, используя параметр -locationEndpoint скрипта. Вы можете указать другой сервис, который принимает IP-адрес в качестве параметра и возвращает ответ JSON. Используйте в качестве заполнителя для местоположения IP-адреса. Примеры: https://ipapi.co//json, https://api.ipstack.com/?access_key=ACCESS_KEY, https://freeapi.robtex.com/ipquery/. Обратите внимание, что некоторые из этих других REST-конечных точек могут не возвращать требуемые поля, что нарушит логику скрипта. В этом случае метод с именем RequestInfoFromRestEndpoint следует соответствующим образом изменить.
Благодарности