| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Biohazard
Registrado: 17 Feb 2007 Mensajes: 4
| Publicado: 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', ;
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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |