socket ??

Iniciado por <<<-Basura->>>, 3 Agosto 2011, 05:45 AM

0 Miembros y 1 Visitante están viendo este tema.

<<<-Basura->>>

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 (cpp) [Seleccionar]

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>

#define FAMILIA AF_INET
#define PUERTO_INICIO 0
#define PUERTO_FIN 65535

int main(int argv,char *argc[]){
if(argc[1] == NULL){
printf("( Dirección Invalida )\n");
return -1;
}
struct sockaddr_in conectar;
conectar.sin_family = FAMILIA;
inet_aton ( argc[1] , &(conectar.sin_addr));
memset(conectar.sin_zero,0,8);


for(int i = PUERTO_INICIO ;i <= PUERTO_FIN ; i++ ){
int sock = socket( FAMILIA , SOCK_DGRAM , 0 );
conectar.sin_port = htons(i);
int Sconnect;
socklen_t tam;
tam = sizeof(sockaddr);
Sconnect = connect(sock, (sockaddr *)&conectar , tam);
if(Sconnect == -1){
//printf("%d - Cerrado \n",i);
}else{
printf("%d - Abierto \n",i);
}
close(Sconnect);
close(sock);
}
return 0;
}
<<<--Basura-->>>

naderST

Revisa bien la función socket:


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.

Lambda

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

<<<-Basura->>>

Entonces es incorrecto usar connect(); en una conexión por UDP
<<<--Basura-->>>