Программно проверьте, имеет ли мой компьютер доступ к Интернету или нет.

Как я могу программным образом проверить, имеет ли мой компьютер доступ к Интернету или нет с помощью C/С++, это просто вопрос проверки IP? Как NIC это делает? Я имею в виду что-то вроде:

enter image description here

Я использую Windows 7.

Ответ 1

Если вы работаете в Windows, попробуйте это

#include <iostream>
#include <windows.h> 
#include <wininet.h>
using namespace std;

int main(){

if(InternetCheckConnection(L"http://www.google.com",FLAG_ICC_FORCE_CONNECTION,0))
{
        cout << "connected to internet";
}

return 0;
}

Ответ 2

Ничего подобного я не думаю, но вы можете попробовать следующее:

Самый простой способ - попытаться подключиться к известному внешнему IP-адресу.

Если в Windows это не удается, функция connect вернет SOCKET_ERROR, а WSAGetLastError обычно вернет WSAEHOSTUNREACH (это означает, что пакет не может быть отправлен на хост).

В Linux вы вернете -1, а errno будет ENETUNREACH. Некоторые полезные ссылки:

1. Ссылка для сокетов Windows

2. Ссылка для сокетов Linux/Unix

Ответ 3

В дополнение к функции InternetCheckConnection(), Win32 API имеет функцию (InternetGetConnectedState()), которая возвращает true/false для (доступности) некоторой формы подключения к Интернету:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa384702(v=vs.85).aspx

Он также сообщает вам, какой тип подключения к Интернету у вас есть (LAN, модем, прокси и т.д.), что часто может быть очень полезно знать.

Ответ 4

На самом деле есть очень умный способ, включая код snip здесь.

В основном используется опция cmd: при нажатии CMD: route print.

Это будет отображать таблицу маршрутизации с массивом и будет искать 0.0.0.0 в качестве доступного интернет-соединения.

Я использовал его с while(true){//the code in here } //check for inet connection , else will sleep for 10 mins and check again

Ответ 5

Следующий код будет работать, если вы находитесь в окнах:

#include <iostream>
#include <windows.h>

int main(){

  if (system("ping www.google.com")){
          std::cout<<"\nNot connnected to the internet\n\n";
  }
  else{
          std::cout<<"\nConnected to the internet\n\n";

  }
  system("pause");
  return 0;
}