[C/C#/C++] Portscanner

Dieses Thema im Forum "Projekte / Codes" wurde erstellt von Fallen Angel, 5. November 2006 .

Schlagworte:
  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.
     
  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
     
  3. 5. November 2006
    AW: Portscanner

    Oh. ganz vergessen, danke hab es eben geaendert :]
     
  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.
     
  5. 5. November 2006
    AW: Portscanner

    Libs muessen mit eingebunden werden !

    jo, habs verbessert, war ja gestern schon so spaet ^^
     
  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 ?
     
  7. 5. November 2006
    AW: Portscanner

    Ups, meine ich haette das gestern geaendert :|
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.