#1 5. November 2006 Portscanner Code: /* Name: Portscanner * Author: Fallen Angel * Usage: portscanner(.exe) [MODE] [IP] [RANGE] - [END] * Description: Scans the Ports of the IPAddr. * OS: Windows, Unix/Linux */ #include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef _WIN32 #include <windows.h> #include <winsock.h> #include <winsock2.h> #define socket_t SOCKET #else #include <sys/types.h> #include <netinet/in.h> #include <netdb.h> #include <arpa/inet.h> #include <unistd.h> #define socket_t int #endif void cleanup(void); int scanp(long port, char *host); void printH(void); struct sockaddr_in server; struct hostent *host_info; int main(int argc, char *argv[]) { int i; struct servent *s; #ifdef _WIN32 WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD (1, 1); atexit(cleanup); #endif if(argc != 5) { printH(); exit(1); } #ifdef _WIN32 if (WSAStartup (wVersionRequested, &wsaData) != 0) { printf("Failed to initialize Winsock\n"); return 1; } #endif if(strcmp(argv[1],"-p") == 0 || strcmp(argv[1],"--port") == 0) { printf("Scanning Portrange: "); printf("(%s) %d - %d\n\n",argv[2], atoi(argv[3]), atol(argv[4])); for(i=atoi(argv[3]);i<atol(argv[4]);i++) { if(scanp(i,argv[2]) != -1) { s = getservbyport(htons(i),"tcp"); printf("Open Port: %d -> %s\n",i, (s == NULL) ? "Unknown" : s->s_name); continue; } } } else if(strcmp(argv[1],"-h") == 0 || strcmp(argv[1],"--help") == 0) { printH(); } else { printH(); } return 0; } void cleanup(void) { #ifdef _WIN32 WSACleanup(); #endif } int scanp(long port, char *host) { unsigned long addr; socket_t sock; memset( &server, 0, sizeof (server)); sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { return(-1); } if ((addr = inet_addr( host )) != INADDR_NONE) { memcpy( (char *)&server.sin_addr, &addr, sizeof(addr)); } else { host_info = gethostbyname( host ); if (NULL == host_info) { return(-1); } memcpy( (char *)&server.sin_addr, host_info->h_addr, host_info->h_length); } server.sin_family = PF_INET; server.sin_port = htons( port ); if (connect(sock, (struct sockaddr*)&server, sizeof( server)) < 0) { return(-1); } #ifdef _unix close(sock); #endif return 0; } void printH(void) { printf("Mode:\n\t-h --help\tprints help\n\t-p --port" \ "\tscans the port-range of the given ipaddr\n"); printf("Example:\n\tPortscanner.exe -p 127.0.0.1 55 500\n"); } Unter Windows muesst die libs libws2_32.a und libwsock32.a mit einbinden. Beispiel: In Dev-Cpp(erst neues Projekt anlegen und den code in main.c hauen): Projekt->Projekt Optionen->Parameter->Bibliothek/Objekt hinzuf. und die Libs aus (Pfad, jenachdem wo ihr DevCpp installiert habt, anpassen) C:\Dev-Cpp\lib\ Wie in der Beschreibung steht: Crossplattform Windows x86 Binary: (Von mir entfernt) (369 KB) EDIT: Fuer diejenigen die die Datei ausgefuehrt haben: Scannen ! An die anderen: Ich hatte Viren auf meinem PC, leider musste ich feststellen das AntiVir ein beschissenes Viren Programm ist und habe die Viren groestenteils bekaempft. Mit freundlichen Gruessen, Fallen Angel. + Multi-Zitat Zitieren
#2 5. November 2006 AW: Portscanner Kuhles ding ^^ funktioniert bei mir im prinzip 1A (win xp) allerdings musste ich erst das "close (sock);" in Zeile 120 auskommentieren damit es Dev-Cpp überhaupt schluckt. Ansonsten kam immer "120 D:\Dev-Cpp\Eigenes\portsscanner by fallen angel\main.cpp `close' undeclared (first use this function) ". Scheint daran zu liegen, dass für nicht windows "socket_t" als int definiert wird und close nur mit nem int als argument zu funktionieren scheint ^^. SOCKET scheint ja ne ganze structur oder so zu sein kA kenn mich mit den WinSocks nicht aus... Achja die Hilfe hätte etwas erweitert werden können um ein Beispiel zum Portscann. Ich hab nen paar versuche gebraucht, bis ich geschnallt hatte das man zwischen den Anfangs- und den Endport kein - machen darf ^^. Ansonsten wie schon oben gesagt sehr geil ^^. mfg thecoolman4rr + Multi-Zitat Zitieren
#3 5. November 2006 AW: Portscanner Oh. ganz vergessen, danke hab es eben geaendert :] + Multi-Zitat Zitieren
#4 5. November 2006 AW: Portscanner undefined reference to `WSACleanup' Code: void cleanup(void) { #ifdef _WIN32 WSACleanup(); #endif } hilfe kann wegen Code: if(argc < 5 || argc > 5) nicht angezeigt werden. + Multi-Zitat Zitieren
#5 5. November 2006 AW: Portscanner Libs muessen mit eingebunden werden ! jo, habs verbessert, war ja gestern schon so spaet ^^ + Multi-Zitat Zitieren
#6 5. November 2006 AW: Portscanner Dann zeig mir mal winsocks unter Linux Vergleich mal die von mir gepostete cleanup-Funktion mit deiner .. fällt was auf ? + Multi-Zitat Zitieren
#7 5. November 2006 AW: Portscanner Ups, meine ich haette das gestern geaendert :| + Multi-Zitat Zitieren