TODOPIC

Lenguajes de programación para PC => C, C#, C++ => Mensaje iniciado por: alexysar en 05 de Junio de 2009, 21:54:15

Título: Scanner de puertos
Publicado por: alexysar en 05 de Junio de 2009, 21:54:15
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:

Código: C
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<netinet/in.h>
  4. #include<arpa/inet.h>
  5. #include<sys/types.h>
  6. #include<sys/socket.h>
  7. #include<sys/signal.h>
  8.  
  9. #define MAXbUFFER  100
  10. #define PORTtCP 8145
  11.  
  12. int fdSocket, fdClie, nread,fdmax;
  13.  
  14. char buffer[MAXbUFFER];
  15.  
  16. struct sockaddr_in cliente;
  17. struct hosten *host;
  18. socklen_t tamSocket;
  19. void handler_sigchld (int);
  20.  
  21. int main(void){
  22. int i,j,puerto,addrlen,socktcp;
  23. struct timeval tv;
  24. fd_set serverset;
  25.  
  26. signal(SIGCHLD,handler_sigchld);
  27.  
  28. puerto=8000;
  29. addrlen=sizeof(struct sockaddr);
  30.  
  31. for(j=1;j<650;j++)
  32. {
  33.         printf("\nScanneados %d primeros rangos\n",puerto);
  34.         sleep(50);
  35.  
  36. for(i=0;i<100;++i)
  37.         {
  38.         puerto++;
  39.  
  40.  
  41.         if(!fork())
  42.                 {                       //en el hijo
  43.                 socktcp=socket(AF_INET,SOCK_STREAM,0);
  44.                 bzero(&cliente,addrlen);
  45.                 cliente.sin_family=AF_INET;
  46.  
  47. //              host=gethostbyname("silicon-valley.dyndns.org");
  48.                 cliente.sin_addr.s_addr=inet_addr("127.0.0.1");
  49.                 cliente.sin_port=htons(puerto);
  50.  
  51.  
  52.                 tv.tv_usec=0;
  53.                 tv.tv_sec=30;
  54.  
  55.                 FD_ZERO(&serverset);
  56.                 FD_SET(socktcp,&serverset);
  57.                 fdmax=socktcp;
  58.                
  59.                 select(fdmax+1,&serverset,NULL,NULL,&tv);
  60.  
  61.                 if(FD_ISSET(socktcp,&serverset))
  62.                         {
  63.                         if(connect(socktcp,(struct sockaddr *)&cliente,addrlen)!=-1)
  64.                                 printf("\nPuerto %d\n",puerto);
  65.                         };
  66.  
  67. //              cliente.sin_addr = *((struct in_addr *)host->h_addr);
  68. //              cliente.sin_addr.s_addr=*host.host->h_addr;
  69.                 exit(0);
  70.                 }
  71.  
  72. /*else{
  73.                
  74.                         }
  75. */
  76.        
  77.                 }
  78.  
  79.         }
  80.  
  81. }
  82.  
  83. void handler_sigchld (int type)
  84. {
  85.  
  86. int status_chld;
  87.  
  88. wait(&status_chld);
  89.  
  90.  
  91.  
  92. }

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.
Título: Re: Scanner de puertos
Publicado por: alexysar en 08 de Junio de 2009, 14:44:16
Nadie sabe nada?
Cualquier info es bienvenida