Red de conocimiento informático - Material del sitio web - Cómo escribir un escáner de puertos simple en C (pasos detallados)

Cómo escribir un escáner de puertos simple en C (pasos detallados)

#includelt;winsock2.hgt;

#includelt;stdio.hgt;

#includelt;time.hgt; //Archivos de encabezado necesarios para la sincronización

# pragma comment(lib, "ws2 _32.lib")

#include lt; time.hgt; // Archivos de encabezado necesarios para cronometrar

clock_t start, end // Inicio del programa y hora de finalización

float costtime; //Tiempo transcurrido del programa

void use(void)

{

printf( "\tusage : tcpscan RemoteIP StartPort-EndPort\n");

printf("\tEjemplo: tcpscan 192.168.1.1 80-100\n ");

}

int main(int argc, char **argv)

{

char *host;

int startport, endport;

char *p;

if(argc!=3)

{

uso();

devuelve 0; >

}

p=argv[2]; // maneja el argumento del puerto

if(strstr(argv[2], "-"))

{ startport=atoi(argv[2]);

for(;*p;)

if(*(p)=='-')break ;

endport=atoi(p);

if(startportlt;1 || endportgt;65535)

{ printf("¡Error de puerto!\n" ); /p>

devolver 0;

}

}

host=argv[1]; /p>

SOCKET s;

estructura sockaddr_in addr;

resultado int

resultado largo

lresult=WSAStartup; (MAKEWORD(1,1), amp;ws);

addr.sin_family =AF_INET;

addr.s_addr =inet_addr(host);

inicio =clock(); //inicia el reloj

for (int i=startport; ilt; endport; i)

{

s=socket (AF_INET, SOCK_STREAM, 0);

addr.sin_port = htons(i);

if(s==INVALID_SOCKET)break;

resultado=conectar (s, (estructura sockaddr*)amp

;dirección, tamaño de(dirección));

if(resultado==0)

{

printf("s d\n", host, i) ;

closesocket(s);

}

}

}

end=clock();

end=clock().

costtime= (float)(end - start) / CLOCKS_PER_SEC; //convertir formato de hora

printf("Costo tiempo :f segundo", costtime); //mostrar el tiempo transcurrido

WSACleanup();

}