/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Este codigo, parece estar correcto , pero no me funciona

 
      Índice del Foro elrincondelc.com -> Programación en Servidores
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Biohazard



Registrado: 17 Feb 2007
Mensajes: 4

MensajePublicado: 26/02/2007 10:34 am
Título: Este codigo, parece estar correcto , pero no me funciona

Hola , estoy aprendiendo programacion en redes , y se me ocurrio , que era una buena idea , para empezar hacer un codigo fuente, de un escaner de puertos, que por su forma de funcionamiento , no son muy complejos ...

Pues bien , este es el codigo , que he hecho , y es correcto, sin embargo, si abro el programa , nunca me aparece ningun puerto abierto, y eso es imposible, asi que si alguien tiene una idea , de que es lo que falla ... Gracias , de antemano , quiero decir que estoy programando sobre windows , asi que empleo las librerias winsock ...

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock.h>

int main(int argc, char *argv[])
{
WSADATA d;
WORD winsock;
int s;
struct sockaddr_in *h;
int mp, MP; //mp min port ; MP max port;

if(argc<2)
{
printf("Uso : %s <ip> [min port] [max port]\n",argv[0]);
exit(1);
}
else if (argc==4)
{
mp=atoi(argv[2]);
MP=atoi(argv[3]);
}
else
{
mp = 1;
MP = 1024;
}
winsock = MAKEWORD(1,1);
if(WSAStartup(winsock,&d)!=0){fprintf(stderr,"WSAStartup ha fallado.\n");exit(1);}

s=socket(PF_INET,SOCK_STREAM,0);

if(s==-1){fprintf(stderr,"Socket() ha fallado\n");exit(1);}
system("CLS");
printf("Escaneando %s de %d a %d de TCP\n",argv[1],mp,MP);
printf("----------------------------------------------\n");

int i;
for(i=mp;i<=MP;i++)
{
h->sin_family = AF_INET;
h->sin_port = htons(i);
h->sin_addr.s_addr = inet_addr(argv[1]);
memset(&(h->sin_zero),'\0',Cool;

if((connect(s,(struct sockaddr *)&h,sizeof(struct sockaddr)))==0){printf("Puerto %d -TCP- ABIERTO\n",i);}
}

printf("Escaner Completado\n");
printf("------------------\n");

closesocket(s);
WSACleanup();

system("PAUSE");
system("CLS");
return 0;
}

Este es el codigo, a ver si alguien sabe que es lo que falla...
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 26/02/2007 11:13 am
Título:

El error principal es que usas un puntero del tipo struct sockaddr_in y este puntero no apunta a ningun bloque valido, no referencia a un objeto de ese tipo, por tanto o bien declaras un variable del tipo mencionado o bien reservas memoria para dicho puntero. Otro error esta en la comprobacion del numero de argumentos.

El codigo con las modificaciones.. puede que haya algun error mas..
Código:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock.h>

int main(int argc, char *argv[])
{
WSADATA d;
WORD winsock;
int s;
struct sockaddr_in h;
    h.sin_family = AF_INET;
int mp, MP; //mp min port ; MP max port;

    if(argc != 4)
    {
        printf("Uso : %s <ip> [min port] [max port]\n",argv[0]);
        exit(1);
    }
    else if (argc==4)
    {
            mp=atoi(argv[2]);
            MP=atoi(argv[3]);
    } else {
mp = 1;
MP = 1024;
}

winsock = MAKEWORD(1,1);

if(WSAStartup(winsock,&d)!=0)
{
    fprintf(stderr,"WSAStartup ha fallado.\n");
    exit(1);
}

s = socket(PF_INET, SOCK_STREAM, 0);

if(s==-1)
{
    fprintf(stderr,"Socket() ha fallado\n");
    exit(1);
}
    system("CLS");
    printf("Escaneando %s de %d a %d de TCP\n", argv[1], mp, MP);
    printf("----------------------------------------------\n");

int i;
for(i=mp;i<=MP;i++)
{

    h.sin_port = htons(i);
    h.sin_addr.s_addr = inet_addr(argv[1]);
    memset(&(h.sin_zero),'\0',8);

    if((connect(s,(struct sockaddr *)&h,sizeof(struct sockaddr)))==0)
    {
        printf("Puerto %d -TCP- ABIERTO\n",i);
    }
}

printf("Escaner Completado\n");
printf("------------------\n");

closesocket(s);
WSACleanup();

system("PAUSE");
system("CLS");
return 0;
}

Como ejercicio didactico esta bien pero un escaner basado en paquetes SYNC es el "hello word" de los escaner (muy basico y lentito), echale un vistacillo a los sockets raw o winpcap.

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
Biohazard



Registrado: 17 Feb 2007
Mensajes: 4

MensajePublicado: 26/02/2007 12:13 pm
Título:

Gracias por las respuesta , pero no me sirvio de nada , sin embargo , eso si es verdad , es muy lento , asi que voy a mirar eso de los raw ... Si sabeis de algun tutorial de programacion redes , que este explicado para windows ... agradeceria que lo posteaseis... Muchisimas gracias, por la ayuda ...
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 26/02/2007 12:35 pm
Título:

No entiendo que la respuesta no te sirviera de nada ¿?. Compilado con mingw y pasandole un router como host ip la salida es:
Código:

Escaneando 10.0.0.1 de 1 a 25 de TCP
----------------------------------------------
Puerto 21 -TCP- ABIERTO
Escaner Completado
------------------
Presione una tecla para continuar . . .

y a la ip de www.elrincondelc.com
Código:
Escaneando 64.235.38.224 de 80 a 80 de TCP
----------------------------------------------
Puerto 80 -TCP- ABIERTO
Escaner Completado
------------------
Presione una tecla para continuar . . .


Biohazard escribió:
Si sabeis de algun tutorial de programacion redes , que este explicado para windows ... agradeceria que lo posteaseis

Usando google salen unos cuantos links a tutoriales, y por otra parte los orientados a UNIX tambien se pueden seguir practicamente en windows.

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
Biohazard



Registrado: 17 Feb 2007
Mensajes: 4

MensajePublicado: 26/02/2007 1:19 pm
Título:

pues no me sirvio de nada, corregi , lo de la struct sockaddr_in *h sustituyendolo por struct sockaddr_in h, y lo compile con Dev-Cpp, y escaneé el ip local 127.0.0.1 y aun con el navegador abierto , no tenia ni el puerto 80 abierto ...
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3841
Ubicación: Mexico

MensajePublicado: 26/02/2007 1:28 pm
Título:

Biohazard escribió:
lo compile con Dev-Cpp, y escaneé el ip local 127.0.0.1 y aun con el navegador abierto , no tenia ni el puerto 80 abierto


Lo que no es de extrañar ya que un navegador es un cliente y quien abre el (por convencion) puerto 80 para HTTP es un servidor como Apache.

Un curso basico, en ingles y sin terminar es el tutorial de Thomas Bleeker, en esta pagina.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
      Índice del Foro elrincondelc.com -> Programación en Servidores
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com