Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Código Escaner de puertos en C++

Estas en el tema de Código Escaner de puertos en C++ en el foro de C/C++ en Foros del Web. Hola amigos!!!, estube mirando por google y páginas, pero no encuentro un escaner de puertos en C++, los que encuentro son en C. Recién bajé ...
  #1 (permalink)  
Antiguo 21/04/2014, 19:39
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Código Escaner de puertos en C++

Hola amigos!!!, estube mirando por google y páginas, pero no encuentro un escaner de puertos en C++, los que encuentro son en C.
Recién bajé un manual de sockets, pero es para Linux y para lenguaje C.
Me gustaría que alguien me dejara algún código simple o una página de un Escaner de puertos en c++, he probado 2 códigos que he encontrado en C++, pero me daban errores.

Me gustaría un código simple y si es posible un manual o una página donde expliquen sobre los Sockets en C++.
Lo ideal sería que el programa pida la IP y el puerto por consola y luego te informe si ese X puerto está abierto o cerrado.

Desde ya compañeros muchas gracias!! :arriba
  #2 (permalink)  
Antiguo 22/04/2014, 02:08
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Respuesta: Código Escaner de puertos en C++

pues usa la consola XDD "netstat -a" y guarda en un archivo XDD
  #3 (permalink)  
Antiguo 22/04/2014, 03:29
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Código Escaner de puertos en C++

Pero eso es para usar algo predeterminado, yo deseo un código para aprender de él
  #4 (permalink)  
Antiguo 22/04/2014, 07:08
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Respuesta: Código Escaner de puertos en C++

ese comando te devuelve todos los puertos abiertos, seria interesante si se puediera guardarlo en un archibo o hacer comprobaciones.
La verdad no tengo ni idea de que es lo que quieres pero bueno, como veo que nadie contesta =D a ver si alguien con mas exp que yo te echa un cable XDD
  #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
  #6 (permalink)  
Antiguo 22/04/2014, 09:57
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Respuesta: Código Escaner de puertos en C++

aquí hay un ejemplo de un chat muy interesante http://foro.elhacker.net/programacio...415#msg1867415

prueba lo a ver que te parece, esta el código y todo XDDD
  #7 (permalink)  
Antiguo 22/04/2014, 11:42
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Código Escaner de puertos en C++

He mirado en esa web e intentado bajar ese programa, pero los 2 enlaces no funcionan.

En realidad lo que yo deseo es un código simple, un bot para IRC en C++ y/o un Escaner de Puertos en C++. Algo simple para que lo pueda entender.

Esta bueno trabajar con Sockets, eso siempre me gustó en los 2 lenguajes que trabajé (mSL y Python).

Te agradezco igual campeón!!

Seguiré esperando una ayuda.
  #8 (permalink)  
Antiguo 22/04/2014, 14:26
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Código Escaner de puertos en C++

A mi el segundo enlace si me funciona, todavía no se nada de sockets pero me interesa mucho este tema :D
https://mega.co.nz/#!1c1jRRJQ!Lc3nlx...RGMeWby7kGUooA
  #9 (permalink)  
Antiguo 22/04/2014, 17:33
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Código Escaner de puertos en C++

Amigo patilanz el enlace no funciona, cuando abro esa página me redirige a esta que nada que ver: https://mega.co.nz/update.html
además de eso, me muestra varios navegadores para que descargue y cuando pruebo con FireFox me sigue saliendo lo mismo, no funciona el enlace, no manda al archivo para descargarlo, igual ese chat debe ser complejo o algo complejo y yo deseo algo fácil para poder empezar con sockets, porque empezar con algo complejo no le voy a entender. Seguiré esperando ayuda!! mientras tanto sigo buscando algún código o manual.
Gracias!!
  #10 (permalink)  
Antiguo 22/04/2014, 17:58
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Código Escaner de puertos en C++

hola principe_azul.
bueno pues ami tambien me funciona bien el link. y bueno ami antes mepasaba algo similar pero eso me pasaba por no tener actualizada la extencion de mega y bueno alomejor eso puede ser fijate si tienes esta vercion d ela extencion de mega.
https://addons.mozilla.org/es/firefox/addon/meganz/
  #11 (permalink)  
Antiguo 22/04/2014, 18:42
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Código Escaner de puertos en C++

hola principe_azul.
bueno al igual que tu no lelvo mucho con esto de los sockets pero mira ya pude correr tu codigo espero que esto te ayude.

Código C:
Ver original
  1. #include <winsock2.h>
  2.     #include <windows.h>    
  3.     #include <iostream>
  4. #pragma comment(lib, "Ws2_32.lib")
  5. using namespace std;
  6.  
  7. char IP[20];
  8. int startPort, endPort, err, nret;
  9.  
  10.  
  11.  
  12. int main()
  13. {
  14.     struct sockaddr_in conect;
  15.     SOCKET iSocket;
  16.     SOCKADDR_IN Info;
  17.     WSADATA wsaData;
  18.      if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0 )
  19.    {
  20.       cout << "Winsock Error, Exiting..." << endl;
  21.       cin.get();
  22.       return 0;
  23.    }
  24.  
  25.    cout << "Target IP: ";
  26.    cin>>IP;
  27.    cout << "Starting Port: ";
  28.    cin>>startPort;
  29.    cout << "End Port: ";
  30.    cin>>endPort;
  31.  
  32.    cin.ignore();
  33.  
  34.    cout << endl << endl << "Scanning..." << endl << endl;
  35.  
  36.    for(int i=startPort; i < endPort; i++)
  37.    {
  38.       //iSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  39.       iSocket = socket(AF_INET, SOCK_STREAM, 0);
  40.  
  41.       Info.sin_family = AF_INET;
  42.       Info.sin_port = htons(startPort);
  43.       nret = connect(iSocket, (struct sockaddr *)&conect, sizeof(struct sockaddr));
  44.       // error is for line above
  45.       if(nret != SOCKET_ERROR)
  46.       {
  47.          cout << "Port " << i << " - OPEN! " << endl;
  48.       }
  49.       //temp++;
  50.       closesocket(iSocket);
  51.     }
  52.     cout << endl << "Finished With Scan..." << endl;
  53.  
  54.     cin.get();
  55.     WSACleanup();
  56. }
saludos.
  #12 (permalink)  
Antiguo 22/04/2014, 19:19
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Código Escaner de puertos en C++

Hola amigo Drewermerc, muchas gracias por tu ayuda, he probado tu código, pero me sigue dando errores, los mismos son estos:

mingw32-g++.exe -c C:\Users\Daniel\Desktop\C++\SocketPuertos.cpp -o C:\Users\Daniel\Desktop\C++\SocketPuertos.o
mingw32-g++.exe -o C:\Users\Daniel\Desktop\C++\SocketPuertos.exe C:\Users\Daniel\Desktop\C++\SocketPuertos.o
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x70): undefined reference to `WSAStartup@8'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x1cb): undefined reference to `socket@12'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x1e7): undefined reference to `htons@4'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x208): undefined reference to `connect@12'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x274): undefined reference to `closesocket@4'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x2db): undefined reference to `WSACleanup@0'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
6 error(s), 0 warning(s) (0 minute(s), 0 second(s))


También probé este código:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <time.h>
  4. #include <conio.h>
  5. #include <dos.h>
  6. #include <stdio.h>
  7. using namespace std;
  8.  
  9. int TcpConnect (int Port, char *IpDst, int Timeout)
  10. {
  11. SOCKET sock;
  12. SOCKADDR_IN sin;
  13. fd_set Write, Err;
  14. TIMEVAL timeout;
  15. unsigned long Mode = 1;
  16. int ret, err;
  17.  
  18. sock = socket (AF_INET,SOCK_STREAM,0);
  19. if (sock == INVALID_SOCKET)
  20. {
  21.     return 2;
  22. }
  23.  
  24. sin.sin_addr.s_addr = inet_addr (IpDst);
  25. sin.sin_port = htons (Port);
  26. sin.sin_family = AF_INET;
  27.  
  28. if (ioctlsocket (sock, FIONBIO, &Mode) != 0)
  29. {
  30.     closesocket (sock);
  31.     return 2;
  32. }
  33.  
  34. ret = ::connect (sock, (struct sockaddr*)&sin, sizeof (sin));
  35.  
  36. if (ret == SOCKET_ERROR)
  37. {
  38.       err = WSAGetLastError ();
  39.       if (err == WSAEWOULDBLOCK)
  40.       {
  41.             FD_ZERO (&Write);
  42.             FD_ZERO (&Err);
  43.             FD_SET (sock, &Write);
  44.             FD_SET (sock, &Err);
  45.             timeout.tv_sec = Timeout;
  46.             timeout.tv_usec = 0;
  47.  
  48.             ret = select (0, NULL, &Write, &Err, &timeout);
  49.             if (ret == 0)
  50.             {
  51.                     // Timeout
  52.                     closesocket (sock);
  53.                     return 1; // Close
  54.              }
  55.              else
  56.              {
  57.                      if (FD_ISSET (sock, &Write))
  58.                      {
  59.                               closesocket (sock);
  60.                               return 0; // Open
  61.                       }
  62.                       if (FD_ISSET (sock, &Err))
  63.                       {
  64.                                closesocket (sock);
  65.                                return 2; // Error
  66.                        }
  67.                  }
  68.       }
  69.       else
  70.       {
  71.               closesocket (sock);
  72.               return 1; // Close
  73.        }
  74. }
  75. else
  76. {
  77.     closesocket (sock);
  78.     return 0; // open
  79. }
  80.  
  81. return 0;
  82. }


Pero también me da errores son errores son estos:

mingw32-g++.exe -c C:\Users\Daniel\Desktop\C++\Pruebas.cpp -o C:\Users\Daniel\Desktop\C++\Pruebas.o
mingw32-g++.exe -o C:\Users\Daniel\Desktop\C++\Pruebas.exe C:\Users\Daniel\Desktop\C++\Pruebas.o
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x6d): undefined reference to `socket@12'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x98): undefined reference to `inet_addr@4'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0xac): undefined reference to `htons@4'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0xd3): undefined reference to `ioctlsocket@12'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0xea): undefined reference to `closesocket@4'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x11b): undefined reference to `connect@12'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x130): undefined reference to `WSAGetLastError@0'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x250): undefined reference to `select@20'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x267): undefined reference to `closesocket@4'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x293): undefined reference to `__WSAFDIsSet@8'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x2aa): undefined reference to `closesocket@4'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x2d6): undefined reference to `__WSAFDIsSet@8'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x2ed): undefined reference to `closesocket@4'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x30c): undefined reference to `closesocket@4'
C:\Users\Daniel\Desktop\C++\Pruebas.o:Pruebas.cpp: (.text+0x32b): undefined reference to `closesocket@4'
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 1 second(s))
16 error(s), 0 warning(s) (0 minute(s), 1 second(s))


La verdad no sé porque fallan los códigos... no entiendo.
Gracias amigo igualmente!!!

PD: El código es en C++, utilizo Code::Blocks
  #13 (permalink)  
Antiguo 22/04/2014, 19:22
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Código Escaner de puertos en C++

hola amigo.
bueno mira agrega a parametros de compilacion
-lws2_32
sino sabes dime y te digo como.
haver si con esto ya se soluciona.
  #14 (permalink)  
Antiguo 22/04/2014, 20:47
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Respuesta: Código Escaner de puertos en C++

Cita:
Iniciado por Principe_Azul Ver Mensaje
He mirado en esa web e intentado bajar ese programa, pero los 2 enlaces no funcionan.

En realidad lo que yo deseo es un código simple, un bot para IRC en C++ y/o un Escaner de Puertos en C++. Algo simple para que lo pueda entender.

Esta bueno trabajar con Sockets, eso siempre me gustó en los 2 lenguajes que trabajé (mSL y Python).

Te agradezco igual campeón!!

Seguiré esperando una ayuda.
El source lo tengo yo si te interesa. Que raro que este mal...si lo descargue hara como un par de semanas o por ahí =/

Una vez estuve buscando sobre sockts, y muchos de los sources que encuentras no funcionan no se por que =/
Uno de los pocos que encontré ha sido este: https://www.youtube.com/watch?v=6Z77xUNFYyc
hay el enlace del socket en la descripción del video y aun funciona lo he comprobado, la pega es que el video esta en aleman :D
pero me funciono. :D
https://docs.google.com/file/d/0B3g2...EzY2lCVUU/edit
Me recomendaron un libro ahora te lo pongo aquí si recuerdo.
http://www.etnassoft.com/biblioteca/...=all&since=all
el que poner programacion de redes y esta en español, el otro es mas nuevo pero esta en ingles =( (my inglish is vary bad XD)

Última edición por vangodp; 22/04/2014 a las 21:33
  #15 (permalink)  
Antiguo 22/04/2014, 22:34
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Código Escaner de puertos en C++

Amigo Drewermerc no sé como hacer eso, me podrías ayudar por favor? Paso a paso porque soy un queso en C++

Amigo vangodp me encantaría que me pasaras el código, puedes aquí o por privado, te lo agradecería mucho!!!
Es normal que los enlaces duren poco tiempo, depende del tiempo que brinde la página para alojar archivos, también depende si el archivo lo ha subido un usuario registrado.
Es nuevo el post, debería funcionar ese enlace!!

Gracias a los 2!
  #16 (permalink)  
Antiguo 22/04/2014, 22:41
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Código Escaner de puertos en C++

bueno mira primero ve a:
settings despues compiler luego en la pestaña linker settings despues en donde dice other linker opcions agrgas esto -lws2_32.

aqui estan los codigo que te deci vangod.
Código C++:
Ver original
  1. // Netzwerkprogrammierung, WINSOCK API, Sockets
  2. // TCP Server
  3.  
  4. #pragma comment(lib, "ws2_32.lib")
  5. #include <cstdio>
  6. #include <iostream>
  7. #include <WinSock2.h>
  8. #include <Windows.h>
  9. using namespace std;
  10.  
  11. char recvbuf[256];
  12.  
  13. int main()
  14. {
  15.     // Hilfsvariable
  16.     long res;
  17.  
  18.     // Versionsdaten
  19.     WSADATA wsaData;
  20.  
  21.     // ws2_32.dll aktivieren
  22.     res = WSAStartup(MAKEWORD(2, 1), &wsaData);
  23.     if(res == 0 )
  24.         cout << "WSAStartup()\t\t successful" << endl;
  25.     else
  26.         cout << "error WSAStartup(): " << WSAGetLastError() << endl;
  27.  
  28.     // Socket Deskriptoren
  29.     SOCKET slisten, client;
  30.  
  31.     // Socket anforder bzw. Kommunikationsendpunkt einrichten
  32.     slisten = socket(AF_INET, SOCK_STREAM, 0);
  33.     if(slisten != INVALID_SOCKET )
  34.         cout << "socket()  \t\t successful" << endl;
  35.     else
  36.         cout << "error socket(): " << WSAGetLastError() << endl;
  37.  
  38.     // Verbindungsinformationen
  39.     sockaddr_in info;       // sockaddr
  40.     info.sin_addr.s_addr = inet_addr("127.0.0.1");
  41.     info.sin_family      = AF_INET;
  42.     info.sin_port        = htons(54345);
  43.     int infolen = sizeof(info);
  44.  
  45.     res = bind(slisten, (struct sockaddr*)&info, infolen);
  46.     if(res != SOCKET_ERROR )
  47.         cout << "bind()  \t\t successful" << endl;
  48.     else
  49.         cout << "error bind(): " << WSAGetLastError() << endl;
  50.  
  51.     // Warteschlange für einkommende Verbindungen
  52.     res = listen(slisten, SOMAXCONN);
  53.     if(res != SOCKET_ERROR )
  54.         cout << "listen()  \t\t successful" << endl;
  55.     else
  56.         cout << "error listen(): " << WSAGetLastError() << endl;
  57.  
  58.     sockaddr_in clientinfo;
  59.     int clientinfolen = sizeof(clientinfo);
  60.  
  61.     while(1)
  62.     {
  63.         // Verbindung aus der Warteschlange abholen
  64.         client = accept(slisten, (struct sockaddr*)&clientinfo, &clientinfolen);
  65.         if(client != SOCKET_ERROR)
  66.             cout << "client accepted: " << inet_ntoa(clientinfo.sin_addr) << ":"
  67.                  << ntohs(clientinfo.sin_port) << endl;
  68.  
  69.         // über das Socket kommunizieren
  70.         res = send(client, "server message received", strlen("server message received"), 0);
  71.         if(res == SOCKET_ERROR)
  72.             cout << "error send()" << WSAGetLastError() << endl;
  73.  
  74.         res = recv(client, recvbuf, 256, 0);
  75.         if(res == SOCKET_ERROR)
  76.             cout << "error recv(): " << WSAGetLastError() << endl;
  77.         else
  78.             cout << res << " bytes received: "
  79.                  << recvbuf << endl;
  80.     }
  81.  
  82.     closesocket(client);
  83.     closesocket(slisten);
  84.     WSACleanup();
  85.     return 0;
  86. }

Código C++:
Ver original
  1. // TCP Client
  2.  
  3. #pragma comment(lib, "ws2_32.lib")
  4. #include <cstdio>
  5. #include <iostream>
  6. #include <WinSock2.h>
  7. #include <Windows.h>
  8. using namespace std;
  9.  
  10. char sendbuf[256];
  11. char recvbuf[256];
  12.  
  13. int main()
  14. {
  15.     long rc;
  16.  
  17.     WSADATA wsaData;
  18.     SOCKET sConnect;
  19.     sockaddr_in conpar;
  20.  
  21.     // ws2_32.dll aktivieren
  22.     rc = WSAStartup(MAKEWORD(2, 0), &wsaData);
  23.     if(rc == 0 )
  24.         cout << "WSAStartup()\t\t successful" << endl;
  25.     else
  26.         cout << "error WSAStartup(): " << WSAGetLastError() << endl;
  27.  
  28.     // socket einrichten
  29.     sConnect = socket(AF_INET, SOCK_STREAM, 0);
  30.     if(sConnect != INVALID_SOCKET )
  31.         cout << "socket()  \t\t successful" << endl;
  32.     else
  33.         cout << "error socket(): " << WSAGetLastError() << endl;
  34.  
  35.     // verbindungsparameter
  36.     conpar.sin_addr.s_addr = inet_addr("127.0.0.1");
  37.     conpar.sin_family      = AF_INET;
  38.     conpar.sin_port        = htons(54345);
  39.     int conparlen = sizeof(conpar);
  40.  
  41.     // server vor client starten, oder hier eine connect-schleife erstellen
  42.     rc = connect(sConnect, (struct sockaddr*)&conpar, conparlen);
  43.     if(rc != SOCKET_ERROR)
  44.         cout << "connect()   \t\t successful" << endl;
  45.     else
  46.         cout << "not connected(): " << WSAGetLastError() << endl;
  47.  
  48.     while(1)
  49.     {
  50.         memset(&sendbuf, 0, sizeof(sendbuf));
  51.         memset(&recvbuf, 0, sizeof(recvbuf));
  52.  
  53.         rc = recv(sConnect, recvbuf, 256, 0);
  54.         if(rc == SOCKET_ERROR)
  55.             cout << "error recv(): " << WSAGetLastError() << endl;
  56.         else
  57.         {
  58.             cout << rc << " bytes received: "
  59.                  << recvbuf << endl;
  60.         }
  61.  
  62.         cout << "send: ";
  63.         cin.getline(sendbuf, 256);
  64.  
  65.         rc = send(sConnect, sendbuf, strlen(sendbuf), 0);
  66.         if(rc == SOCKET_ERROR)
  67.             cout << "error send(): " << WSAGetLastError() << endl;
  68.         else
  69.             cout << rc << " bytes sent" << endl;
  70.     }
  71.  
  72.     closesocket(sConnect);
  73.     WSACleanup();
  74.     return 0;
  75. }
  #17 (permalink)  
Antiguo 22/04/2014, 22:44
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Código Escaner de puertos en C++

Amigo vangodp he probado el código que me dejaste de la web (el cliente), lo he intentado compilar y me salen estos errores:

mingw32-g++.exe -c C:\Users\Daniel\Desktop\C++\SocketPuertos.cpp -o C:\Users\Daniel\Desktop\C++\SocketPuertos.o
mingw32-g++.exe -o C:\Users\Daniel\Desktop\C++\SocketPuertos.exe C:\Users\Daniel\Desktop\C++\SocketPuertos.o
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x70): undefined reference to `WSAStartup@8'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0xb2): undefined reference to `WSAGetLastError@0'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x116): undefined reference to `socket@12'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x158): undefined reference to `WSAGetLastError@0'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x1ac): undefined reference to `inet_addr@4'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x1c4): undefined reference to `htons@4'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x1eb): undefined reference to `connect@12'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x22d): undefined reference to `WSAGetLastError@0'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x2d0): undefined reference to `recv@16'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x2e1): undefined reference to `WSAGetLastError@0'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x3d4): undefined reference to `send@16'
C:\Users\Daniel\Desktop\C++\SocketPuertos.o:Socket Puertos.cpp:(.text+0x3e5): undefined reference to `WSAGetLastError@0'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 1 second(s))
12 error(s), 0 warning(s) (0 minute(s), 1 second(s))


No se que pasa, no puedo compilar!!
Muchas gracias amigo!!
  #18 (permalink)  
Antiguo 22/04/2014, 22:50
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Código Escaner de puertos en C++

hola amigo bueno mira es que ami tambien me ha estado fallando code block pero puedes intentar con devcpp alomejor hay si te compila yo e esatado utilizando este por que codeblock igual me ha estado fallando alomejor con este si puedes compilar.
http://sourceforge.net/projects/orwelldevcpp/
  #19 (permalink)  
Antiguo 22/04/2014, 23:32
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Respuesta: Código Escaner de puertos en C++

por lo que se ve da errores en windows 7 pero llega enviar un solo mensaje.
Lo habia probado en windows xp y allí si me funcionaba correcto XDD
hay que hacer lo que dijo Drewermerc: poner -lwsock32 en opciones de linkado.
o añadir eso puede que ande #pragma comment( lib, "ws2_32.lib" )
No tengo nada de experiencia con sockets =(
Compilar si me compilo poniendo el -lwsock32, pero solo envía un mensaje y se queda pillao.

Aquí os dejo otro muy sencillito que es solo un servidor y un cliente. Solo permite enviar de uno a otro, despues mejorarlo es cosa vuestra. Ese si me funciono perfec, y va acompañado de un pdf bien detallado.
Descargar rápido que los voy a quitar pronto XDD
http://1drv.ms/1lDaEpA

Última edición por vangodp; 23/04/2014 a las 00:00
  #20 (permalink)  
Antiguo 23/04/2014, 05:08
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Código Escaner de puertos en C++

Hola nuevamente amigos!! Ahora si me funcionó perfecta la compilación!!
Faltaban esos parámetros en el compilador!!
Muchisimas gracias Drewermerc, me funcionó tu ayuda!!!
Gracias vangodp por tu ayuda también!!!

Probé este código:

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. }

Pero no me funcionó, así que lo modifiqué y miré por que fallaba y lo pude solucionar!!!!!!!!!!

Quedó así compañeros (lo dejo para que puedan observar como quedó finalmente y para ayudar a alguien que tiene o ha tenido el mismo problema que yo):

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, Saliendo..." << endl;
  25.       cin.get();
  26.    }
  27.  
  28.    cout << "Direccion de IP: ";
  29.    cin>>IP;
  30.    cout << "Puerto de inicio: ";
  31.    cin>>startPort;
  32.    cout << "Puerto de final: ";
  33.    cin>>endPort;
  34.  
  35.    cin.ignore();
  36.  
  37.    cout << endl << endl << "Escaneando..." << endl << endl;
  38.    for(int i=startPort; i < endPort; i++) {
  39.  
  40.         iSocket = socket(AF_INET, SOCK_STREAM, 0);
  41.  
  42.         Info.sin_addr.s_addr = inet_addr("127.0.0.1");
  43.         Info.sin_family = AF_INET;
  44.         Info.sin_port = htons(i);
  45.         int conparlen = sizeof(Info);
  46.  
  47.         nret = connect(iSocket, (struct sockaddr*)&Info, conparlen);
  48.        if(nret != SOCKET_ERROR) {
  49.            cout << "Puerto: " << startPort << " - Abierto! " << endl;
  50.         }
  51.         else cout << "Puerto cerrado" << endl;
  52.         closesocket(iSocket);
  53.     }
  54.    cout << endl << "Escaneo finalizado..." << endl;
  55.  
  56.    cin.get();
  57. }


Ahora si me funciona perfecto!!! tenía varios errores ese código, uno es este por ejemplo:

Código C++:
Ver original
  1. Info.sin_port = htons(startPort);

lo dejé así:

Código C++:
Ver original
  1. Info.sin_port = htons(i);

ya que la variable i es la que incrementa!!
Opté por este código porque lo veo más fácil y más corto, pero también probé con el código que me dejaste vangodp y si funciona perfecto.

Me ha funcionado la ayuda de los 2, muchísimas gracias a ambos!!
Es muy bueno poder trabajar así en equipo, es muy bueno ayudarnos entre todos.

Cuando aprenda más, me encantaría poder analizar múltiples IPs y puertos, todos a la vez, esto seguramente se consigue con los famosos Threads.
Quiero hacer un programa, sería un roBOT para mi Red IRC de chat que escanearía puertos en caso de ataques y expulsaría a los clones que vayan entrando al Servidor.
Tengo un programa en C que funciona espectacular, excelente diria, pero me encantaría poder ser capaz de hacer uno yo mismo en C++.
¿Será difícil poder hacer eso?
Otra pregunta amigos, yo al bot lo necesitaría para Linux, pero para hacer las pruebas tiene que ser en Windows ya que Windows es mi S.O. ¿con sólo cambiar el nombre de la librería winsock2 por la que utiliza Linux, será suficiente?

¡Gracias amigos!

PD: ¿ Que significa esto: #pragma comment(lib, "Ws2_32.lib") ?
  #21 (permalink)  
Antiguo 23/04/2014, 07:11
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Respuesta: Código Escaner de puertos en C++

http://es.cppreference.com/w/cpp/preprocessor/pragma
el pragma que pase es para visual c++
  #22 (permalink)  
Antiguo 23/04/2014, 08:46
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Código Escaner de puertos en C++

hola.
bueno pues segun yo lo unico uqe estas haciendo el linkar la libreria que tienes el mismo nombre que el parametro que ponemos al compilar pero pues no funciona a nada yo de lo que estado leyendo y codigos fente que veo nunca habia visto ese parametro y pues si lo quitas no pasa nada tu programa funciona normal mente y no le veo una gran uso.
y bueno mira para poder correr tus codigos de sockets en linux so quita esto:
err = WSAStartup(MAKEWORD(2, 2), &wsadata);
if(err != 0)
{
cout << "Winsock Error, Saliendo..." << endl;
cin.get();
}
y agrga estas librerias.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <winsock2.h>
#include <netinet/in.h>
y bueno algo que vi en tu codigo es que no cierras wsa asi que lo puedes hacer con esto.
WSACleanup();

y bueno si te entendi ben mas bien lo que queires hacer es un esecie de sniffer y pues dificil ya sabien manejar bien los sockets no creo que sea pero si e sun poco laborioso y bueno para mi lo considero de media dificultad .
buenoe speor haberte ayudado saludos.
  #23 (permalink)  
Antiguo 23/04/2014, 09:31
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Respuesta: Código Escaner de puertos en C++

winsock2 sirve en linux?
  #24 (permalink)  
Antiguo 23/04/2014, 23:14
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Código Escaner de puertos en C++

Hola Drewermerc, si algo así deseo hacer, por ejemplo para que se entienda mejor.

Supongamos que tengo 10 puertos a escaner con la IP 190.221.29.214
esos mismos puertos también deberán escanear esta otra IP 200.43.57.253
también esta otra 201.251.156.17
otra más 168.226.35.19
y así sucesivamente, osea el programa deberá buscar si todas esas IPs o más puede llegar a tener aunque sea 1 puerto abierto, en caso afirmativo, el usuario sería expulsado del servidor de chat ya que tiene un puerto abierto que es utilizado por los puertos de los Proxys.
Esa operación deberá hacerla en cuestión de segundos, maso menos para darte una idea, 10 IPs en 7, 8, 9 o 10 segundos, pueden ser mucho más de 4 IPs (como las que puse de ejemplo arriba), pueden ser cientas.

Amigo que significa esto:
Código C++:
Ver original
  1. WSACleanup();
ya le agregé esa línea a mi código!!!

Amigo vangodp no sabía que era para visual C++, pero me sirvió igual, funcionó!!!

Gracias como siempre campeón!!

Etiquetas: escaner, programa, puertos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:46.