Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

Как узнать, что комп подклю чился к интернету?   Найти похожие ветки 

 
l.a_ ©   (2004-11-20 12:05) [0]

Как узнать, что комп подклю чился к интернету?


 
VMcL ©   (2004-11-20 12:33) [1]

Для начала нужно определиться с понятием "подключился к интернету".


 
Piter ©   (2004-11-20 14:55) [2]

Ага, даже так - надо определиться с понятием "интернет" - что это такое?


 
Sicilla ©   (2004-11-20 15:01) [3]

Просто надо посмотреть на tray, и запустить у себя таймер на часах


 
Anatoly Podgoretsky ©   (2004-11-20 15:14) [4]

Piter ©   (20.11.04 14:55) [2]
С этим нет проблем, Интернет (Сеть) это сеть сетей.


 
Piter ©   (2004-11-20 15:34) [5]

Sicilla ©   (20.11.04 15:01) [3]

правда? А вот у меня в трее горит значок подключения к локальной сети. Это как, считается теперь что я в интернете?


 
Anatoly Podgoretsky ©   (2004-11-20 15:35) [6]

Нет это подключение к локальной сети


 
Piter ©   (2004-11-20 15:36) [7]

Anatoly Podgoretsky ©   (20.11.04 15:14) [4]
С этим нет проблем, Интернет (Сеть) это сеть сетей


каких сетей? Вот моя локальная сеть является интернетом?


 
Verg ©   (2004-11-20 15:39) [8]

Ну, одним словом, кроме понятия присутствия Default GateWay у компа ничего пока на ум не приходт. Хотя можно пробовать отпрвить "почту на чистом Delphi" и если это удасться, то комп скорее в Интернете, чем вне его :)

Насчет Default GateWay. Игрушка:

program BestInt;

{$APPTYPE CONSOLE}

uses
 Windows,
 WinSock,
 SysUtils, WinInet;

const
 MAX_INTERFACE_NAME_LEN  = 256;
 MAX_TRANSPORT_NAME_LEN  = 40;
 MAX_MEDIA_NAME          = 16;
 MAX_PORT_NAME           = 16;
 MAX_DEVICE_NAME         = 128;
 MAX_PHONE_NUMBER_LEN    = 128;
 MAX_DEVICETYPE_NAME     = 16;
 MAXLEN_IFDESCR          = 256;
 MAXLEN_PHYSADDR         = 8;

 MIB_IF_TYPE_OTHER              = 1;
 MIB_IF_TYPE_ETHERNET           = 6;
 MIB_IF_TYPE_TOKENRING          = 9;
 MIB_IF_TYPE_FDDI               = 15;
 MIB_IF_TYPE_PPP                = 23;
 MIB_IF_TYPE_LOOPBACK           = 24;
 MIB_IF_TYPE_SLIP               = 28;

type
   TMIB_IFROW = record
           wszName : array[0..MAX_INTERFACE_NAME_LEN-1] of widechar;
           dwIndex,
           dwType,
           dwMtu,
           dwSpeed,
           dwPhysAddrLen : DWORD;
           bPhysAddr : array[0..MAXLEN_PHYSADDR-1] of BYTE;
           dwAdminStatus,
           dwOperStatus,
           dwLastChange,
           dwInOctets,
           dwInUcastPkts,
           dwInNUcastPkts,
           dwInDiscards,
           dwInErrors,
           dwInUnknownProtos,
           dwOutOctets,
           dwOutUcastPkts,
           dwOutNUcastPkts,
           dwOutDiscards,
           dwOutErrors,
           dwOutQLen,
           dwDescrLen : DWORD;
           bDescr : array[0..MAXLEN_IFDESCR-1] of BYTE;
end;
PMIB_IFROW = ^TMIB_IFROW;

var
 NotifyOverlapped : TOverlapped;
 IFRow : TMIB_IFROW;
 S : string;
 NFH : THandle;
 Res : DWORD;
 EndFlag : boolean;

function GetBestInterface(
 dwDestAddr : DWORD;     // destination IP address
 var pdwBestIfIndex : DWORD // index of interface with the best route
) : DWORD; stdcall; external "IPHLPAPI.DLL";

function GetIfEntry(var pIfRow : TMIB_IFROW ): DWORD; stdcall; external "IPHLPAPI.DLL";

function NotifyRouteChange(var Handle : THandle;
                          var overlapped : TOverlapped
                         ):DWORD; stdcall; external "IPHLPAPI.DLL";

function CtrlHandler(dwCtrlType : DWORD):BOOL; stdcall;
begin
 Result := BOOL(true);
 EndFlag := true;
 SetEvent(NotifyOverlapped.hEvent);
end;

function ToOem(const S : string):string;
begin
 Result := S;
 if Result<>"" then
   CharToOemBuff(pchar(Result), pchar(Result), length(Result));
end;

procedure PrintErr(Err : DWORD; Wt : boolean);
begin
 Writeln(ToOem(SysErrorMessage(Err)));
 if Wt then ReadLn;
end;

procedure CheckResult( Res : DWORD);
begin
 if Res <> NO_ERROR then
 begin
   PrintErr(Res, true);
   halt(0);
 end;
end;

begin
 Writeln(S);
 ZeroMemory(@NotifyOverLapped, sizeof(NotifyOverLapped));
 NotifyOverLapped.hEvent := CreateEvent(nil, true, false, nil);
 EndFlag := false;
 SetConsoleCtrlHandler(@CtrlHandler, LongBool(TRUE));
 repeat
   ZeroMemory(@IFRow, sizeof(IFRow));
   if GetBestInterface(INADDR_ANY, IFRow.dwIndex ) <> NO_ERROR then
     writeln(ToOem("Default gateway отсутствует"))
   else begin
      CheckResult( GetIfEntry(IFRow) );
      case IFRow.dwType of
        MIB_IF_TYPE_OTHER     : S:= "OTHER";
        MIB_IF_TYPE_ETHERNET  : S:= "ETHERNET";
        MIB_IF_TYPE_TOKENRING : S:= "TOKENRING";
        MIB_IF_TYPE_FDDI      : S:= "FDDI";
        MIB_IF_TYPE_PPP       : S:= "PPP";
        MIB_IF_TYPE_LOOPBACK  : S:= "LOOPBACK";
        MIB_IF_TYPE_SLIP      : S:= "SLIP";
      else
        S:="UNKNOWN"
      end;
      writeln(ToOem("Default gateway доступен через интерфейс типа "+S)," (",IFRow.dwSpeed,"bps)");
   end;
   Res := NotifyRouteChange(NFH, NotifyOverlapped);
   if Res <> ERROR_IO_PENDING then
     CheckResult( Res );
   if not EndFlag then
   if WaitForSingleObject(NotifyOverlapped.hEvent, INFINITE) <> WAIT_OBJECT_0 then
   begin
     PrintErr(GetLastError, true);
     break;
   end;
 until EndFlag;
 Closehandle(NotifyOverlapped.hEvent);
 Writeln("Game over");
end.


 
Anatoly Podgoretsky ©   (2004-11-20 15:46) [9]

Piter ©   (20.11.04 15:36) [7]
Нет поскольку она олна, то она не может быть Inter, а только Net
Более того, если есть более одной взаимодействующей локальной сети, то тоже не Inter, а Intra


 
Piter ©   (2004-11-20 18:14) [10]

Anatoly Podgoretsky ©   (20.11.04 15:46) [9]
Нет поскольку она олна, то она не может быть Inter, а только Net
Более того, если есть более одной взаимодействующей локальной сети, то тоже не Inter, а Intra


ок. А вот моя локальная сеть через роутер соединена с другой локальной сетью. А в той локальной сети есть NAT, который одним своим интерфейсом подключен к роутеру компании tochka.ru - при этом пропускает этот роутер только IP пакеты с портом назначения 80. Так что - я в интернете или нет? И моя локальная сеть является частью интернета или как?

Вообщем, я бы так ответил на поставленный вопрос - узнать в интернете ты или нет - невозможно, это слишком глобальная задача, ответ на которую никому на самом деле не нужен, просто вопрос поставлен некорректно. Скорее всего, человеку нужно проверить доступность того или иного сетевого ресурса, а это другое дело. Например, программа обращается на свой сайт в поисках новой версии. На данную постановку вопроса ответить можно.

Нужно просто следить за списком доступных интерфейсов - если там произошло какое-то изменение - попытаться достучаться до своего сайта/сервера. Получится - сделать то, что нужно. Не получилось - дальше отслеживать. При этом неважно есть ли доступ к "интернету" или нет. Возможно, доступ есть, но твой сайт в дауне, для программы это аналогично тому, что интернета нету, потому что весь интернет сошелся для нее только на одном сервере. Или например, выхода нет, но  нужный сервер распологается в локальной сети какого-то хостер-провайдера... Варианты различны, перебирать их не имеет смысла. Нужно просто попытаться обратиться туда, куда хочешь. Признаком того, что стоит сделать очередную попытку в частности является добавление нового интерфейса. Хотя и это не панацея, допустим в сети может быть прокси, который не работат - соответственно "интернета" нет. А тут пришел админ и починил прокси - интернет появился, да только на клиенте это никак прочувствовать невозможно, пока не попробуешь. Тут наверное только можно по таймеру предложить опрашивать...


 
Anatoly Podgoretsky ©   (2004-11-20 19:11) [11]

Как только тебе доступны ресурсы из глобальной Сети, так сразу можешь говорить, что у тебя есть соединение с ней. И определяется это не через какое то мифическое соединение, а именно через доступность ресурсов глобальной сети. Частный случай когда скажем доступен только один ресурс, скажем одна единственная страница, а у меня есть такие рабочие места, с которых доступен только один единственный сайт. То есть доступ есть но толькло до одного ресурса. И о какой проверки речь не может идти, поскольку если подключение идет через локальную сеть или прокси, то считается что подключение постоянное и нечего проверять, а в случае с модемом тоже нельзя говорить о подключении к Интернет, а только о подключение к локальной сети провайдера или его маршрутизатору, а далее все то, что сказал про ресурсы. И только в одном случае можно говорить о подключении к Сети, это когда она напрямую подключается к единственному комьютеру, в этом случае имеется глобальный, а не локальный адрес. Все остальное от лукавого.


 
Verg ©   (2004-11-20 19:18) [12]


> [10] Piter ©   (20.11.04 18:14)


Знал бы ты СКОЛЬКО перетерто по этому поводу, на этом сайте, в этом только форуме на ЭТУ тему.
При виде вопроса "Как опредлить, что подключен к Интернету" у многих завсегдатаев начинаются спазмальгические реакции (кроме все остальных, типа изжога и т.п.), граничащие с истерическим нервным хохотом.... заканчивающиеся, как правило в последнее время, гробовым молчанием...


 
Piter ©   (2004-11-20 19:33) [13]

Verg ©   (20.11.04 19:18) [12]
Знал бы ты СКОЛЬКО перетерто по этому поводу, на этом сайте, в этом только форуме на ЭТУ тему


почему ты считаешь, что я не знаю? Я на этом сайте года три где-то... не меньше


 
Verg ©   (2004-11-20 19:47) [14]


> [13] Piter ©   (20.11.04 19:33)
> почему ты считаешь, что я не знаю? Я на этом сайте года
> три где-то... не меньше


Ну что, начнем в "лучших традициях"?
Типа, а почему ты считаешь., что я считаю, что ты считаешь....?

Сказочку про белого бычка....?


 
Anatoly Podgoretsky ©   (2004-11-20 19:48) [15]

Piter ©   (20.11.04 19:33) [13]
Ну тогда ты провокатор :-)


 
Piter ©   (2004-11-20 19:50) [16]

Anatoly Podgoretsky ©   (20.11.04 19:11) [11]
Как только тебе доступны ресурсы из глобальной Сети, так сразу можешь говорить, что у тебя есть соединение с ней


хм. Ок, так вот если сайт www.some.ru находится в локальной сети моего провайдера, к которой я имею доступ, но из-за неоплаты отключен от прокси сервера провайдера... в данной ситуации можно считать что я подключен к интернету?

То есть, я имею доступ к одному сайту и по вашей логике можно считать, что я подключен к интернету?!


 
Piter ©   (2004-11-20 19:52) [17]

Verg ©   (20.11.04 19:47) [14]
Ну что, начнем в "лучших традициях"?
Типа, а почему ты считаешь., что я считаю, что ты считаешь....?


чего ты завелся? Я просто уточних, что хорошо знаю насколько часто этот вопрос поднимается здесь...


 
Anatoly Podgoretsky ©   (2004-11-20 19:55) [18]

Просто есть две сети

сеть и Сеть, так вот первая это локальная, а вторая это Сеть (если говорить по английски, они ее так называют, с большой буквы).


 
Verg ©   (2004-11-20 19:56) [19]


> [17] Piter ©   (20.11.04 19:52)
> Verg ©   (20.11.04 19:47) [14]
> Ну что, начнем в "лучших традициях"?
> Типа, а почему ты считаешь., что я считаю, что ты считаешь....?
>
> чего ты завелся?


Да сегодня-то, я спокоен КАК Удав :))


 
Anatoly Podgoretsky ©   (2004-11-20 20:02) [20]

Anatoly Podgoretsky ©   (20.11.04 19:55) [18]
Может не совсем понятно, не все знают английский
internet и Internet


 
Piter ©   (2004-11-20 22:09) [21]

Anatoly Podgoretsky ©   (20.11.04 19:55) [18]
Просто есть две сети


Понимаю. Но вы не ответили на вопрос:

Piter ©   (20.11.04 19:50) [16]
То есть, я имею доступ к одному сайту и по вашей логике можно считать, что я подключен к интернету?!



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.031 c
14-1105682399
Hogo
2005-01-14 08:59
2005.02.06
транслировать из Harbour в Delphi


6-1101207633
Dmitrij_K
2004-11-23 14:00
2005.02.06
Куки


1-1106221314
Dimedrol
2005-01-20 14:41
2005.02.06
Как записать XLS-файл ?


1-1106643951
ShotGuN
2005-01-25 12:05
2005.02.06
Как делать патчи?


4-1103122941
Александер
2004-12-15 18:02
2005.02.06
Общение с окном чужого приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский