
Schnelle und erweiterbare Netzwerkscan-Bibliothek mit Multithreading, Ping-Probing und Scan-Fetcher.
Die Forerunner-Bibliothek ist eine schnelle, leichte und erweiterbare Netzwerkbibliothek, die zur Entwicklung robuster netzwerkzentrierter Anwendungen wie IP-Scanner, Port-Knocker, Clients, Server usw. entwickelt wurde. In ihrem aktuellen Zustand kann die Forerunner-Bibliothek sowohl synchron als auch asynchron IP-Adressen scannen und Port-Knocking durchführen, um Informationen über das Gerät an diesem Endpunkt zu erhalten, z. B. ob die IP online ist, die physische MAC-Adresse usw. Die Bibliothek ist vollständig objektorientiert und ereignisbasiert aufgebaut, was bedeutet, dass Scandaten in speziell entwickelten "Scan"-Objekten enthalten sind, die alle Daten von Ergebnissen bis hin zu Ausnahmen verarbeiten sollen.
| Methode | Beschreibung | Verwendung |
|---|---|---|
| Scan | Scannt eine einzelne IP nach Informationen | Scan("192.168.1.1"); |
| ScanRange | Scannt einen IP-Bereich nach Informationen | ScanRange("192.168.1.1", "192.168.1.255") |
| ScanList | Scannt eine Liste von IPs nach Informationen | ScanList("192.168.1.1, 192.168.1.2, 192.168.1.3") |
| PortKnock | Pingt jeden Port einer einzelnen IP | PortKnock("192.168.1.1"); |
| PortKnockRange | Pingt jeden Port in einem IP-Bereich | PortKnockRange("192.168.1.1", "192.168.1.255"); |
| PortKnockList | Pingt jeden Port unter Verwendung einer Liste von IPs | PortKnockList("192.198.1.1, 192.168.1.2, 192.168.1.3"); |
| IsHostAlive | Pingt einen Host N-mal für X Millisekunden | IsHostAlive("192.168.1.1", 5, 1000); |
| GetAveragePingResponse | Ermittelt die durchschnittliche Ping-Antwortzeit für einen Host | GetAveragePingResponse("192.168.1.1", 5, 1000); |
| IsPortOpen | Pingt einzelne Ports über TCP und UDP | IsPortOpen("192.168.1.1", 45000, new TimeSpan(1000), false); |
Das Scannen eines Netzwerks ist eine alltägliche Aufgabe in diesem digitalen Zeitalter, und ich habe mir die Freiheit genommen, dies für jeden zukünftigen Programmierer, der so etwas auf einfache Weise tun möchte, so einfach wie möglich zu gestalten. Die Forerunner-Bibliothek ist vollständig objektorientiert und daher ideal für Plug-and-Play-Situationen; das Objekt für das IP-Scanning heißt IPScanObject und enthält tatsächlich einige Eigenschaften:
Mit diesem Objekt im Hinterkopf wollen wir nun ein neues Objekt erstellen und damit einen Scan durchführen. Es gibt mehrere Möglichkeiten, dies anzugehen, aber der einfachste Weg, um loszulegen, besteht darin, zuerst ein neues Scanner-Objekt zu erstellen, um auf unsere Scan-Methoden zugreifen zu können. Erstellen Sie als Nächstes ein IPScanObject und setzen Sie es auf die Scan-Methode mit der IP, die Sie auflisten möchten; zum Beispiel:
using System;
using Forerunner; // Denken Sie daran, unsere Bibliothek zu importieren.
namespace Example
{
class Program
{
static void Main(string[] args)
{
// Unsere IP, die wir scannen möchten.
string ip = "192.168.1.1";
// Ein neues Scanner-Objekt erstellen.
Scanner s = new Scanner();
// Ein neues Scan-Objekt erstellen und einen Scan durchführen.
IPScanObject result = s.Scan(ip);
// Ausgabe, dass der Scan abgeschlossen ist.
if (result.Errors != null)
Console.WriteLine("[x] Während des Scans ist ein Fehler aufgetreten.");
else
Console.WriteLine("[+] " + ip + " wurde erfolgreich gescannt!")
// Dem Benutzer erlauben, jederzeit zu beenden.
Console.Read();
}
}
}
Eine andere Möglichkeit, die meine bevorzugte Vorgehensweise ist, besteht darin, ein Scanner-Objekt zu erstellen und die Event Handler von Dingen wie ScanAsyncProgressChanged oder ScanAsyncComplete zu abonnieren, sodass ich die volle Kontrolle über meine asynchronen Methoden habe; ich kann steuern, wie sich ihre Fortschrittszustände auf meine Anwendung auswirken usw.; zum Beispiel:
using System;
using System.Threading.Tasks;
using Forerunner; // Denken Sie daran, unsere Bibliothek zu importieren.
namespace Example
{
class Program
{
static void Main(string[] args)
{
// Unsere IP, die wir scannen möchten.
string ip = "192.168.1.1";
// Unser Scanner-Objekt einrichten.
Scanner s = new Scanner();
s.ScanAsyncProgressChanged += new ScanAsyncProgressChangedHandler(ScanAsyncProgressChanged);
s.ScanAsyncComplete += new ScanAsyncCompleteHandler(ScanAsyncComplete);
// Eine neue Scan-Aufgabe mit unserer IP starten.
TaskFactory task = new TaskFactory();
task.StartNew(() => s.ScanAsync(ip));
// Dem Benutzer erlauben, jederzeit zu beenden.
Console.Read();
}
static void ScanAsyncProgressChanged(object sender, ScanAsyncProgressChangedEventArgs e)
{
// Hier etwas mit e.Progress tun, oder Sie könnten dieses Ereignis
// abbestellen, sodass Sie nichts tun müssten.
}
static void ScanAsyncComplete(object sender, ScanAsyncCompleteEventArgs e)
{
// Etwas mit dem IPScanObject, auch bekannt als e.Result, tun.
if (e.Result.Errors != null)
Console.WriteLine("[x] Während des Scans ist ein Fehler aufgetreten.");
else
Console.WriteLine("[+] " + e.Result.IP + " wurde erfolgreich gescannt!")
}
}
}
Ich weiß, was Sie denken. Port-Knocking? Ja und nein. Der Begriff bedeutet nicht Port-Knocking im herkömmlichen Sinne des Verbindens über eine vordefinierte Reihe von Ports, sondern vielmehr nur das Überprüfen, ob überhaupt Ports geöffnet sind. Es ist buchstäblich ein "Anklopfen" an einem Port in jeder Hinsicht, indem versucht wird, eine Verbindung zu jedem Port herzustellen und Daten zu senden. Genau wie beim IP-Scanning verwendet das Port-Knocking ein benutzerdefiniertes Objekt, das "Port Knock Scan Object" oder kurz PKScanObject genannt wird. Das PKScanObject enthält tatsächlich eine Liste von PKServiceObjects, die wiederum unsere Portdaten enthalten; das Serviceobjekt enthält die folgenden Eigenschaften:
Das Port-Knocking erfolgt auf ähnliche Weise wie das IP-Scanning. Erstellen Sie zuerst ein Scanner-Objekt. Erstellen Sie als Nächstes ein neues PKScanObject und setzen Sie es auf die PortKnock-Methode mit der IP Ihrer Wahl, und zeigen Sie dann Ihre Ergebnisse an; zum Beispiel:
using System;
using Forerunner; // Denken Sie daran, unsere Bibliothek zu importieren.