Portscan optimieren
-
hi, ich hab einen Portscanner geschrieben, der auch fehlerfrei funktioniert, allerdings dauert es ziemlich lange bis er versucht hat zu einem server zu connecten.
Ich hab mir folgende funktionen für den scan geschrieben geschriebenwird:int ScanPort(char *host, int port) { long rc; SOCKET s; SOCKADDR_IN addr; s = socket(AF_INET, SOCK_STREAM, 0); if (s==INVALID_SOCKET) { closesocket(s); return PS_INVALIDSOCKET; } /* ** setzt den Speicher von &addr bis sizeof(SOCKADDR_IN) weiter auf 0. ** Einfacher: die Struktur addr wird komplett geleert *g* */ memset(&addr, 0, sizeof(SOCKADDR_IN)); addr.sin_family = AF_INET; addr.sin_port = htons(port); getAddrFromString(host, &addr); rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR)); if (rc == SOCKET_ERROR) { closesocket(s); return PS_CANTCONNECT; } closesocket(s); return PS_CONNECTED; } //---------------------------------------------------------- int getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr) { long rc; unsigned long ip; HOSTENT* he; startWinSock(); /* Parameter prüfen */ if(hostnameOrIp==NULL || addr==NULL) return SOCKET_ERROR; /* eine IP in hostnameOrIp ? */ ip=inet_addr(hostnameOrIp); /* bei einem fehler liefert inet_addr den Rückgabewert INADDR_NONE */ if(ip!=INADDR_NONE) { addr->sin_addr.s_addr=ip; return 0; } else { /* Hostname in hostnameOrIp auflösen */ he=gethostbyname(hostnameOrIp); if(he==NULL) { return SOCKET_ERROR; } else { /*die 4 Bytes der IP von he nach addr kopieren */ memcpy(&(addr->sin_addr),he->h_addr_list[0],4); } return 0; } } //---------------------------------------------------------- int startWinSock () { WSADATA wsa; return WSAStartup(MAKEWORD(2, 0), &wsa); }
Es wird dann in einer schleife für jeden zu scannenden Port ScanPort aufgerufen.
Jetzt wüsste ich gerne wie ich des machen könnte, dass der viiiieeeel schneller läuft.schonmal danke im vorraus
-
hi,
mach doch mal das gethostbyname
aus der schleife raus (über die loop legen)ts