2013-04-03 44 views
10

Makinemin internet erişimi olup olmadığını C/C++ kullanarak programlı olarak nasıl kontrol edebilirim, sadece bir IP'ye ping atmak mı? NIC bunu nasıl yapıyor?Makinemin internet erişimi olup olmadığını kontrol edin

enter image description here

Ben

+0

Windows 7'de zaten bunu yapan bir hizmet var. Ağın internet bağlantısına sahip olduğunu bildirmek için görev çubuğu simgesi nasıl çalışır. –

+0

@EricUrban Windows, bunu bir DNS aramasının birleşimiyle yapmanın yanı sıra belirli bir IP'den bir belge talep etmek gibi görünüyor. Bkz. [Windows 7 Ağ Farkındalığı] (http://blog.superuser.com/2011/05/16/windows-7-network-awareness/). –

+0

@WesleyBaugh Bu doğru. –

cevap

11

, sadece, aşağıdaki kod çalışacaktır bu

#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

Kullanıcı internete bağlıysa ancak google'a erişemiyorsa, [bazı oldukça büyük ülkelerde] milyarlarca insan gibi (https://en.wikipedia.org/wiki/Google_China#Ending_of_self-censorship)? –

4

Bence o türden bir şey yok Windows 7 kullanıyorum, ancak bu deneyebilirsiniz: Ben böyle bir şey demek

kolay yolu çalışmaktır

Bilinen bir dış IP adresine bağlanın.

Windows'da başarısız olursa, connect işlevi SOCKET_ERROR ve WSAGetLastError genellikle WSAEHOSTUNREACH değerini döndürecektir (bu, paketin ana bilgisayara gönderilemeyeceği anlamına gelir).

Linux'ta bir -1, ve errno ENETUNREACH olacaktır. Bazı yararlı linkler: Windows üzerinde çalışan Eğer pencerelerde iseniz

1. Link for Windows Sockets

2. Link for Linux/Unix sockets

+2

Bir öneri olarak, yükü alabilen bir kaç "ünlü" DNS sunucusuna bağlanmayı deniyorum, "8.8.8.8" (google'ın genel DNS sunucusu). Birden fazla şirketten birden fazlasını yapın, böylelikle kısmi ağ arızasını (örneğin, aşağı inme gibi) algılayabilir ve kullanıcının aşağı ineceğini düşünürseniz bile (örneğin, İnternet erişimini zorlamasına izin verebilirsiniz) sadece sezgisel sorunlarınız olduğu için). Ayrıca, ne kadar bağlandığınıza dikkat etmeyi unutmayın - her saniyeyi kontrol etmek kaba değildir. Dahili test için, sahip olduğunuz IP adreslerini kullanın, böylece hata yaptığınızda ve spam yaptığınızda onu düzeltebilirsiniz. – Yakk

+1

Daha da iyisi: Genelde kendi sunucunuza erişmek için İnternet erişimine ihtiyacınız var. Önce bunu dene. Ancak bu başarısız olursa (8.8.8.8) ping yapmayı denemeniz gerekir, böylece kullanıcıya sunucunuzun veya İnternet bağlantınızın olup olmadığını söyleyebilirsiniz. – MSalters

0

deneyin:

#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

Orada aslında kod snip here dahil olmak üzere çok akıllı bir yoldur.

Temel olarak cmd seçeneğini kullanın: CMD'de iken: route print.

Bu, yönlendirme tablosunu bir diziyle eşleştirecek ve mevcut bir İnternet bağlantısı olarak 0.0.0.0 değerini arayacaktır.

I InternetCheckConnection() işlevi ek olarak, bir while(true){//the code in here } //check for inet connection , else will sleep for 10 mins and check again

İlgili konular