Einfacher C# Port Scanner

Am letzten Feiertag bot es sich ein MiniProjekt zu testen.

Wie im Titel bereits steht habe ich meine Freizeit dafür genutzt einen ganz simplen PortScanner zu schreiben.

Was macht dieser Port Scanner.

Genau, er sucht nach offenen Ports. Dazu baue ich einfach eine Verbindung zu der IP Adresse und dem entsprechenden Port auf. Nun bekomme ich entweder eine Fehlermeldung, dass keine Verbindung aufgebaut werden kann oder es wird gewartet das weitere Aktionen ausgeführt werden. Die Verbindung steht also und ein offener Port ist gefunden.

Was braucht meine Oberfläche?

Als erstes habe ich im SharpDevelop eine neue Solution, im Microsoft Visual Studio wäre dies ein neues Projekt, angelegt. Da ich keine Konsolenanwendung erstellen wollte habe ich also eine Windows Application erstellt.

Anschließend habe ich dort 3 Textfelder und einen Button erzeugt und diese mit einem jeweiligen Label beschrieben. Ein Textfeld für die Ziel Adresse und jeweils ein Textfeld für den Start- und EndPort.
Zudem habe ich noch eine Textbox für die gefundenen Porst erstellt.

Durch einfaches Doppelklick auf den erstellten Button gelangt man in dessen generierten EventHandler. Sprich die Methode der Applikation die aufgerufen wird wenn ich darauf klicke.

Meine Methode BtnAttackClick, der EventHandler des Buttons besteht aus folgenden Zeilen:

int iStartPort = Convert.ToInt32(startport.Text); // der Startport des Scans aus dem Textfeld lesen und in eine Zahl packen.
int iEndPort = Convert.ToInt32(endport.Text); // der EndPort des Scans aus dem Textfeld lesen und in eine Zahl packen.runScan(iStartPort,iEndPort);

Nun weiß unser Programm es soll die methode runScan() mit den beiden Parametern iStartPort und iEndPort aufrufen.

Die methode RunScan durchläuft einfach die PortRange und übergibt diese an die Scan Methode:

void runScan(int iStartPort,int iEndPort)
{
for(int i = iStartPort; i <= iEndPort; i++)
{
Scann(target.Text,i);
}
portlist.AppendText(  "done\n" );
}

Jetzt kommt das eigentliche Testen des Ports.

void Scann(string ipaddress, int port)
{
IPAddress ipo = IPAddress.Parse(ipaddress);
IPEndPoint ipEo = new IPEndPoint(ipo, port);
try{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  // Verbindung vorbereiten
sock.Connect(ipEo);  // Verbindung aufbauen
portlist.AppendText(ipaddress + ":" + port + " open\n");  // Positiv Text ausgeben
sock.Close();  //Verbindung schließen wird nicht mehr gebraucht
}
catch(Exception)
{
//Kein offener Port da oben ein Fehler aufgetreten, diese wird einfach ignoriert da es keine Ausnahme für geschlossene Ports gibt und nur die offenen interessant sind.
}
}

Das war es auch schon. Der Port Scanner ist fertig.
Bei jedem offenen Port wird uns nun eine Zeile in die Textbox geschrieben.

Um das ganze noch zu verfeinern kann noch mit Threads gearbeitet werden in denen die Port Suche läuft. Zudem ist es noch möglich die Port Range zu splitten und auf verschiedene Threads zu verteilen um die Geschwindigkeit zu erhöhen.

WICHTIG:

Dieser Artikel soll nur erklären wie die  Technik hinter einer Prüfroutine für das ermitteln von offenen Ports aussieht. Der Einsatz solcher Tools ist nur auf Geräte anzuwenden die einem gehören oder es eine Schriftliche Erlaubnis hierfür gibt. Alles andere könnte Strafbar sein.

ie Legalität von Portscans ist umstritten, da sie als erste Instanz eines Eindringversuches gewertet werden können. In jedem Fall ist eine Benutzung auf eigenen Systemen legal. Unklarer ist die Rechtslage bei Portscans gegen fremde Systeme und Netzwerke. Da beispielsweise empfindliche Computer durch viele Verbindungsanfragen gestört werden können, kann dies als Angriff auf die Verfügbarkeit eines Systems gewertet und in Deutschland durch § 303b StGB (Computersabotage) bestraft werden. Das SANS-Institut bestätigt in einer Veröffentlichung ebenfalls den Zwiespalt von Portscans[1].

Portscanner werden jedoch aktuell nicht als Computerprogramm zum Ausspähen von Daten nach § 202c StGB (Hackerparagraf) angesehen, da sie keine Sicherheitsmechanismen umgehen oder Daten abfangen.

QUELLE: http://de.wikipedia.org/wiki/Portscanner