[ kukipei @ 19.01.2005. 22:49 ] @
Pozdrav

Da li neko zna kako se, iz programa,
moze utvrditi da li je kompjuter prikljucen na internet.

Peda.
[ Burgos @ 20.01.2005. 08:08 ] @
Recimo mozes pingovati neki server ili mozes koristiti WinAPI (pogledaj u dokumentaciji kako se radi))
[ kukipei @ 20.01.2005. 13:04 ] @
Postoji jedna funkcija za ispitivanje da li je racunar na mrezi:

InternetGetConnectedState

Medjutim, ukoliko je komjuter prikacen na lokalnu mrezu ova funkcija
vraca true, iako nema internet konekcije.
Takodje imam i jednu funkciju koja provera da li postoji veza preko modema,
a meni treba funkcija koja ce odrediti da je kompjuter na internetu bez
obzira na nacin povezivanja.

Sto se tice pingovanja servera ne znam kako to da uradim, pa ako
bi mogao neki primer...

Pozdrav!
[ Burgos @ 20.01.2005. 14:24 ] @
Pogledaj ovo
[ BaCkSpAcE @ 21.01.2005. 00:01 ] @
Ovo ti je jednostavnije (takodje sa http://www.codeguru.com):
Code:
#include "winsock2.h"

BOOL IsInternetConnection()
{
 char szHostName[128];

 BOOL bPrivateAdr = false; // Private Address area
 BOOL bClassA = false;     // Class A definition
 BOOL bClassB = false;     // Class B definition
 BOOL bClassC = false;     // Class C definition
 BOOL bAutoNet = false;    // AutoNet definition
 CString str;

 if (gethostname(szHostName, 128) == 0 )
 {
  // Get host adresses
  struct hostent * pHost;
  int i;
  UINT ipb;
  pHost = gethostbyname(szHostName);

  for (i = 0;
       pHost!= NULL && pHost->h_addr_list[i]!= NULL;
       i++ )
  {
   int j;
   str="";
   bClassA = bClassB = bClassC = false;
   for( j = 0; j < pHost->h_length; j++ )
   {
    CString addr;

    if( j > 0 )    str += ".";
    ipb = (unsigned int)((unsigned char*)pHost->h_addr_list[i])[j];

    // Define the IP range for exclusion
    if(j==0)
    {
     if(bClassA = (ipb == 10)) break; // Class A defined
     bClassB = (ipb == 172);
     bClassC = (ipb == 192);
     bAutoNet = (ipb == 169);
    }
    else if (j==1)
    {
     // Class B defined
     if(bClassB = (bClassB && ipb >= 16 && ipb <= 31)) break;

     // Class C defined
     if(bClassC = (bClassC && ipb == 168)) break;

     //AutoNet pasibility defined
     if(bAutoNet = (bAutoNet && ipb == 254)) break;
    }

    addr.Format("%u", ipb );
    str += addr;
   }
   // If any address of Private Address 
   // area has been found bPrivateAdr = true
   bPrivateAdr = bPrivateAdr || bClassA || bClassB || bClassC;

   // If any address of Internet Address area 
   // has been found returns TRUE
   if (!bClassA
   && !bClassB
   && !bClassC
   && !bAutoNet
   && str != "127.0.0.1"
   && !str.IsEmpty())
    return TRUE;
  }
 }

 if (bPrivateAdr)
 {
  // The system has IP address from Private Address
  // area,only. Internet from the computer can be accessable
  // via Proxy. If user turn on proxy connection flag, the
  // function believe Internet accessable.
  return bProxyConnection;
 }

 return false;
}
[ kukipei @ 23.01.2005. 22:33 ] @
Cini mi se da ni ova funkcija ne radi.

Uvek dobijam false.

Umesto bProxyConnection sam stavio true.
[ obranko @ 24.01.2005. 00:34 ] @
pozdrav,

mozda bi mogao da probas da koristis winsock da napravis konekciju ka nekom poznatom serveru. ako uspes, znaci na internetu si.
[ filmil @ 24.01.2005. 01:23 ] @
Citat:
mozda bi mogao da probas da koristis winsock da napravis konekciju ka nekom poznatom serveru. ako uspes, znaci na internetu si.
Mogu jedno glupo pitanje? Ako je računar priključen na LAN, a sam LAN nema vezu ka Internetu, da li se to računa kao postojanje veze ili ne?

Šta ako računar ima više mrežnih interfejsa?

Mislim da pitanje nije baš dobro postavljeno, a možda je jedno od sledeća dva:

1) Kako da ustanovim da postoji neki mrežni interfejs
2) Kako da ustanovim da li je računar „na internetu“.

IMHO, 2) uopšte nije definisano kako treba. Šta je to uopšte internet?

f
[ kukipei @ 27.01.2005. 23:17 ] @
Citat:
filmil: Ako je računar priključen na LAN, a sam LAN nema vezu ka Internetu, da li se to računa kao postojanje veze ili ne?


Ne racuna se.

Citat:
obranko
mozda bi mogao da probas da koristis winsock da napravis konekciju ka nekom poznatom serveru. ako uspes, znaci na internetu si.


U ovom slucaju ukoliko nema internet konekcije, pojavljuje se Dijalog za konekciju na internet, a ja zelim da to izbegnem.
[ filmil @ 28.01.2005. 08:21 ] @
Citat:
Citat:
filmil: Ako je računar priključen na LAN, a sam LAN nema vezu ka Internetu, da li se to računa kao postojanje veze ili ne?
Ne racuna se.
Zašto? Šta tačno određuje razliku između LAN-a i Interneta? Ako je lan veliki, ima recimo stotine računara?

f

[Ovu poruku je menjao filmil dana 28.01.2005. u 09:25 GMT+1]
[ filmil @ 28.01.2005. 08:22 ] @
Citat:
Citat:
obranko
mozda bi mogao da probas da koristis winsock da napravis konekciju ka nekom poznatom serveru. ako uspes, znaci na internetu si.
U ovom slucaju ukoliko nema internet konekcije, pojavljuje se Dijalog za konekciju na internet, a ja zelim da to izbegnem.
Ali to ne valja jer neće raditi u lokalnoj mreži na koju je priključen poznati server.

f
[ Dejan Lozanovic @ 28.01.2005. 08:27 ] @
evo mene sa jednim predlogom ;) uradis gethostbyname :) recimo od www.google.com ili neke druge adrese :) i ako dobijes IP adresu ti si na netu :) a u koliko dobijes error ;) nisi ;)
[ filmil @ 28.01.2005. 08:43 ] @
Citat:
evo mene sa jednim predlogom ;) uradis gethostbyname :) recimo od www.google.com ili neke druge adrese :) i ako dobijes IP adresu ti si na netu :) a u koliko dobijes error ;) nisi ;)
Ali rekao je da se ne računa ako je računar povezan na LAN. U guglovom LAN-u neće raditi.

Ne zakeram, nego samo hoću da pokažem da je „biti na Internetu“ loše definisan kriterijum i da ne može da se koristi za pravljenje programa. Jer — šta znači biti na internetu? Da se vidi google? Da li onda to znači da Internet pre gugla nije bio Internet? Ili da, ako Gugl propadne, Internet prestaje da bude Internet? Ili da nijedna mreža koja u sebi nema www.google.com nije internet?

Šta se dešava ako smo recimo povezani na provajdera kome je sasvim slučajno pao link? Da li to znači da smo na internetu ili ne? Jer iako se www.google.com ne vidi, postoji stotine računara koji se vide. U jedno doba bila je česta situacija da akademska mreža padne ili bude jako spora. http://www.yahoo.com se nije video, ali http://galeb.etf.bg.ac.yu se video i te kako — ali samo u okviru akademske mreže. Neko iz inostranstva nije mogao da ga vidi.

S druge strane, ako se to malo prepravi pa glasi: kako da proverim da li sa tog-i-tog računara mogu da se povežem na neki određeni server (npr. google.com ili mojserver.negde.tu), onda pitanje ima smisla i može da se da neki pametan savet. Ne mogu da zamislim da nekom programu treba da bude „povezan na Internet“, ali mogu da zamislim da programu treba da mu određeni računar bude dostupan.
[ salec @ 28.01.2005. 10:27 ] @
Citat:
filmil: Jer — šta znači biti na internetu? Da se vidi google? Da li onda to znači da Internet pre gugla nije bio Internet? Ili da, ako Gugl propadne, Internet prestaje da bude Internet? Ili da nijedna mreža koja u sebi nema www.google.com nije internet?


Pretpostavljam da sustinski razlozi koje si naveo ostaju na snazi i u tom slucaju, ali sta ako umesto www.google.com uzmemo www.w3c.org?
[ filmil @ 28.01.2005. 10:54 ] @
Citat:
Pretpostavljam da sustinski razlozi koje si naveo ostaju na snazi i u tom slucaju, ali sta ako umesto www.google.com uzmemo www.w3c.org?
Ništa se ne dešava. Priča ostaje potpuno ista. I veb konzorcijum je osnovan tek nakon pojave HTML-a i sličnih stvari, a Internet je opet postojao mnogo pre toga.

Čak ni root name serveri nisu dobri kandidati, pošto je i bez njih moguće dokačiti svaki računar kroz IP adresu (dakle ne po imenu).

Mislim da je jedini izlaz da OP kaže koji server ili koju grupu servera želi da vidi, pa da se prema tome i da odgovor.

Jer pitanje: „kako da utvrdim da je računar povezan na Internet“ može da znači bilo šta, zavisi kako definišeš povezanost:

1) Da računar koji ovde koristim koristi neki od protokola zasnovanih na IP-u (ovo je u moderno vreme skoro uvek ispunjeno pa je odgovor trivijalno da)
2) Da mogu da komuniciram pomoću IP-a sa ma kojim povezanim udaljenim računarom.
3) Da mogu da komuniciram pomoću IP-a sa nekim određenim računarom.
4) Da mogu da adresiram po imenu bilo koji povezani računar (u ovom slučaju se pitanje svodi na: da li mogu sa ovog računara da kontaktiram bar jedan root name server, odnosno da li ijedan od mojih DNS-ova može nekako da upita bar neki root DNS. U tom slučaju je odgovor na pitanje prilično težak zbog mogućih firewallova koji ne dozvoljavaju tebi lično da kontaktiraš root DNS-ove ali ti dopuštaju preko nekog DNS-a između itd itb).
5) Da mogu da komuniciram sa bilo kojim računarom (ovde je odgovor verovatno ne, pošto je nemoguće komunicirati sa bilo kojim računarom, recimo sa onim koji nema nijedan mrežni priključak ili je isključen sa napajanja, ili pokvaren ili šta ti ja znam).
6) popuniti po želji

f
[ Riste Pejov @ 28.01.2005. 13:32 ] @
A sta ako racunar je u mrezi iza firewall-a pa pristpu prema internety je preko HTTP/SOCKS proxy serverima ? Prema tvojot aplikaciji taj racunar nije vezan na internet.
[ salec @ 28.01.2005. 15:05 ] @
@filmil: Da, to je i meni bila prva pomisao (ali me je zaintrigiralo sta je to sto "veliki" Internet obavezno ima): "Internet" je za nekog podskup resursa povezanih na Internet koji namerava da koristi, a ostalo ga u principu ne zanima. Ako se tako postave stvari, onda je "povezanost na Internet" vidljivost nekog minimalnog skupa neophodnih resursa za rad aplikacije koja pita za povezanost.

Sa druge strane, ako je ta aplikacija server (u najsirem smislu te reci, npr. i firewall je server, jer opsluzuje napade), odnosno ona sama je resurs, onda imamo problem "gledanja u Mesec" ("kada vidis Mesec, pomisli na mene, mozda i ja gledam Mesec i mislim na tebe"), odnosno, sta je "svetionik" koji nam kaze da smo "na otvorenom moru"?
[ miro777 @ 01.02.2005. 13:40 ] @
Evo mala pomoc...batch datoteka

@ECHO OFF
ECHO Checking connection, please wait...
PING 194.109.6.66 | FIND "Reply from " > NUL
IF NOT ERRORLEVEL 1 ECHO You have an active connection to the internet
IF ERRORLEVEL 1 ECHO You have NO active connection to the internet



>
>
[ X Files @ 02.02.2005. 10:52 ] @
Postoji *puno* funkcija koje se *trude* da saznaju da li si na netu,
ali *n i j e d n a* ne moze da ti to zasigurno garantuje. Cudno, ali
istinito.

Ovo su rekli strucnjaci za sockete.
[ X Files @ 02.02.2005. 10:57 ] @
Ja licno koristim najjednostavniju varijantu:

bool IsConnectedToInternet()
{
ULONG FLAGS = INTERNET_CONNECTION_MODEM |
INTERNET_CONNECTION_LAN |
INTERNET_CONNECTION_PROXY;

return ( InternetGetConnectedState( &FLAGS, 0 ) );
}

... koja se uklapa u prethodnu tvrdnju.