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 zeilememcpy(&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