Ver Mensaje Individual
  #5 (permalink)  
Antiguo 22/04/2014, 09:22
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Código Escaner de puertos en C++

Lo que intento hacer, es bastante simple, osea yo necesito un código para "Escanear puertos abiertos" de una dirección de IP, con ese código pretendo aprender un poco sobre los sockets en C++, lo ideal sería descargar algún manual de Sockets en C++ o alguna página que expliquen como crear conexiones y ejemplos de ellos.

Cuando busqué en google Sockets en Python, me salió cualquier cantidad de resultados (muchos), pero en C++ sale muy poco, casi todo es en C.

Yo deseo hacer un código que al poner una IP y un Puertos desde la consola, me diga el programa si esa IP tiene ese X puerto abierto, es algo simple lo que necesito, por lo menos aunque sea un código que comprueba un solo puerto, pero no consigo información sobre como hacer eso.

Me encantaría poder aprender a hacer un programa Bot Escaner de Puertos en C++ para IRC!! Estaría buenísimo!!!


He probado este código en C++, pero no funciona:

Código C++:
Ver original
  1. ///////////////////////////////////////////////////////
  2. // Simple Portscanner using Winsock in Windows Console
  3. // Free-use-source, nothing really unique about it.
  4. // #hackers on EFnet
  5. ///////////////////////////////////////////////////////
  6. #include <winsock2.h>
  7. #include <iostream>
  8.  
  9. #pragma comment(lib, "Ws2_32.lib")
  10. using namespace std;
  11.  
  12. char IP[20];
  13. int startPort, endPort, err, nret;
  14.  
  15. SOCKET iSocket;
  16. SOCKADDR_IN Info;
  17. WSADATA wsadata;
  18.  
  19. int main()
  20. {
  21.    err = WSAStartup(MAKEWORD(2, 2), &wsadata);
  22.    if(err != 0)
  23.    {
  24.       cout << "Winsock Error, Exiting..." << endl;
  25.       cin.get();
  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(int i=startPort; i < endPort; i++)
  40.    {
  41.       iSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  42.  
  43.       Info.sin_family = AF_INET;
  44.       Info.sin_port = htons(startPort);
  45.       nret = connect(iSocket, NULL, NULL);
  46.       // error is for line above
  47.       if(nret != SOCKET_ERROR)
  48.       {
  49.          cout << "Port " << i << " - OPEN! " << endl;
  50.       }
  51.       //temp++;
  52.       closesocket(iSocket);
  53.     }
  54.     cout << endl << "Finished With Scan..." << endl;
  55.  
  56.     cin.get();
  57. }

Me da los siguientes errores:

C:\Users\Daniel\Desktop\C++\Pruebas.cpp||In function 'int main()':|
C:\Users\Daniel\Desktop\C++\Pruebas.cpp|45|warning : passing NULL to non-pointer argument 3 of 'int connect(SOCKET, const sockaddr*, int)' [-Wconversion-null]|
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp| | undefined reference to `WSAStartup@8'|
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp| | undefined reference to `socket@12'|
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp| | undefined reference to `htons@4'|
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp| | undefined reference to `connect@12'|
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp| | undefined reference to `closesocket@4'|
||=== Build failed: 5 error(s), 1 warning(s) (0 minute(s), 1 second(s)) ===|


La verdad no entiendo porque falla.
Pero ese código es el que estoy buscando.

Agradezco a quien me ayude!!
Gracias.

Última edición por Principe_Azul; 22/04/2014 a las 09:28