Comprobar conexion a internet desde c

Iniciado por iberodjmx@hotmail.es, 5 Octubre 2012, 03:34 AM

0 Miembros y 1 Visitante están viendo este tema.

iberodjmx@hotmail.es

Buenas noches he estado buscadole y la verdad no he logrado mucho soy nuevo en el foro y a veces un poco de ayuda se agradece, sucede que necesito programar un cliente en c que pueda comprobar la conexion a un sitio web en internet por algun puerto ej. 80, el host donde se ejecutara el cliente puede que tenga o no conexion por proxy por lo que de manera opcional se pondriasn en un archivo datos como son host proxy, puerto, usuario y contrasenia, si alguin pudiera orientarme en como poder lograr esto.

Como dato adicional estoy trabajando en un entorno windows 7.
Saludos y desde ya gracias

anonimo12121

Código (cpp) [Seleccionar]
system("ping www.google.com -n 1000");
Los puertos no se pero con esto sabes el ping de alguna ip
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

xiruko

#2
para hacer eso deberias aprender sobre sockets. no uso windows, pero quizas este codigo te deje un idea de lo que hay que hacer:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>

#define PORT 80
#define IP "127.0.0.1"

void error(char* message);

int main() {

int sockfd;
struct sockaddr_in serverAddr;
struct in_addr *pServerAddr=NULL;

//estructura del server
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_port=htons(PORT);
serverAddr.sin_family=AF_INET;
pServerAddr=&(serverAddr.sin_addr);
inet_aton(IP, pServerAddr);

//se declara el socket
sockfd=socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR: No se pudo abrir el socket.\n");

//se conecta con el servidor
if (connect(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0)
error("ERROR: No se pudo conectar con el servidor.\n");

printf("Conexion establecida con %s por el puerto %d\n", IP, PORT);

//...

close(sockfd);
return 0;
}

void error(char* message) {

perror(message);
exit(1);
}


un saludo!

edito: para decir que en el caso que uses este codigo y no tengas un servidor web montado en tu ordenador, la salida del programa sera:


ERROR: No se pudo conectar con el servidor.
: Connection refused


o algo parecido. en cambio, si por ejemplo pones la ip de google.es (173.194.34.23), la salida del programa sera que se ha establecido conexion con el servidor. asi que te serviria para saber si una direccion ip tiene montada un servidor web o no.

iberodjmx@hotmail.es

Lesc omparto el codigo de lo que ya tengo:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

char SendBuff[512],RecvBuff[512];

int main(int argc, char *argv[]){
 
  WSADATA wsaData;
  SOCKET conn_socket;
  struct sockaddr_in server;
  struct hostent *hp;
  int resp;
 
  //Inicializamos la DLL de sockets
  resp=WSAStartup(MAKEWORD(1,0),&wsaData);
  if(resp){
    printf("Error al inicializar socket\n");
    getchar();return -1;
  }

  //Obtenemos la IP del servidor... en este caso
  // localhost indica nuestra propia máquina...
  hp=(struct hostent *)gethostbyname("10.x.x.x");

  if(!hp){
    printf("No se ha encontrado servidor...\n");
    getchar();WSACleanup();return WSAGetLastError();
  }

  // Creamos el socket...
  conn_socket=socket(AF_INET,SOCK_STREAM, 0);
  if(conn_socket==INVALID_SOCKET) {
    printf("Error al crear socket\n");
    getchar();WSACleanup();return WSAGetLastError();
  }
   
  memset(&server, 0, sizeof(server)) ;
  memcpy(&server.sin_addr, hp->h_addr, hp->h_length);
  server.sin_family = hp->h_addrtype;
  server.sin_port = htons(3128);

  // Nos conectamos con el servidor...
  if(connect(conn_socket,(struct sockaddr *)&server,sizeof(server)) == SOCKET_ERROR){
    printf("Fallo al conectarse con el servidor\n");
    closesocket(conn_socket);
    WSACleanup();getchar();return WSAGetLastError();
  }
  printf("Conexión establecida con: %s\n", inet_ntoa(server.sin_addr));
  strcpy(SendBuff,"connect");
  //Enviamos y recibimos datos...
  printf("Enviando Mensaje... \n");
  send(conn_socket,SendBuff,sizeof(SendBuff),0);
  printf("Datos enviados: %s \n", SendBuff);
 
  printf("Recibiendo Mensaje... \n");
  recv(conn_socket,RecvBuff, sizeof(RecvBuff), 0);
  printf("Datos recibidos: %s \n", RecvBuff);
 
  getchar();
 
  // Cerramos el socket y liberamos la DLL de sockets
  closesocket(conn_socket);
  WSACleanup();
  return EXIT_SUCCESS;
}



y con el cual lo que he logrado establecer la conexion con el servidor sin embargo una vez conectado hay que hacer una autenticacion en caso de que exista, mi pregunta es como consigo eso con c++ ya que como podran ver es codigo c++.

En la parte que dice:


printf("Enviando Mensaje... \n");
send(conn_socket,SendBuff,sizeof(SendBuff),0);


Creo que en la instruccion send es donde tendria que ir alguna instruccion como login: nombredeusuario \n password: micontrasenia y ahora si hacer peticiones de conexion a algun sitio web, la idea seria lograr la autenticacion una vez conectados al servidor proxy.

Saludos y gracias por sus aportaciones,

0xDani

Cita de: iberodjmx@hotmail.es en  5 Octubre 2012, 19:19 PM
Lesc omparto el codigo de lo que ya tengo:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

char SendBuff[512],RecvBuff[512];

int main(int argc, char *argv[]){
 
  WSADATA wsaData;
  SOCKET conn_socket;
  struct sockaddr_in server;
  struct hostent *hp;
  int resp;
 
  //Inicializamos la DLL de sockets
  resp=WSAStartup(MAKEWORD(1,0),&wsaData);
  if(resp){
    printf("Error al inicializar socket\n");
    getchar();return -1;
  }

  //Obtenemos la IP del servidor... en este caso
  // localhost indica nuestra propia máquina...
  hp=(struct hostent *)gethostbyname("10.x.x.x");

  if(!hp){
    printf("No se ha encontrado servidor...\n");
    getchar();WSACleanup();return WSAGetLastError();
  }

  // Creamos el socket...
  conn_socket=socket(AF_INET,SOCK_STREAM, 0);
  if(conn_socket==INVALID_SOCKET) {
    printf("Error al crear socket\n");
    getchar();WSACleanup();return WSAGetLastError();
  }
   
  memset(&server, 0, sizeof(server)) ;
  memcpy(&server.sin_addr, hp->h_addr, hp->h_length);
  server.sin_family = hp->h_addrtype;
  server.sin_port = htons(3128);

  // Nos conectamos con el servidor...
  if(connect(conn_socket,(struct sockaddr *)&server,sizeof(server)) == SOCKET_ERROR){
    printf("Fallo al conectarse con el servidor\n");
    closesocket(conn_socket);
    WSACleanup();getchar();return WSAGetLastError();
  }
  printf("Conexión establecida con: %s\n", inet_ntoa(server.sin_addr));
  strcpy(SendBuff,"connect");
  //Enviamos y recibimos datos...
  printf("Enviando Mensaje... \n");
  send(conn_socket,SendBuff,sizeof(SendBuff),0);
  printf("Datos enviados: %s \n", SendBuff);
 
  printf("Recibiendo Mensaje... \n");
  recv(conn_socket,RecvBuff, sizeof(RecvBuff), 0);
  printf("Datos recibidos: %s \n", RecvBuff);
 
  getchar();
 
  // Cerramos el socket y liberamos la DLL de sockets
  closesocket(conn_socket);
  WSACleanup();
  return EXIT_SUCCESS;
}



y con el cual lo que he logrado establecer la conexion con el servidor sin embargo una vez conectado hay que hacer una autenticacion en caso de que exista, mi pregunta es como consigo eso con c++ ya que como podran ver es codigo c++.

En la parte que dice:


printf("Enviando Mensaje... \n");
send(conn_socket,SendBuff,sizeof(SendBuff),0);


Creo que en la instruccion send es donde tendria que ir alguna instruccion como login: nombredeusuario \n password: micontrasenia y ahora si hacer peticiones de conexion a algun sitio web, la idea seria lograr la autenticacion una vez conectados al servidor proxy.

Saludos y gracias por sus aportaciones,

Diria que es codigo C, no C++...

Y para autentificarte supongo que debe haber un protocolo o algo...

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM