Cómo escribir un escáner de puertos simple en C (pasos detallados)
#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], "-")) p>
{ startport=atoi(argv[2]);
for(;*p;)
if(*(p)=='-')break ; p>
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();
}