2013-04-03 1 views
10

내 컴퓨터가 인터넷에 액세스 할 수 있는지 또는 C/C++을 사용하지 않는지 프로그래밍 방식으로 확인할 수 있습니까? IP에 핑하는 것입니까? NIC는 어떻게합니까?내 컴퓨터가 인터넷에 액세스 할 수 있는지 여부를 프로그래밍 방식으로 확인하십시오.

enter image description here

내가

+0

Windows 7에는 이미이 작업을 수행하는 서비스가 있습니다. 작업 표시 줄 아이콘이 작동하여 네트워크에 인터넷 연결이 있음을 알려줍니다. –

+0

@EricUrban Windows는 DNS 조회와 특정 IP의 문서 요청을 조합하여 처리합니다. [Windows 7 네트워크 인식] (http://blog.superuser.com/2011/05/16/windows-7-network-awareness/)을 참조하십시오. –

+0

@WesleyBaugh 정확합니다. –

답변

11

, 그냥, 다음 코드는 작동이

#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; 
} 
+1

사용자가 인터넷에 연결되어 있지만 Google에 액세스 할 수없는 경우 (예 : 많은 국가에있는 10 억 명 중 한 명) (https://en.wikipedia.org/wiki/Google_China#Ending_of_self-censorship)? –

4

내가 생각하는 그런 종류의 아무것도 없습니다 윈도우 7을 사용하고 있지만, 당신이 시도 할 수 있습니다 : 내가 좋아하는 뭔가를 의미

가장 쉬운 방법은 시도하는 것입니다

알려진 외부 IP 주소에 연결하십시오.

Windows에서 오류가 발생하면 connect 함수는 SOCKET_ERROR을 반환하고 WSAGetLastError은 보통 WSAEHOSTUNREACH (패킷을 호스트로 보낼 수 없음을 의미)을 반환합니다.

리눅스에서는 -1이 다시 표시되며 errno는 ENETUNREACH이됩니다. 몇 가지 유용한 링크 : Windows에서 작업하는 경우이 창에 있다면

1. Link for Windows Sockets

2. Link for Linux/Unix sockets

+2

제안으로, 나는'8.8.8.8' (google의 공개 DNS 서버)와 같은로드를 취할 수있는 소수의 "유명한"DNS 서버에 연결하려고합니다. 둘 이상의 회사에서 둘 이상을 수행하면 일부 네트워크 실패 (예 : Google 다운)를 감지하고 사용자가 다운되었다고 생각하는 경우에도 사용자가 "인터넷 액세스를 강제하도록"허용 할 수 있습니다 (즉, 단지 당신의 경험주의가 문제를 가지고 있기 때문에). 또한 얼마나 많은 연결을 할 수 있는지 기억하십시오 - 1 초마다 점검하는 것은 무례합니다. 내부 테스트의 경우 소유 한 IP 주소를 사용하십시오. 그러면 망칠 때와 스팸으로 고칠 수 있습니다. – Yakk

+1

더 나은 방법 : 일반적으로 자신의 서버에 액세스하려면 인터넷 액세스가 필요합니다. 먼저 해봐. 그것이 실패한 경우 (드물게)'8.8.8.8'을 핑 (ping)하려고하면 서버 또는 다운 된 인터넷 연결인지 여부를 사용자에게 알릴 수 있습니다. – MSalters

0

시도 :

#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; 
} 
1

코드 스 니프 here을 포함하여 실제로 매우 현명한 방법입니다.

기본적으로 cmd 옵션을 사용합니다. CMD를 사용 중일 때 : route print입니다.

이렇게하면 라우팅 테이블이 배열로 매핑되어 사용 가능한 인터넷 연결로 0.0.0.0을 찾습니다.

내가 InternetCheckConnection() 함수에 추가하여 while(true){//the code in here } //check for inet connection , else will sleep for 10 mins and check again

관련 문제