Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: <<<-Basura->>> en 3 Agosto 2011, 05:45 am



Título: socket ??
Publicado por: <<<-Basura->>> en 3 Agosto 2011, 05:45 am
Estaba haciendo un Escáner de puertos en C/C++, ya lo termine y sirve perfectamente, pero solo me escanea los puertos TCP, pero cuando quiero que me encane los puertos UDP, que es por datagramas yo pienso que solo tengo que cambiar de SOCK_STREAM a SOCK_DGRAM y listo ya es UDP, algunas funciones cambian lo se.
bueno hize el código y listo compilo y termine....

A la hora de probarlo O_O todos los puertos abiertos y creo que es un error jeje XD, porque con el TCP solo tenia como 4 abiertos, así que quiero que analicen el código y digamen si hay algun error en el..

Código:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. #include <netinet/in.h>
  5. #include <arpa/inet.h>
  6. #include <sys/socket.h>
  7. #include <sys/types.h>
  8.  
  9. #define FAMILIA AF_INET
  10. #define PUERTO_INICIO 0
  11. #define PUERTO_FIN 65535
  12.  
  13. int main(int argv,char *argc[]){
  14. if(argc[1] == NULL){
  15. printf("( Dirección Invalida )\n");
  16. return -1;
  17. }
  18. struct sockaddr_in conectar;
  19. conectar.sin_family = FAMILIA;
  20. inet_aton ( argc[1] , &(conectar.sin_addr));
  21. memset(conectar.sin_zero,0,8);
  22.  
  23.  
  24. for(int i = PUERTO_INICIO ;i <= PUERTO_FIN ; i++ ){
  25. int sock = socket( FAMILIA , SOCK_DGRAM , 0 );
  26. conectar.sin_port = htons(i);
  27. int Sconnect;
  28. socklen_t tam;
  29. tam = sizeof(sockaddr);
  30. Sconnect = connect(sock, (sockaddr *)&conectar , tam);
  31. if(Sconnect == -1){
  32. //printf("%d - Cerrado \n",i);
  33. }else{
  34. printf("%d - Abierto \n",i);
  35. }
  36. close(Sconnect);
  37. close(sock);
  38. }
  39. return 0;
  40. }
  41.  


Título: Re: socket ??
Publicado por: naderST en 5 Agosto 2011, 20:28 pm
Revisa bien la función socket:


http://msdn.microsoft.com/en-us/library/ms740506(v=vs.85).aspx
 (http://msdn.microsoft.com/en-us/library/ms740506(v=vs.85).aspx)

Al último parámetro no le pases 0 sino el tipo de protocolo que deseas.


Título: Re: socket ??
Publicado por: Lambda en 5 Agosto 2011, 22:39 pm
Independientemente de eso, UDP es un protocolo sin conexion, la llamada a connect es inutil, la unica manera de saber si un puerto UDP esta abierto es que la aplicacion que este escuchando en el responda a algun paquete especifico o usando el mensaje Destination Unreachable de ICMP


Título: Re: socket ??
Publicado por: <<<-Basura->>> en 6 Agosto 2011, 07:40 am
Entonces es incorrecto usar connect(); en una conexión por UDP