Wie schreibe ich einen Portscanner in C ? | ==========================================+ 1. Einleitung 2. Prinzip 3. Quellcode 4. Greets 5. Copyright 1. Einleitung | --------------+ Dieser Text handelt von der Erstellung eines sehr einfachen, dafür aber auch verdammt schnellen Portscanners auf Textbasis. Er soll verdeutlichen wie man einen Portscanner programmiert. Natürlich kann sich unser Beispiel nicht nmap oder SuperScan in punkto Ausstattung messen, aber für den Anfang ist er ganz gut :). Da dies mein erstes Tutorial ist bitte ich euch mich nicht gleich wegen jedem Rechtschreibfehler zu lynchen. Wenn ihr einen Fehler im Inhalt findet möchte ich euch bitte mir eine Email schreiben : fabian.becker2@epost.de. Disclaimer: Dieser Text ist keine Aufforderung illegale Handlungen anzustreben sonder dient ausschließlich der Weiterbildung und dem Studium. So, nun wünsche ich euch viel Spaß beim lesen des Tutorials. 2. Prinzip des Portscanners | ----------------------------+ Das Prinzip unseres Portscanner liegt darin das wir uns versuchen nacheinander mit allen TCP-Ports des Zielrechners zu verbinden. Klappt dies, ist der Port offen, d.h. ein Service wartet auf diesem Port auf eine Verbindung. 3. Quellcode | -------------+ Hier ist der Quellcode mit den benötigten Erklärungen. /* Name : littleScanner * Version : 1.0 * Autor : neonomicus * Usage : littlescanner -IP -startport -endport */ /* Wir binden die benötigten Headerfiles ein */ #include #include #include #include #include int scann_normal(int idle, char *ip, int port); int main(int argc, char *argv[]) { char *ip; unsigned int startport = 0; unsigned int endport = 0; int idle = 0; int i = 0; char *tmp; int tmp2 = 0; // Gucken ob genug Parameter angegeben sind if (argc < 3) { printf ("Error : Incorrect usage.\n"); printf ("Usage : littlescanner -IP -startport -endport.\n"); return 0; } // Überprüfen ob die als IP angegeben Zahl eine IP sein KANN if (strlen(argv[1]) > 15) { printf ("Error : The IP-Parameter is not a valid IP-adress\n"); return 0; } else { strcpy(ip,argv[1]); }; // Überprüfen ob der Startport OK ist tmp = argv[2]; tmp2 = atol (tmp); if (tmp2 < 65535 && tmp2 > 0) { startport = tmp2; } else { printf ("Startport is not a valid Number.\n"); return 0; } // Überprüfen ob der Endport OK ist tmp = argv[3]; tmp2 = atol (tmp); if (tmp2 < 65535 && tmp2 > 0 && tmp2 > startport) { endport = tmp2; } else { printf ("Endport is not a valid Number. \n"); return 0; } } // Jetzt kommen wir zum Interessanten Teil :) int scann_normal(char *ip, int port) { // Die benötigten Variablen werden deklariert int sockfd; struct sockaddr_in servaddr; // Das Struct servaddr wird mit den korrekten Werten gefüllt (es gibt viel mehr möglichkeiten, aber das würde den Rahmen dieses Dokument sprengen) servaddr.sin_family = AF_INET; servaddr.sin_port = htons(port); servaddr.sin_addr.s_addr = inet_addr(ip); // Wir fordern einen Socket vom Betriebssystem an sockfd = socket(AF_INET, SOCK_STREAM, 0); // Wir connecten uns auf dem Port, wenn klappt ist der Port offen und wir lassen eine BEstätigung ausgeben if (connect(sockfd,(struct sockaddr *) &servaddr, sizeof(servaddr)) != -1) printf ("Port %i is open\n",port); // Wir geben den Socket wieder frei (GANZ WICHTIG da das Betriebssytem in der Regel nicht unendlich viele Sockets zu vergeben hat) close (sockfd); } Jau, das wars auch schon, wenn ihr diesen Code durch gcc jagt erhaltet ihr einen kleinen aber feinen Portscanner. 4. Greets | ----------+ grüße gehen raus an : Marc Ruef sineP Zoolander Flo 5. Copyright | -------------+ Dieses Dokument darf unverfälscht und unter meinem Namen als Autor frei weitergegeben und veröffentlicht werden. Für weitere Fragen bitte eine Email an fabian.becker2@epost.de