Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/jasondrawdy/forerunner
РазведкаКартирование сетиСканирование портовСбор информацииУтилиты и фреймворки
GitHubjasondrawdy/forerunner

Forerunner

Быстрая и расширяемая библиотека для сканирования сетей, поддерживающая многопоточность, проверку ping и сборщики сканирования.

Репозиторий
39146 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Forerunner — Быстрая и расширяемая библиотека для сканирования сетей, поддерживающая многопоточность, проверку ping и сборщики сканирования. | Kitploit

Forerunner

Библиотека Forerunner представляет собой быструю, легковесную и расширяемую сетевую библиотеку, созданную для помощи в разработке надежных сетевых приложений, таких как: IP-сканеры, port knockers, клиенты, серверы и т.д. В текущем состоянии библиотека Forerunner способна как синхронно, так и асинхронно сканировать и выполнять port knocking IP-адресов для получения информации об устройстве, расположенном по этому адресу, такой как: доступен ли IP в сети, физический MAC-адрес и т.п. Библиотека полностью объектно-ориентирована и основана на событиях, что означает, что данные сканирования содержатся в специально созданных объектах «scan», предназначенных для обработки всех данных — от результатов до исключений.

Требования

  • .NET Framework 4.6.1

Возможности

МетодОписаниеИспользование
ScanСканировать один IP для получения информацииScan("192.168.1.1");
ScanRangeСканировать диапазон IP-адресов для получения информацииScanRange("192.168.1.1", "192.168.1.255")
ScanListСканировать список IP-адресов для получения информацииScanList("192.168.1.1, 192.168.1.2, 192.168.1.3")
PortKnockПроверить каждый порт одного IP-адресаPortKnock("192.168.1.1");
PortKnockRangeПроверить каждый порт в диапазоне IP-адресовPortKnockRange("192.168.1.1", "192.168.1.255");
PortKnockListПроверить каждый порт по списку IP-адресовPortKnockList("192.198.1.1, 192.168.1.2, 192.168.1.3");
IsHostAliveПинговать хост N раз в течение X миллисекундIsHostAlive("192.168.1.1", 5, 1000);
GetAveragePingResponseПолучить среднее время отклика хоста на pingGetAveragePingResponse("192.168.1.1", 5, 1000);
IsPortOpenПроверить отдельные порты через TCP и UDPIsPortOpen("192.168.1.1", 45000, new TimeSpan(1000), false);

Примеры

Сканирование IP

Сканирование сети — обычная задача в нашу цифровую эпоху, поэтому я взял на себя смелость сделать это максимально простым для любого будущего программиста, который пожелает сделать это простым способом. Библиотека Forerunner полностью объектно-ориентирована, что делает её идеальной для ситуаций «подключи и работай»; объект для сканирования IP называется IPScanObject, и он содержит довольно много свойств:

  • Address (String)
  • IP (IPAddress)
  • Ping (Long)
  • Hostname (String)
  • MAC (String)
  • isOnline (Bool)
  • Errors (Exception)

Учитывая этот объект, давайте попробуем создать новый объект и выполнить сканирование с его помощью. Есть несколько способов сделать это, однако самый простой способ начать — сначала создать новый объект Scanner, чтобы получить доступ к нашим методам сканирования. Затем создайте IPScanObject и присвойте его методу Scan с IP-адресом, который вы хотите перечислить; например:

Синхронное
root@kitploit:~
using System;
using Forerunner; // Remember to import our library.

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            // Our IP we would like to scan.
            string ip = "192.168.1.1";

            // Create a new scanner object.
            Scanner s = new Scanner();

            // Create a new scan object and perform a scan.
            IPScanObject result = s.Scan(ip);

            // Output that we have finished the scan.
            if (result.Errors != null)
                Console.WriteLine("[x] An error occurred during the scan.");
            else
                Console.WriteLine("[+] " + ip + " has been successfully scanned!")

            // Allow the user to exit at any time.
            Console.Read();
        }
    }
}

Другой способ, который является моим предпочтительным методом работы, — создать объект Scanner и подписаться на Обработчики событий, такие как ScanAsyncProgressChanged или ScanAsyncComplete, чтобы иметь полный контроль над моими асинхронными методами; я могу контролировать, как их состояния прогресса влияют на мое приложение и так далее; например:

Асинхронное
root@kitploit:~
using System;
using System.Threading.Tasks;
using Forerunner; // Remember to import our library.

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            // Our IP we would like to scan.
            string ip = "192.168.1.1";

            // Setup our scanner object.
            Scanner s = new Scanner();
            s.ScanAsyncProgressChanged += new ScanAsyncProgressChangedHandler(ScanAsyncProgressChanged);
            s.ScanAsyncComplete += new ScanAsyncCompleteHandler(ScanAsyncComplete);

            // Start a new scan task with our ip.
            TaskFactory task = new TaskFactory();
            task.StartNew(() => s.ScanAsync(ip));

            // Allow the user to exit at any time.
            Console.Read();
        }

        static void ScanAsyncProgressChanged(object sender, ScanAsyncProgressChangedEventArgs e)
        {
            // Do something here with e.Progress, or you could leave this event
            // unsubscribed so you wouldn't have to do anything.
        }

        static void ScanAsyncComplete(object sender, ScanAsyncCompleteEventArgs e)
        {
           // Do something with the IPScanObject aka e.Result.
            if (e.Result.Errors != null)
                Console.WriteLine("[x] An error occurred during the scan.");
            else
                Console.WriteLine("[+] " + e.Result.IP + " has been successfully scanned!")
        }
    }
}

Port Knocking

Я знаю, о чём вы думаете. Port knocking? И да, и нет. Этот термин означает не традиционный port knocking (подключение через заранее заданный набор портов), а скорее просто проверку, какие порты открыты. Это буквально «стук» в каждый порт путём попытки подключиться к каждому порту и отправки данных. Как и при сканировании IP, port knocking использует пользовательский объект, который называется «Port Knock Scan Object» или сокращённо PKScanObject. PKScanObject содержит список PKServiceObject, которые, в свою очередь, хранят данные о портах; сервисный объект содержит следующие свойства:

  • IP (String)
  • Port (Int)
  • Protocol (PortType)
  • Status (Bool)

Port knocking выполняется аналогично сканированию IP. Сначала создайте объект Scanner. Затем создайте новый PKScanObject и присвойте его методу PortKnock с выбранным вами IP, после чего отобразите результаты; например:

Синхронное
root@kitploit:~
using System;
using Forerunner; // Remember to import our library.

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            // Our IP we would like to scan.
            string ip = "192.168.1.1";

            // Create a new scanner object.
            Scanner s = new Scanner();

            // Create a new scan object and perform a scan.
            PKScanObject result = s.PortKnock(ip);

            // Output that we have finished the scan.
            if (result.Errors != null)
                Console.WriteLine("[x] An error occurred during the scan.");
            else
                Console.WriteLine("[+] " + ip + " has been successfully scanned!")

           // Display our results.
           foreach (PKServiceObject port in result.Services)
           {
                Console.WriteLine("[+] IP: " + port.IP + " | " +
                                  "Port: " + port.Port.ToString() + " | " +
                                  "Protocol: " + port.Protocol.ToString() + " | " +
                                  "Status: " + port.Status.ToString());
           }

           // Allow the user to exit at any time.
           Console.Read();
        }
    }
}

Наконец, я покажу вам простой пример асинхронного port knocking. Он практически аналогичен синхронному, за исключением того, что вы можете использовать события для своей выгоды. Вы можете получать обновления прогресса, не беспокоясь о сбоях интерфейсов или блокировках системы; например:

Асинхронное
root@kitploit:~
using System;
using System.Threading.Tasks;
using Forerunner; // Remember to import our library.

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            // Our IP we would like to scan.
            string ip = "192.168.1.1";

            // Setup our scanner object.
            Scanner s = new Scanner();
            s.PortKnockAsyncProgressChanged += new PortKnockAsyncProgressChangedHandler(PortKnockAsyncProgressChanged);
            s.PortKnockAsyncComplete += new PortKnockAsyncCompleteHandler(PortKnockAsyncComplete);

            // Start a new scan task with our ip.
            TaskFactory task = new TaskFactory();
            task.StartNew(() => s.PortKnockAsync(ip));

            // Allow the user to exit at any time.
            Console.Read();
        }

        static void PortKnockAsyncProgressChanged(object sender, PortKnockAsyncProgressChangedEventArgs e)
        {
            // Display our progress so we know the ETA.
            if (e.Progress == 99)
            {
                Console.Write(e.Progress.ToString() + "%...");
                Console.WriteLine("100%!");
            }
            else
                Console.Write(e.Progress.ToString() + "%...");
        }

        static void PortKnockAsyncComplete(object sender, PortKnockAsyncCompleteEventArgs e)
        {
            // Tell the user that the port knock was complete.
            Console.WriteLine("[+] Port Knock Complete!");

            // Check if we resolved an error.
            if (e.Result == null)
                Console.WriteLine("[X] The port knock did not return any data!");
            else
            {
                // Check if we have any ports recorded.
                if (e.Result.Services.Count == 0)
                    Console.WriteLine("[!] No ports were open during the knock.");
                else
                {
                    // Display our ports and their details.
                    foreach (PKServiceObject port in e.Result.Services)
                    {
                        Console.WriteLine("[+] IP: " + port.IP + " | " +
                                          "Port: " + port.Port.ToString() + " | " +
                                          "Protocol: " + port.Protocol.ToString() + " | " +
                                          "Status: " + port.Status.ToString());
                    }
                }
            }
        }
    }
}

Благодарности

Иконка: monkik
https://www.flaticon.com/authors/monkik

Лицензия

Copyright © ∞ Jason Drawdy

Все права защищены.

Лицензия MIT (MIT)

Настоящим предоставляется бесплатное разрешение любому лицу, получившему копию данного программного обеспечения и сопутствующей документации (далее — «Программное обеспечение»), без ограничения, включая без ограничения права на использование, копирование, изменение, объединение, публикацию, распространение, сублицензирование и/или продажу копий Программного обеспечения, а также разрешение лицам, которым предоставляется Программное обеспечение, делать это при соблюдении следующих условий:

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

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ КОММЕРЧЕСКОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ В КОЕМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, УЩЕРБАМ ИЛИ ДРУГИМ ТРЕБОВАНИЯМ, ВОЗНИКАЮЩИМ ИЗ ДОГОВОРА, ДЕЛИКТА ИЛИ ИНЫХ ДЕЙСТВИЙ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ЕГО ИСПОЛЬЗОВАНИЕМ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.

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

Скачать инструмент