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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  sockets en windows verificar puerto.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: sockets en windows verificar puerto.  (Leído 2,543 veces)
Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
sockets en windows verificar puerto.
« en: 23 Abril 2014, 05:13 am »

hola a todos.
bueno es que trato de hacer un programa que verifique si el ciertos puertos estan abiertos o no pero a la hora de ejecutar e programa me dice que todos los puertos estan habierto esperoque me puedan ayudar.

Código
  1.  
  2. #include <winsock2.h>
  3. #include <windows.h>    
  4. #include <iostream>
  5. #include <sys/types.h>
  6.  
  7. #pragma comment(lib, "Ws2_32.lib")
  8. using namespace std;
  9.  
  10. char IP[20];
  11. int startPort, endPort, err, nret;
  12.  
  13.  
  14.  
  15. int main()
  16. {
  17.        int i;
  18. struct sockaddr_in conect;
  19. SOCKET iSocket;
  20.    WSADATA wsaData;
  21.     if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0 )
  22.   {
  23.      cout << "Winsock Error, Exiting..." << endl;
  24.      cin.get();
  25.      return 0;
  26.   }
  27.  
  28.   cout << "Target IP: ";
  29.   cin>>IP;
  30.   cout << "Starting Port: ";
  31.   cin>>startPort;
  32.   cout << "End Port: ";
  33.   cin>>endPort;
  34.  
  35.   cin.ignore();
  36.  
  37.   cout << endl << endl << "Scanning..." << endl << endl;
  38.  
  39.   for( i=startPort; i <= endPort; i++)
  40.   {
  41.  
  42.      iSocket = socket(AF_INET, SOCK_STREAM, 0);
  43.      if (iSocket == -1)
  44.       cout<<"error al abrir el socket";
  45.  conect.sin_addr.S_un.S_addr = inet_addr(IP);
  46.      conect.sin_family = AF_INET;
  47.      conect.sin_port = htons(startPort);
  48.  
  49.  nret = bind(iSocket, (struct sockaddr *)&conect, sizeof(conect));
  50.  
  51.      if( nret == 0)
  52.      {
  53.         cout << "Port " << i << " - OPEN! " << endl;
  54.      }
  55.      else
  56.      {
  57.      cout <<"puerto no abir}erto";
  58.      getchar();
  59.      }
  60.      closesocket(iSocket);
  61.    }
  62.    cout << endl << "Finished With Scan..." << endl;
  63.  
  64.    cin.get();
  65.    WSACleanup();
  66. }
  67.  
  68.  


« Última modificación: 23 Abril 2014, 06:14 am por Drewermerc » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: sockets en windows verificar puerto.
« Respuesta #1 en: 23 Abril 2014, 06:47 am »

Buenas, varios errores tanto en la estructura del programa como falta de conocimiento de sockets en Windows...
Se usa la funcion connect para intentar establecer la conexion, ya existen macros predefinidas para validar los resultados de las funciones
asi se hace un código más descriptivo:
Código:
      conect.sin_family = AF_INET;
     conect.sin_port = htons(startPort);
 
 nret = bind(iSocket, (struct sockaddr *)&conect, sizeof(conect));

Código:
      if( nret == 0)

-

conect.sin_port = htons(startPort)


podes usar getaddrinfo para obtener la información luego socket,connect,etc. Además seria bueno comprar un libro acerca sockets en Windows.


En línea

Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: sockets en windows verificar puerto.
« Respuesta #2 en: 23 Abril 2014, 06:59 am »

hola x64core
bueno mira mira tambien ya lo intente con bind pero no sigue en lo mismo y como el utimo memodo que use fue connect por eso lo publique con connect.
bueno pues si no tengo mucho conocimientos de sockets y pues yo me apoco de lo que encuentro en internet aunq ue no hay mucha informacion en esapañol en lo poco que entiendo de ingles tambien en eso me apollo y pue sno conozco ningun libro sobre sockest en windows.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: sockets en windows verificar puerto.
« Respuesta #3 en: 23 Abril 2014, 07:19 am »

hola x64core
bueno mira mira tambien ya lo intente con bind pero no sigue en lo mismo y como el utimo memodo que use fue connect por eso lo publique con connect.
bueno pues si no tengo mucho conocimientos de sockets y pues yo me apoco de lo que encuentro en internet aunq ue no hay mucha informacion en esapañol en lo poco que entiendo de ingles tambien en eso me apollo y pue sno conozco ningun libro sobre sockest en windows.
El código que publicaste veo que usas bind no connect. Te digo que usa connect no bind.
Sólo arreglé el problema mayor y deberia ser usado sólo para pruebas pero lo mejor será leer:

Código:
int main()
{
int i = 0;
char hostname[] = "localhost";
struct sockaddr_in conect;
SOCKET iSocket;
SOCKADDR_IN Info;
   WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0 )
  {
     cout << "Winsock Error, Exiting..." << endl;
     cin.get();
     return 0;
  }
 
  cout << "Target IP: ";
  cin>>IP;
  cout << "Starting Port: ";
  cin>>startPort;
  cout << "End Port: ";
  cin>>endPort;
 
  cin.ignore();
 
  cout << endl << endl << "Scanning..." << endl << endl;
 
  for(int i=startPort; i <= endPort; i++)
  {
 
        iSocket = socket(AF_INET, SOCK_STREAM, 0);

        if (iSocket == -1)
            cout<<"error al abrir el socket";

        conect.sin_addr.S_un.S_addr = inet_addr(IP);
        conect.sin_family = AF_INET;
        conect.sin_port = htons(i);
 
     nret = connect(iSocket, (struct sockaddr *)&conect, sizeof(conect));
 
     if( nret == SOCKET_ERROR)
     {
         cout <<"puerto no abierto " << i << endl;;
     }
     else
     {
        cout << "Port " << i << " - OPEN! " << endl;
     }
     closesocket(iSocket);
   }
   cout << endl << "Finished With Scan..." << endl;
 
   cin.get();
   WSACleanup();
}

El Ingles es insispensable en la programación. En mi experiencia te recomiendo comprar esto dos :
http://www.amazon.com/Network-Programming-Microsoft-Windows-Edition/dp/0735615799
http://www.amazon.com/TCP-Sockets-Second-Edition-Programmers/dp/0123745403
Entorno Windows y en conocimiento en general


En línea

Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: sockets en windows verificar puerto.
« Respuesta #4 en: 23 Abril 2014, 07:43 am »

hola x64core.
bueno gracias y perdon es que ya estoy un poco cansado y con sueño y creo que entendi mal , entonces creo que me pondre a leer mas y checare los libros que me recomendaste.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Indicar puerto local Cliente Sockets TCP
Java
BlaineMonkey 3 4,041 Último mensaje 4 Mayo 2010, 17:30 pm
por BlaineMonkey
Sockets en windows (C++)
Programación C/C++
Danyel_Casvill 2 3,537 Último mensaje 15 Junio 2011, 02:22 am
por Danyel_Casvill
Cómo verificar la autenticidad de una ISO de Windows y Office
Noticias
wolfbcn 1 1,408 Último mensaje 12 Octubre 2016, 15:43 pm
por PalitroqueZ
Windows 10 Puerto UDP 61905 « 1 2 »
Windows
horacio_56 12 7,943 Último mensaje 7 Julio 2017, 19:32 pm
por Minusfour_cierralo_o_baneamefull
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines