dns aufloesung // memcpy frage



  • so hier mein code :
    ist ein portscanner ( von einer tutorial seite übernommen und modifiziert )

    #include <winsock2.h> 
    #include <memory.h>
    #include <stdio.h>    
    
    char ip[15];
    char dnsip[15];
    int s;
    struct sockaddr_in server;
    struct in_addr in;
    
    //* Die Socket werden initilasiert *//
    
    void WSAInit(void) {  
        WORD wVersionReg = MAKEWORD(1, 1);  
        WSADATA wsaData;  
        if (WSAStartup(wVersionReg, &wsaData) != 0) {  
        puts("Fehler: Initialisieren - WinSock.dll!");  
       }  
     }  
    //* Socket sind initialisiert *//   
    
    int main(void) {  
        SOCKET sock = INVALID_SOCKET;  
        int pstart = 0, pend = 0, i, contr; 
    
        printf("\n\tEnter the IP:" );  // Abfrage der IP
        gets(ip); 
    
    //* Check ob IP aufgelöst werden muss *// 
        if (inet_addr(ip) == INADDR_NONE) {      
                struct hostent* dnsip = gethostbyname(ip) ;
                printf("\n\tAdresse wird aufgeloest ");
                memcpy(&ip.sin_addr, dnsip->h_addr_list[0], sizeof(dnsip));  
                printf("\n\tDie zu scannende IP (dotted): %c", dnsip); // Ausgabe der IP in "dotted" Schreibweise
        }
     //** Check zuende ;] *// 
    
    /*  server.sin_addr.s_addr = inet_addr(ip);  */
        server.sin_family = AF_INET;  
        WSAInit();   
    
        printf("\n\tEnter Port to start with: ");  // Abfrage des StartPorts
        scanf("%d", &pstart);  
    
        printf("\n\tEnter Port to stop: ");  // Abfrage des EndPorts
        scanf("%d", &pend);  
    
        for (i = pstart; i < (pend+1); i++) {  
            server.sin_port = htons(i);  
    
            if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {   
                puts("Fehler beim Erstellen des Socket!\n");    
            }   
    
        contr = connect(sock, (struct sockaddr *) &server ,sizeof(server));  
    
        if (contr < 0) printf("\n\tPort %d closed", i);  // Ausgabe Falls Port geschlossen ist
        else printf("\n\t### Port %d is open ###\n", i);  // Ausgabe falls Port offen ist
    
        closesocket(sock);  
       }  
       WSACleanup();  
       return 0;  
     }
    

    das eigentliche problem liegt hier :

    //* Check ob IP aufgelöst werden muss *// 
        if (inet_addr(ip) == INADDR_NONE) {      
                struct hostent* dnsip = gethostbyname(ip) ;
                printf("\n\tAdresse wird aufgeloest ");
                memcpy(&ip.sin_addr, dnsip->h_addr_list[0], sizeof(dnsip));  
                printf("\n\tDie zu scannende IP (dotted): %c", dnsip); // Ausgabe der IP in "dotted" Schreibweise
        }
     //** Check zuende ;] *//
    

    sollte doch eigentlich so klappen oder?
    die zeile

    memcpy(&ip.sin_addr, dnsip->h_addr_list[0], sizeof(dnsip));
    

    ist aber falsch

    F:\c++ projekte\PortScanner\pswin.c(33) : error C2224: Der linke Teil von '.sin_addr' muss eine Struktur/Union sein

    hm ? .. hier komme ich nicht weiter

    F:\c++ projekte\PortScanner\pswin.c(33) : error C2198: 'memcpy' : Nicht genuegend Parameter uebergeben
    hier die fehler, was ist falsch?

    erfolgt wohl aus dem obrigem fehler

    weiss jemand irgendwie rat?



  • Hi,
    naja irgendwie ist ip als char[15] deklariert, wo soll da hingezeigt werden mit dem ".sin_addr". da kannst du nur nach ip kopieren.
    CU


Anmelden zum Antworten