Estoy haciendo un scanner de puertos para detectar Vulnerabilidades en una red. Se que hay varios scanner de puertos como nmap o de la empresa radmin, pero la idea de programarlo es que aprovecho el código para insertar exploit's y probar la red a fondo.
Mi código para linux es el siguiente:
#include<stdio.h>
#include<string.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/signal.h>
#define MAXbUFFER 100
#define PORTtCP 8145
int fdSocket, fdClie, nread,fdmax;
char buffer[MAXbUFFER];
struct sockaddr_in cliente;
struct hosten *host;
socklen_t tamSocket;
void handler_sigchld (int);
int main(void){
int i,j,puerto,addrlen,socktcp;
struct timeval tv;
fd_set serverset;
signal(SIGCHLD,handler_sigchld);
puerto=8000;
addrlen=sizeof(struct sockaddr);
for(j=1;j<650;j++)
{
printf("\nScanneados %d primeros rangos\n",puerto
); sleep(50);
for(i=0;i<100;++i)
{
puerto++;
if(!fork())
{ //en el hijo
socktcp=socket(AF_INET,SOCK_STREAM,0);
bzero(&cliente,addrlen);
cliente.sin_family=AF_INET;
// host=gethostbyname("silicon-valley.dyndns.org");
cliente.sin_addr.s_addr=inet_addr("127.0.0.1");
cliente.sin_port=htons(puerto);
tv.tv_usec=0;
tv.tv_sec=30;
FD_ZERO(&serverset);
FD_SET(socktcp,&serverset);
fdmax=socktcp;
select(fdmax+1,&serverset,NULL,NULL,&tv);
if(FD_ISSET(socktcp,&serverset))
{
if(connect(socktcp,(struct sockaddr *)&cliente,addrlen)!=-1)
printf("\nPuerto %d\n",puerto
); };
// cliente.sin_addr = *((struct in_addr *)host->h_addr);
// cliente.sin_addr.s_addr=*host.host->h_addr;
}
/*else{
}
*/
}
}
}
void handler_sigchld (int type)
{
int status_chld;
wait(&status_chld);
}
El problema es que no recuerdo y no encuentro, como era que trabajaba un router ante un escaner de puertos. Me parece que ante un scanner de puertos sucesivos el router bloqueaba la entrada desde la ip de origen. ¿ Alguien sabe?
Otra idea era poner un par de señuelos de ip falsas para que el router se confunda.
Bueno cualquier aclaración de cómo reacciona un router ante un scanneo de puertos sucesivos se agradece.