Я помню что разделитель табулятор. Я когда писал статью, не успевал поэтому ее скопировал вместе с кодом в нотпад. Потом перенс снова когда продолжил писать. Вот и поехал код. Пробелы или табуляция - вспомнился холивар
Спасибо, что поделились своим опытом и шаблоном. Было очень интересно ознакомится!
Для моего товарища будет актуально. Отправил ему ссылку, может, наконец-то, купит зеннопостер))
интересное решение для чека сбора и чека доменов ) кто знает как использовать домены получится отличное решение
одно э то скорее всего багхантер , так же могу предположить полезно будет для тех кто занимаетсяч спамом (тот поймет зачем домены) ну и еще много вариантвоприменения
интересное решение для чека сбора и чека доменов ) кто знает как использовать домены получится отличное решение
одно э то скорее всего багхантер , так же могу предположить полезно будет для тех кто занимаетсяч спамом (тот поймет зачем домены) ну и еще много вариантвоприменения
Продолжение в процессе, сами мини статьи готовы но возникла проблема с кодом
По поводу спама я так понял вы про open relay?
По багханту чуть дальше тоже в данной ветке
За трое суток заапрувили все зоны, кроме
207 шт. " в процесе"
3 шт - "отклонили"
Жаль, конечно, что .com никак не аппрувится
Знаю один сайт, что ровно этими же списками торгует по подписке 30баксов/месяц ) Это в догонку тем, кто спрашивал зачем и почему
За трое суток заапрувили все зоны, кроме
207 шт. " в процесе"
3 шт - "отклонили"
Жаль, конечно, что .com никак не аппрувится
Знаю один сайт, что ровно этими же списками торгует по подписке 30баксов/месяц ) Это в догонку тем, кто спрашивал зачем и почему
За трое суток заапрувили все зоны, кроме
207 шт. " в процесе"
3 шт - "отклонили"
Жаль, конечно, что .com никак не аппрувится
Знаю один сайт, что ровно этими же списками торгует по подписке 30баксов/месяц ) Это в догонку тем, кто спрашивал зачем и почему
Обычно зона /com апрувится в числе первых. Но как я подозреваю - сейчас ответственный администратор зоны скорее всего завален заявками и не спеша разбирает их. Кейс по регистрации прочитали более 1000 человек, а видеоинструкции на 7 сервисах просмотрело больше 2,2к человек.
Продолжаем разговор.... Приступаем к обогащению наборов. ГЕО данные.
Один из неваловажных вопросов связанных с обработкой данных, например по портам, службам (багхантер/BugBounty) - является определение местоположение хостов. И именно тут оно как никогда актуально, так как тематические зоны могут находится в любой стране и навскидку это не определить. Это чревато.
Таким образом нам необходимо после того как мы отпинговали NS- сервера "парковок" определить их местоположение.
Вот здесь возникли две проблемы
1 - Файлы или сервисы предоставляющие наборы диапазонов ip с геокординатами и таймзонами неприлично дороги хотя исходная информация находится в открытом доступе. Но эта проблема, которая на самом деле не проблема - в текущее время решается при помощи наборов IANA ( будет дальше в треде).
2 - Диапазоны IPv4 это - 32-битные адреса, что означает, что общее количество возможных IPv4 адресов составляет 2^32 или 4,294,967,296. Однако, некоторые из этих адресов зарезервированы для специальных целей, таких как приватные сети, многоадресные группы и другие. Поэтому фактическое количество доступных для использования IPv4 адресов намного меньше этого числа. А как мы помним у нас 2,8 миллиона пропингованных NS серверов из наборов доменов. Это означает что для сравнения нам требуется 4,294,967,296 ( IPv4) х 2,800,000 (NS серверов) = 12,028,705,341,440,000 итераций.
Но на самом деле конечно же и количество итераций и количество времени будет меньше. На словах конечно все просто и я даже (не без проблем реализовал это)
Работает - не трогай? Но 14 часов это перебор даже для лузера. Так что я занялся исправлением и оптимизаций
Спойлер - 90+/- 10 минут обработки. Конечно и это много, но такой объемный рассчет делается один раз, затем только необходимо обновлять (проводить обогащение списка) только с новыми позициями по несколько тысяч строк что будет занимать секунды.
Итак, как я говорил, геоданных пока нет (вопрос будет решен в ближайшее время ), поэтому воспользуемся бесплатным набором который содержит только половину из всех IPv4 адресов. Найти его можно тут https://db-ip.com/db/lite.php
После расспаковки он выглядит так
3 307 910 строк с диапазонами IPv4 адресов (на самом деле файл "длиней" я удалил из него IPv6 диапазоны) - что составляет примерно половину от всех диапазонов IPv4. Строка содержит значения - адрес начала диапазона, адрес конца диапазона, название континета и страны по ISO 3166-1, регион (указан только в странах в которых есть такие региональные деления), название города или местности и геокординаты сервера, который управляет данным диапазоном адресов.
Напомню как выглядят наши пропингованные NS сервера
Теперь надо составить логику обработки. Она проста как дуло танка. Читаем список с геокординатами. Разделяем его при помощи запятой, берем первые два индекса (0,1). Первый индекс дробим на октеты и по первому октету сотавляем виртуальные коллекции. После составления коллекций эти два значения (индексы 0,1) преобразовываем в простые числа.
Затем берем список с пропингованными NS серверами делим его при помощи разделителя вертикальный слэш, берем второе значение (индекс 1) по первому октету определяем в какую коллекцию отправлять его на проверку и преобразовываем в простое число.
В коллекции проводим сравнения по принципу если "больше/равно-меньше/равно" - то гуд, если "меньше-больше" то берем следующую строку из диапазона коллекции. И так до совпадения "больше/равно-меньше/равно" (вкратце описал).
При совпадении необходимо формировать выходную строку в виде - совпавшая строка из файс NS серверами + строка вхождения из файла ГЕО.
Также нам нужно понимать сколько строк получено из файлов, сколько создано коллекций, количество найденных совпадений (пока список ГЕО не полный - эта информация нужна для понимания эффективности). Для ускорения обработки и "защиты от дурака" задать многопоточность работы с учетом количества логических ядер "на борту" (не потоков, а ядер, обработка потребляет значительные вычислительные ресурсы и очень энергоемка) ну и конечно же счетчик времени работы скрипта для дальнейшего планирования времени для этих задач. Хотелось бы сказать что проще простого - но тут мне пришлось напрячься.
Выглядеть будет так выходной файл
Другая проблема которая возникла при разработке - я не смог запихать код в ZP. А в нем предусмотрены элементы контроля по предотвращению гонки потоков ConcurrentBag.
Но в этом случае я не стал париться. При работе с ZP пользователи юзают текстовые документы, базы данных, гугл и эксель таблицы, браузеры и многое другое. Ну раз нельзя запихать в ZP - то можно создать свое приложение и также запускать его с передачей значений ведь это тоже самое что и с приложениями выше, только в этом случае оно узкоспециализированное.
В принципе ничего сложного, смотрим пруф.
Действительно кажется что такой маленький и простой код - но он занял несколько десятков экспериментов.
Диапазонатор:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class Program
{
static readonly object lockObject = new object();
static StringBuilder outputData = new StringBuilder();
static async Task Main(string[] args)
{
if (args.Length < 3)
{
Console.WriteLine("Ошибка: Необходимо передать пути к файлам geo.txt, good.txt и output.txt в качестве аргументов командной строки.");
return;
}
string geoFilePath = args[0];
string goodFilePath = args[1];
string outputFilePath = args[2];
Console.WriteLine("Считываю список IP-адресов из файла 'good.txt'");
var ipList = File.ReadAllLines(goodFilePath);
Console.WriteLine($"В списке 'good.txt': {ipList.Length} строк");
Console.WriteLine("Считываю список диапазонов из файла 'geo.txt'");
var rangeList = File.ReadAllLines(geoFilePath);
Console.WriteLine($"В списке 'geo.txt': {rangeList.Length} строк");
Console.WriteLine("Построение словаря диапазонов IP-адресов...");
var ranges = new Dictionary<string, List<string[]>>();
foreach (var rangeLine in rangeList)
{
var rangeParts = rangeLine.Split(',').Select(x => x.Trim()).ToArray();
if (rangeParts.Length == 8)
{
var startIP = rangeParts[0];
var endIP = rangeParts[1];
var octet = startIP.Split('.').FirstOrDefault();
if (!string.IsNullOrEmpty(octet))
{
lock (lockObject)
{
if (!ranges.ContainsKey(octet))
{
ranges[octet] = new List<string[]>();
}
ranges[octet].Add(rangeParts);
}
}
}
}
Console.WriteLine($"Получено {ranges.Count} подсписков диапазонов, в среднем по {ranges.Values.Average(x => x.Count()):F0} строк в каждом");
Console.WriteLine("Проверка списка IP-адресов...");
await Task.WhenAll(ipList.Select(ip =>
Task.Run(() =>
{
var ipParts = ip.Split('|');
if (ipParts.Length == 2)
{
var domain = ipParts[0];
var ipAddress = ipParts[1];
var octet = ipAddress.Split('.').FirstOrDefault();
if (ranges.ContainsKey(octet))
{
foreach (var range in ranges[octet])
{
var startIP = range[0];
var endIP = range[1];
if (IsInRange(ipAddress, startIP, endIP))
{
lock (lockObject)
{
outputData.AppendLine($"{ip},{string.Join(",", range)}");
}
break;
}
}
}
}
})));
Console.WriteLine($"Найдено {outputData.Length / (Environment.NewLine.Length + 1)} попаданий IP-адресов в диапазоны");
Console.WriteLine("Запись результатов в файл outputFilePath");
using (var writer = new StreamWriter(outputFilePath))
{
await writer.WriteAsync(outputData.ToString());
}
Console.WriteLine("Готово! Результаты записаны в файл 'output.txt'");
Console.ReadLine();
}
static bool IsInRange(string ipAddress, string startIP, string endIP)
{
var ipParts = ipAddress.Split('.');
if (ipParts.Length != 4)
{
return false; // Некорректный формат IP-адреса
}
var ip = ipParts.Select(int.Parse).ToArray();
var start = startIP.Split('.').Select(int.Parse).ToArray();
var end = endIP.Split('.').Select(int.Parse).ToArray();
for (int i = 0; i < 4; i++)
{
if (ip[i] < start[i] || ip[i] > end[i])
{
return false;
}
}
return true;
}
}
Образец строки для передачи аргументов в ZP (подробности в видео )
&C:\Users\vigan\Desktop\GEO\GEO.exe C:\Users\vigan\Desktop\geo.txt C:\Users\vigan\Desktop\good.txt C:\Users\vigan\Desktop\output.txt
После обработки и совмещения обогащенных данных в данном комменте со списками доменов, Ваши наборы данных автоматически переходят в другую лигу. Если данные в виде -домен ,NS сервера - стоят 20-30 USD за весь набор, то наборы дополненные с ГЕО данными стоят уже от 50 USD причем за небольшие зоны, а полные наборы уже от 800 USD.
Консольное приложение в аттаче, если кому то нужна версия под 32 битную систему - пишите (приложена версия под 64 бита).
Ну а далее нам необходимо при помощи таблицы суффиксов Mozzila - вычленить оригинальные домены из NS сервреров, проверить их адресацию, определить хостинг провайдеров, собрать их данные и также добавить в наши наборы данных. Для кого то это будет увеличение стоимости наборов, для кого то более удобный инструмент для точного вектора исследований. И заспойлерю - мы только начинаем нашу работу.
PS Стоит отметить что я предпринимал попытку ранее по обработке диапазонов IPv4 адресов в прошлом году ТУТ и мне очень помогли пользователи со своими решениями и образцами кода @Alexmd и @BAZAg за что им отдельный респект и уважение.
Изменение стратегии... Хост-провайдеры и телекоммуникационные компании.
Знаете какой самый лучший план при разработке? То в котором нет дорожной карты, а есть указатели направления (ирония). Для многих изменение планов весьма болезнено, наверное и для меня, поэтому я не указываю в планировщике - взять то, обработать, совместить, проверить, тестировать, прогнать, поправить - нет. Я пишу - нужны провайдеры. А каким образом это будет реализовываться - вечерний я - отдаю на откуп - я утреннему.
Итак, каков был план. При помощи таблицы суффиксов Mozilla я хотел обработать ns сервера чтобы вычленить оригинальные домены и определить хост парковки и провайдеров. Давайте глянем что это такое и с чем его едят.
Для поиска провайдеров это нам не подходит по одной причине - резольверы не всегда актуалят на парковку. Настоящие данные провайдера могут скрыты за кучей разнообразных сервисов. Мы можем отправлять запрос PTR и получать "левые" и не нужные данные.
Давайте разберем это в кратком обзоре чтобы понять почему подход который я хотел применить (возможно и вы) не сработает
Значит не получится? Не у меня!
Всегда можно найти решение которое будет гораздо проще, эффективней и более информативно. Как вам 1 200 000 000 + адресов IPv4 которые на 100% гарантируют резольвинг на хост площадку? Миллионы адресов серверов хостинг, интернет, телекоммуникационных компаний и различных служб и сервисов?
Смотрим
Это уже дамы и господа начинается работа по взрослому. Мы потихоьку подходим к тому, чтобы создать не сколько профессиональный бизнес каталог, а уже профессиональный инструмент экстра класса.
Разобрать списки хостинг провайдеров которые я собрал, обработать все списки ptr, совместить это с нашей базой данной которая уже содержит DOMAIN+NSs+IP+GEO чтобы еще расширить наборы данных и максимально обогатить их.
Мне задают вопрос, зачем я так зациклился на обогащении данных именно по хостинг провайдерам? Ну во первых - это просто необходимо если мы действительно собираем профессиональное решение или хотим зарабатывать на продажах обогащенных наборов доменов. Скажете ерунда? Вот сколько стоит набор из 140к+ хостов провайдеров
Обогатив свои списки доменов наряду с DOMAIN+NSs+IP+GEO еще и HOST_PROV - вы получите каталог еще не ультра, но уже экстра класса. Помните сколько у нас на выборке обогащенных ГЕО данными NS серверов? Напомню - 2,8М+
А вот сколько стоит список из 1,1М+
То есть уже уже скоро, вы научитесь создавать, обогащать и поддерживать в актуальном состоянии БД, которые не в состоянии наполнять полностью даже крупные ресурсы с большим траффиком и большим бюджетом. И делать Вы это будете бесплатно, так как все данные находятся в открытом доступе, их нужно только взять и обработать. Причем как вы видели - я работаю на I5 с 8 ГБ RAM "на борту".
Кстати, про ресурс на который я ссылаюсь - вот его посещаемость, почему? Потому что эти данные востребованны и после того как мы все полностью пройдем я покажу где "ходят" клиенты.
Ну что же чуть дальше я выложу обработчик и данные. Конечно там работы на раз и плюнуть, несколько десятков строк кода, но емае 1 200 000 000 строк, тесты производительности займут время.
We Provide Myip.ms Full Whois IP Ranges Database in Mysql Format for use in your applications. All our data from public world WHOIS databases 2015-2024 years.
У меня в 2018 еще был подтвержден аккаунт и заапрувлены какие-то зоны, я правильно понимаю, что если скачиваю списки, то данные по ним дают на момент сейчас?
Привет, хотел уточнить, а не планируется разобрать кейс с фильтрацией зон по нескольким фаилам, например
wordpress, cloudflare, hcaptcha, recaptcha, blogger, bitrix и подобных разнообразных выборок.
грубоговоря обединить несколько фаилов зон, перемешать их и затем прочекать сразу на несколько параметров и распихать по фаилам.
я давно думаю о таком комбаине, и впринципе есть мысли как это реализовать, но к сожалению пока так не умею так писать, чтобы работало максимально быстро как у вас и с многопотоком есть недостаток опыта.
У меня в 2018 еще был подтвержден аккаунт и заапрувлены какие-то зоны, я правильно понимаю, что если скачиваю списки, то данные по ним дают на момент сейчас?
Привет, хотел уточнить, а не планируется разобрать кейс с фильтрацией зон по нескольким фаилам, например
wordpress, cloudflare, hcaptcha, recaptcha, blogger, bitrix и подобных разнообразных выборок.
грубоговоря обединить несколько фаилов зон, перемешать их и затем прочекать сразу на несколько параметров и распихать по фаилам.
я давно думаю о таком комбаине, и впринципе есть мысли как это реализовать, но к сожалению пока так не умею так писать, чтобы работало максимально быстро как у вас и с многопотоком есть недостаток опыта.
У меня в 2018 еще был подтвержден аккаунт и заапрувлены какие-то зоны, я правильно понимаю, что если скачиваю списки, то данные по ним дают на момент сейчас?
Привет, хотел уточнить, а не планируется разобрать кейс с фильтрацией зон по нескольким фаилам, например
wordpress, cloudflare, hcaptcha, recaptcha, blogger, bitrix и подобных разнообразных выборок.
грубоговоря обединить несколько фаилов зон, перемешать их и затем прочекать сразу на несколько параметров и распихать по фаилам.
я давно думаю о таком комбаине, и впринципе есть мысли как это реализовать, но к сожалению пока так не умею так писать, чтобы работало максимально быстро как у вас и с многопотоком есть недостаток опыта.
Вообще, так как CMS более 1800, плюс куча сервисных, то проверять списки даже на больших серверах весьма затратно. НО, есть другие методы о которых не говорят.
Крупные CMS - обычно имеют свою парковку и свои NS сервера, Вам нужно пингануть (ping -n 1 адрес хоста) сайт, получить айпи, затем найти диапазоны в которые входит этот адрес, разложить его в ip список и преобразовать в ip>domain
Да, 100% не охватите, но на практике знаю - если даже возьмете в работу 20% то прежде чем Вы их обработаете, начало списка уже устареет
Привет, хотел уточнить, а не планируется разобрать кейс с фильтрацией зон по нескольким фаилам, например
wordpress, cloudflare, hcaptcha, recaptcha, blogger, bitrix и подобных разнообразных выборок.
грубоговоря обединить несколько фаилов зон, перемешать их и затем прочекать сразу на несколько параметров и распихать по фаилам.
я давно думаю о таком комбаине, и впринципе есть мысли как это реализовать, но к сожалению пока так не умею так писать, чтобы работало максимально быстро как у вас и с многопотоком есть недостаток опыта.
Есть еще варианты, не везде срабатывает и не все соберет, но зато быстро и бесплатно, сейчас видео запишу и сюда с пояснениями выкину, "на палцах" текстом не объяснить
Перед тем как продолжить, хочу ответить на вопрос который мне прислали уже несколько человек.
Точнее 2 вопроса но по одной и той же теме.
Первый вопрос звучал так - как пропинговать домены для проверки на существование /ping
Второй вопрос - как проверить список доменов на ответ StatusCode 200
Однозначного ответа не на первый ни на второй вопрос нет
Если Вы будет пинговать командой ping списки доменов для создания каталогов, для проверки на сущестование - Вы будете терять от 5% до 11% работающих и существующих доменов что будет Вас напрягать.
Если Вы будете кодом проверять статус код для, например, предварительной оценки перед отправкой списков на парсинг, то получите кучу существующих доменов, но без сайтов, а как следствие - очень сереьзную просадку производительности и потерю нервов из за вопроса - WTF? After all, the code is 200?
Объясняю и показываю
Сам в начале пути сталкивался с такими неприятными моментами, когда после проверки и статуса 200 я не мог получить не ссылок ни кода страниц. И хотя я честно искал ответы на форумах, до всего приходилось, в итоге, "доходить" самому.
(ПРОФФЕССИОНАЛЬНОЕ ПОИСКОВОЕ NO-CODE РЕШЕНИЕ | ВАЖНО ПРО CLOUDFLARE В КОНЦЕ ВИДЕО)
Для @seodamage - Ответ на ваш вопрос
"привет, хотел уточнить, а не планируется разобрать кейс с фильтрацией зон по нескольким фаилам, например
wordpress, cloudflare, hcaptcha, recaptcha, blogger, bitrix и подобных разнообразных выборок. "
Также ответ будет полезен и для сеошников, вебмастеров которые помогают с настройками/доведением сайтов "до ума", директологам ну и по теме статьи ответ также имеет значение.
Одним из моментов в контексте вопроса от @seodamageбыло "я давно думаю о таком комбаине, и впринципе есть мысли как это реализовать, но к сожалению пока так не умею так писать, чтобы работало максимально быстро как у вас и с многопотоком есть недостаток опыта. ". Конечно же, по плану разработки нашего SaaS решения это все будет программно реализовано, но если нужно "прямо сейчас", то можно сделать и без кодирования. Скажу так, иногда когда очень нужно - но не умеешь, сделай как умеешь и максимально быстро. Решение по выборкам опередит многие программные решения новичков.