elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿ Me pueden explicar este código ? (Escaner de puertos)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿ Me pueden explicar este código ? (Escaner de puertos)  (Leído 4,035 veces)
pacosn1111

Desconectado Desconectado

Mensajes: 59



Ver Perfil
¿ Me pueden explicar este código ? (Escaner de puertos)
« en: 19 Junio 2015, 16:46 pm »

Hola a todos, resulta que estoy intentando aprender sockets en C, he leido ya varias webs y he intentado aprender por mi cuenta pero me resulta muy dificil los sockets, no se por que, el caso es que mirando por la web encontré un source, bastante pequeño sobre un scaneador de puertos en C (evidentemente usando sockets), lo he estado mirando y la mayoría no lo entiendo (todo lo que tiene que ver con los sockets dentro del source no lo pillo), ¿ Alguien podría explicarme linea por linea que hace este programa ? me sería de mucha ayuda para seguir intentando aprender sockets.

El source es este:

Código
  1.    #include <stdio.h>
  2.    #include <unistd.h>
  3.    #include <errno.h>
  4.    #include <netdb.h>
  5.    #include <string.h>
  6.    #include <sys/types.h>
  7.    #include <sys/socket.h>
  8.  
  9.  
  10.    int main(int argc, char *argv[]) {                  
  11.  
  12.     printf("\n\n");
  13.  
  14.     int sockid;    // Identificador del socket
  15.     int connid;    // Identificador de la conexion
  16.     int pcon = 1;  // Contador del bucle
  17.     int pa = 0;    // Almacena el numero de puertos que tiene abiertos el pc remoto;
  18.  
  19.     struct sockaddr_in conect; // Estructora para guardar datos de conexion.
  20.  
  21.     // Datos en la estructura:
  22.     conect.sin_family = AF_INET;
  23.     conect.sin_addr.s_addr = inet_addr("127.0.0.1");
  24.     bzero(&(conect.sin_zero), 8);
  25.  
  26.     for (pcon = 0; pcon != 8000; pcon++) {
  27.  
  28.     sockid = socket(AF_INET,SOCK_STREAM,0);
  29.  
  30.     conect.sin_port = htons(pcon);
  31.     connid = connect(sockid, (struct sockaddr *)&conect, sizeof(struct sockaddr));
  32.  
  33.     if (connid != -1) {
  34.  
  35.     printf("Puerto %d.................... ABIERTO \n",pcon);
  36.     pa++;
  37.     close(connid);
  38.     close(sockid);
  39.     }
  40.     }
  41.  
  42.     printf("\n\n");
  43.     printf("Scann terminado... %d puertos abiertos",pa);
  44.     printf("\n\n");
  45.  
  46.     return 0;
  47.    }
  48.  

El código lo saque de un post antiguo de este mismo foro, la fuente es esta:

http://foro.elhacker.net/programacion_cc/scanner_de_puertos_en_c-t187519.0.html

Gracias de antemano, saludos.


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: ¿ Me pueden explicar este código ? (Escaner de puertos)
« Respuesta #1 en: 19 Junio 2015, 23:23 pm »

"conect" es una estructura que guarda la información de la conexión (IP y puerto entre otras).

Dentro del bucle:
  • Conecta el socket
  • Pone el puerto a probar, que es el contador del bucle
  • Intenta conectar
  • Si no tira error ("connect()" retorna un valor diferente de -1 (0)), dice que el puerto está abierto, y cierra el socket

En ese código, veo un par de incoherencias, como poner pcon = 1 al principio, o el close(connid), que siempre será 0. Pero vaya.


En línea

pacosn1111

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: ¿ Me pueden explicar este código ? (Escaner de puertos)
« Respuesta #2 en: 20 Junio 2015, 09:28 am »

Gracias, me has aclarado bastantes dudas, una última cosa, ¿ Qué hace la linea ?:

Código
  1. bzero(&(conect.sin_zero), 8);

y la funcion "htons".

Saludos.

En línea

тαптяα


Desconectado Desconectado

Mensajes: 1.151


Sic utere tuo ut alienum non laeda


Ver Perfil WWW
Re: ¿ Me pueden explicar este código ? (Escaner de puertos)
« Respuesta #3 en: 20 Junio 2015, 10:02 am »

The bzero() function sets the first n bytes of the area starting at s to zero (bytes containing '\0').
En línea

pacosn1111

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: ¿ Me pueden explicar este código ? (Escaner de puertos)
« Respuesta #4 en: 20 Junio 2015, 10:37 am »

The bzero() function sets the first n bytes of the area starting at s to zero (bytes containing '\0').

Vale, ya esta entendido, he visto algunos ejemplos también por internet y creo que lo he entendido, eso hace falta para que la estructura siempre tenga 16 bits, pero para que sirve la funcion htons y como se usa ?
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: ¿ Me pueden explicar este código ? (Escaner de puertos)
« Respuesta #5 en: 20 Junio 2015, 11:19 am »

Hay que leer la documentacion, ya en el anterior mensaje te pegaron la definicion de una funcion, ahora tenes que aprender a buscar por tu cuenta el resto.

Y bzero lo que hace es darle valor 0 a ciertos bytes, casi lo dice en el nombre de la funcion practicamente.

The bzero() function sets the first n bytes of the area starting at s to zero (bytes containing '\0').
La funcion bzero pone los primeros n bytes del area que comienza en s a 0 (bytes contienen '\0').

void bzero(void *s, size_t n);

N y s son parametros, N es el numero de bytes (8 en este caso, mejor seria usar el sizeof del campo que uno quiere poner a 0 pero bueno) y s es el puntero a la memoria que queremos ponera 0, el campo sin_zero de la variable conect en este caso.

htons function.

https://silviocesare.wordpress.com/2007/10/22/setting-sin_zero-to-0-in-struct-sockaddr_in/
« Última modificación: 20 Junio 2015, 11:25 am por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
pacosn1111

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: ¿ Me pueden explicar este código ? (Escaner de puertos)
« Respuesta #6 en: 20 Junio 2015, 11:35 am »

Hay que leer la documentacion, ya en el anterior mensaje te pegaron la definicion de una funcion, ahora tenes que aprender a buscar por tu cuenta el resto.

Y bzero lo que hace es darle valor 0 a ciertos bytes, casi lo dice en el nombre de la funcion practicamente.

The bzero() function sets the first n bytes of the area starting at s to zero (bytes containing '\0').
La funcion bzero pone los primeros n bytes del area que comienza en s a 0 (bytes contienen '\0').

void bzero(void *s, size_t n);

N y s son parametros, N es el numero de bytes (8 en este caso, mejor seria usar el sizeof del campo que uno quiere poner a 0 pero bueno) y s es el puntero a la memoria que queremos ponera 0, el campo sin_zero de la variable conect en este caso.

htons function.

https://silviocesare.wordpress.com/2007/10/22/setting-sin_zero-to-0-in-struct-sockaddr_in/

Gracias por la respuesta, pero es que la teoría de htons ya la se, lo he buscado ya en google "La función
htons convierte el entero corto dado (16 bytes) dato por hostshort desde el orden de bytes del hosts al orden de bytes de la red. "

El problema está en que no entiendo esos conceptos de "orden de bytes del hosts" y "orden de bytes de la red" no se lo que significa, perdon por ser tan pesado es que en esto de los sockets estoy muy perdido.

Saludos.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: ¿ Me pueden explicar este código ? (Escaner de puertos)
« Respuesta #7 en: 20 Junio 2015, 11:58 am »

https://en.wikipedia.org/wiki/Endianness#Endianness_in_networking
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines