LINUX.ORG.RU

С++ Проверка доступа в интернет с помощью библиотеки curl


1

1

Добрый день! Не поскажете, какой-нибудь небольшой пример с использованием библиотеи curl для проверки наличия подключения к интернету. Например, можно ли как-то пропинговать ya.ru? Пробую запускать:

#include <string>^M
#include <iostream>
#include "curl/curl.h"

using namespace std;

static char errorBuffer[CURL_ERROR_SIZE];

static string buffer;^M

static int writer(char *data, size_t size, size_t nmemb, string *buffer)
{
 
  int result = 0;
  
  if (buffer != NULL)
  {
    buffer->append(data, size * nmemb);
   
    result = size * nmemb;
  }
  
  return result;
}

int main(void)
{
    CURL *curl;
    CURLcode result;
   
    curl = curl_easy_init();
  
    if (curl)
    {
      curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
     
      curl_easy_setopt(curl, CURLOPT_URL, "google.com");
    
      curl_easy_setopt(curl, CURLOPT_PROXY, "proxy:8080");
      
      curl_easy_setopt(curl, CURLOPT_HEADER, 1);
     
      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
     
      curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
    
      result = curl_easy_perform(curl);
     
      if (result == CURLE_OK)      
        cout << buffer << "\n";             
      else      
        cout << "Error! " << errorBuffer << endl;        
  }
Error! Couldn't resolve proxy 'proxy'


Ответ на: комментарий от anonymous

Например, пробую вот так

int main(void)^M
{
    CURL *curl;
    CURLcode result;
   
    curl = curl_easy_init();
    if (curl)
    {
      curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);http://google.com
      curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
      
   
      result = curl_easy_perform(curl);
      if (result == CURLE_OK)      
        cout << buffer << "\n";              
      else      
        cout << "Error! " << errorBuffer << endl;

Masha
() автор топика
Ответ на: комментарий от Masha
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD>
<BODY>
<FONT face="Helvetica">
<big><strong></strong></big><BR>
</FONT>
<blockquote>
<TABLE border=0 cellPadding=1 width="80%">
<TR><TD>
<FONT face="Helvetica">
<big>Access Denied (authentication_failed)</big>
<BR>
<BR>
</FONT>
</TD></TR>
<TR><TD>
<FONT face="Helvetica">
Your credentials could not be authenticated: "Credentials are missing.". You will not be permitted access until your credentials can be verified.
</FONT>
</TD></TR>
<TR><TD>
<FONT face="Helvetica">
This is typically caused by an incorrect username and/or password, but could also be caused by network problems.
</FONT>
</TD></TR>
<TR><TD>
<FONT face="Helvetica" SIZE=2>
<BR>
В случае возникновения проблем с доступом в Интернет просим обращаться в ServiceDesk.
</FONT>
</TD></TR>
</TABLE>
</blockquote>
</FONT>
</BODY></HTML>


Masha
() автор топика
Ответ на: комментарий от Masha

Может быть, есть какой-то еще простой способ на С++ (Linux) проверить наличие подключения к интернету.

Masha
() автор топика
Ответ на: комментарий от Masha

Может быть, есть какой-то еще простой способ на С++ (Linux) проверить наличие подключения к интернету.

Когда нужно было проверить доступность нашего внешнего сервера, за 5 минут накидал такое. Можешь изменить и попробовать, обрати внимание что вызовы здесь синхронные.

-(void)checkStatus
{
struct sockaddr_in servaddr;
struct servent* srvport;
int sd;
int port=80;

struct hostent* hp = gethostbyname(«127.0.0.1»);

if (!hp) {
NSLog(@«Error»);
return;
}

if ((sd=socket(PF_INET, SOCK_STREAM, 0))<0) {
NSLog(@«socket failed»);
return;
}

memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port=htons(port);
servaddr.sin_addr = *((struct in_addr*)hp->h_addr);

if (connect(sd, (struct sockaddr*)&servaddr, sizeof(servaddr))==0) {
srvport = getservbyport(htons(port), «tcp»);
}

}

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от ananas

а может, все-таки лучше курсы кройки и шитья?

Не-не, с такими данными делать что-то руками категорически противопоказано. Да и все равно ничего не получится.

Видно же, тут прямая дорога в менеджеры. Курсы MBA, и в Яндекс, руководить программистами С++ (Linux). Или там в Акронис. ТЗ писать, проводить собеседования, разрабатывать Архитектуру

anonymous
()
Ответ на: комментарий от Masha

Спасибо!А по 80 порту доступны все сервера? То есть, допустим, ya.ru тоже?

Обычно, да, но это просто пример был.

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от anonymous

На ЛОРе говно и хамьё. Уже и Маше хамят.

Вот в былые времена никто бы Сильви не хамил, хотя она тоже типичная ТП (ну и по совместительству man gcc)

lispfuerimmer
()

Маша, зафига вам курль. Смотрите, как сделан ping

lispfuerimmer
()

Например, можно ли как-то пропинговать ya.ru?

curl для этого лишний.

BattleCoder ★★★★★
()
Ответ на: комментарий от lispfuerimmer

Вот в былые времена никто бы Сильви не хамил, хотя она тоже типичная ТП (ну и по совместительству man gcc)

накидай-ка 20 тем от Сильви класса «у меня привет-мир не работает (Linux), разберите мне построчно»

Stil ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.