Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/jasondrawdy/forerunner
ReconocimientoMapeo de RedesEscaneo de PuertosRecopilación de InformaciónUtilidades y Frameworks
GitHubjasondrawdy/forerunner

Forerunner

Biblioteca de escaneo de redes rápida y extensible que cuenta con múltiples hilos, sondeo ping y extractores de escaneo.

Ver Repositorio
3914hace 6 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Forerunner

La biblioteca Forerunner es una biblioteca de red rápida, ligera y extensible creada para ayudar en el desarrollo de aplicaciones robustas centradas en la red, tales como: Escáneres de IP, Golpeadores de Puertos, Clientes, Servidores, etc. En su estado actual, la biblioteca Forerunner es capaz de escanear y golpear puertos de direcciones IP tanto de forma síncrona como asíncrona para obtener información sobre el dispositivo ubicado en ese punto final, como: si la IP está en línea, la dirección MAC física, etc. La biblioteca es completamente orientada a objetos y basada en eventos, lo que significa que los datos de escaneo están contenidos dentro de objetos de "escaneo" especialmente diseñados que están construidos para manejar todos los datos, desde resultados hasta excepciones.

Requisitos

  • .NET Framework 4.6.1

Características

MétodoDescripciónUso
ScanEscanea una sola IP en busca de informaciónScan("192.168.1.1");
ScanRangeEscanea un rango de IPs en busca de informaciónScanRange("192.168.1.1", "192.168.1.255")
ScanListEscanea una lista de IPs en busca de informaciónScanList("192.168.1.1, 192.168.1.2, 192.168.1.3")
PortKnockHace ping a cada puerto de una sola IPPortKnock("192.168.1.1");
PortKnockRangeHace ping a cada puerto en un rango de IPsPortKnockRange("192.168.1.1", "192.168.1.255");
PortKnockListHace ping a cada puerto usando una lista de IPsPortKnockList("192.198.1.1, 192.168.1.2, 192.168.1.3");
IsHostAliveHace ping a un host N veces durante X milisegundosIsHostAlive("192.168.1.1", 5, 1000);
GetAveragePingResponseObtiene la respuesta de ping promedio para un hostGetAveragePingResponse("192.168.1.1", 5, 1000);
IsPortOpenHace ping a puertos individuales a través de TCP y UDPIsPortOpen("192.168.1.1", 45000, new TimeSpan(1000), false);

Ejemplos

Escaneo de IP

Escanear una red es una tarea común en esta era digital, por lo que me he tomado la libertad de hacerlo lo más simple posible para cualquier programador futuro que desee hacer algo así de manera sencilla. La biblioteca Forerunner es completamente orientada a objetos, lo que la hace ideal para situaciones de plug and play; el objeto para el escaneo de IP se llama IPScanObject y en realidad contiene bastantes propiedades:

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

Teniendo el objeto en mente, intentemos crear un nuevo objeto y realizar un escaneo utilizándolo. Hay varias formas de hacerlo, sin embargo, la forma más simple de empezar es primero crear un nuevo objeto Scanner para poder acceder a nuestros métodos de escaneo. A continuación, crea un IPScanObject y luego asígnelo al método Scan con la IP que desees enumerar; por ejemplo:

Síncrono
root@kitploit:~
using System;
using Forerunner; // Recuerda importar nuestra biblioteca.

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            // Nuestra IP que queremos escanear.
            string ip = "192.168.1.1";

            // Crear un nuevo objeto scanner.
            Scanner s = new Scanner();

            // Crear un nuevo objeto de escaneo y realizar un escaneo.
            IPScanObject result = s.Scan(ip);

            // Mostrar que hemos terminado el escaneo.
            if (result.Errors != null)
                Console.WriteLine("[x] Ocurrió un error durante el escaneo.");
            else
                Console.WriteLine("[+] " + ip + " ha sido escaneado exitosamente!")

            // Permitir al usuario salir en cualquier momento.
            Console.Read();
        }
    }
}

Otra forma, que es mi método preferido de operación, es crear un objeto Scanner y suscribirse a los Manejadores de Eventos de cosas como ScanAsyncProgressChanged o ScanAsyncComplete, de esa manera tengo control total sobre mis métodos asíncronos; puedo controlar cómo sus estados de progreso afectan mi aplicación y así sucesivamente; por ejemplo:

Asíncrono
root@kitploit:~
using System;
using System.Threading.Tasks;
using Forerunner; // Recuerda importar nuestra biblioteca.

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            // Nuestra IP que queremos escanear.
            string ip = "192.168.1.1";

            // Configurar nuestro objeto scanner.
            Scanner s = new Scanner();
            s.ScanAsyncProgressChanged += new ScanAsyncProgressChangedHandler(ScanAsyncProgressChanged);
            s.ScanAsyncComplete += new ScanAsyncCompleteHandler(ScanAsyncComplete);

            // Iniciar una nueva tarea de escaneo con nuestra ip.
            TaskFactory task = new TaskFactory();
            task.StartNew(() => s.ScanAsync(ip));

            // Permitir al usuario salir en cualquier momento.
            Console.Read();
        }

        static void ScanAsyncProgressChanged(object sender, ScanAsyncProgressChangedEventArgs e)
        {
            // Hacer algo aquí con e.Progress, o podrías dejar este evento
            // sin suscribir para no tener que hacer nada.
        }

        static void ScanAsyncComplete(object sender, ScanAsyncCompleteEventArgs e)
        {
           // Hacer algo con el IPScanObject, es decir, e.Result.
            if (e.Result.Errors != null)
                Console.WriteLine("[x] Ocurrió un error durante el escaneo.");
            else
                Console.WriteLine("[+] " + e.Result.IP + " ha sido escaneado exitosamente!")
        }
    }
}

Golpeo de Puertos

Ya sé lo que estás pensando. ¿Golpeo de puertos? Sí y no. El término no significa golpeo de puertos en el sentido tradicional de conectarse a través de un conjunto predefinido de puertos, sino más bien solo verificar si algún puerto está realmente abierto. Literalmente es "golpear" un puerto en todos los sentidos de la palabra al intentar conectarse a cada puerto y enviar datos. Al igual que con el escaneo de IP, el golpeo de puertos utiliza un objeto personalizado llamado "Port Knock Scan Object" o PKScanObject para abreviar. El PKScanObject en realidad contiene una lista de PKServiceObjects que a su vez contienen los datos de nuestros puertos; el objeto de servicio contiene las siguientes propiedades:

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

El golpeo de puertos es similar al escaneo de IP. Primero, crea un objeto Scanner. A continuación, crea un nuevo PKScanObject y asígnelo al método PortKnock con la IP de tu elección, luego muestra tus resultados; por ejemplo:

Síncrono
root@kitploit:~
using System;
using Forerunner; // Recuerda importar nuestra biblioteca.

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            // Nuestra IP que queremos escanear.
            string ip = "192.168.1.1";

            // Crear un nuevo objeto scanner.
            Scanner s = new Scanner();

            // Crear un nuevo objeto de escaneo y realizar un escaneo.
            PKScanObject result = s.PortKnock(ip);

            // Mostrar que hemos terminado el escaneo.
            if (result.Errors != null)
                Console.WriteLine("[x] Ocurrió un error durante el escaneo.");
            else
                Console.WriteLine("[+] " + ip + " ha sido escaneado exitosamente!")

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

           // Permitir al usuario salir en cualquier momento.
           Console.Read();
        }
    }
}

Por último, te mostraré un ejemplo simple de golpeo de puertos de forma asíncrona. Es esencialmente lo mismo que el golpeo de puertos síncrono excepto por el hecho de que puedes usar eventos a tu favor. Puedes obtener actualizaciones de progreso sin tener que preocuparte por que las interfaces de usuario se bloqueen o que los sistemas estén en un estado bloqueado; por ejemplo:

Asíncrono
root@kitploit:~
using System;
using System.Threading.Tasks;
using Forerunner; // Recuerda importar nuestra biblioteca.

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            // Nuestra IP que queremos escanear.
            string ip = "192.168.1.1";

            // Configurar nuestro objeto scanner.
            Scanner s = new Scanner();
            s.PortKnockAsyncProgressChanged += new PortKnockAsyncProgressChangedHandler(PortKnockAsyncProgressChanged);
            s.PortKnockAsyncComplete += new PortKnockAsyncCompleteHandler(PortKnockAsyncComplete);

            // Iniciar una nueva tarea de escaneo con nuestra ip.
            TaskFactory task = new TaskFactory();
            task.StartNew(() => s.PortKnockAsync(ip));

            // Permitir al usuario salir en cualquier momento.
            Console.Read();
        }

        static void PortKnockAsyncProgressChanged(object sender, PortKnockAsyncProgressChangedEventArgs e)
        {
            // Mostrar nuestro progreso para saber el 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)
        {
            // Decir al usuario que el golpeo de puertos ha terminado.
            Console.WriteLine("[+] Golpeo de Puertos Completo!");

            // Verificar si se resolvió un error.
            if (e.Result == null)
                Console.WriteLine("[X] El golpeo de puertos no devolvió ningún dato!");
            else
            {
                // Verificar si tenemos algún puerto registrado.
                if (e.Result.Services.Count == 0)
                    Console.WriteLine("[!] No había puertos abiertos durante el golpeo.");
                else
                {
                    // Mostrar nuestros puertos y sus detalles.
                    foreach (PKServiceObject port in e.Result.Services)
                    {
                        Console.WriteLine("[+] IP: " + port.IP + " | " +
                                          "Port: " + port.Port.ToString() + " | " +
                                          "Protocol: " + port.Protocol.ToString() + " | " +
                                          "Status: " + port.Status.ToString());
                    }
                }
            }
        }
    }
}

Créditos

Icono: monkik
https://www.flaticon.com/authors/monkik

Licencia

Copyright © ∞ Jason Drawdy

Todos los derechos reservados.

La Licencia MIT (MIT)

Por la presente se otorga permiso, sin costo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para tratar el Software sin restricción, incluyendo sin limitación los derechos para usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y/o vender copias del Software, y para permitir a las personas a quienes se les proporcione el Software hacerlo, sujeto a las siguientes condiciones:

El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.

EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES POR CUALQUIER RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIACIONES EN EL SOFTWARE.

Excepto según lo contenido en este aviso, el nombre del titular del copyright anterior no se utilizará en publicidad ni para promocionar la venta, uso u otras transacciones en este Software sin autorización previa por escrito.

Descargar herramienta
Forerunner — Biblioteca de escaneo de redes rápida y extensible que cuenta con múltiples hilos, sondeo ping y extractores de escaneo. | Kitploit