![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать, что комп подклю чился к интернету?
l.a_ © (2004-11-20 12:05:00)Как узнать, что комп подклю чился к интернету?
Piter (2004-11-20 22:09:00) [1]Anatoly Podgoretsky © (20.11.04 19:55) [18]
Просто есть две сети
Понимаю. Но вы не ответили на вопрос:
Piter © (20.11.04 19:50) [16]
То есть, я имею доступ к одному сайту и по вашей логике можно считать, что я подключен к интернету?!
Anatoly Podgoretsky (2004-11-20 20:02:00) [2]Anatoly Podgoretsky © (20.11.04 19:55) [18]
Может не совсем понятно, не все знают английский
internet и Internet
Verg (2004-11-20 19:56:00) [3]
> [17] Piter © (20.11.04 19:52)
> Verg © (20.11.04 19:47) [14]
> Ну что, начнем в "лучших традициях"?
> Типа, а почему ты считаешь., что я считаю, что ты считаешь....?
>
> чего ты завелся?
Да сегодня-то, я спокоен КАК Удав :))
Anatoly Podgoretsky (2004-11-20 19:55:00) [4]Просто есть две сети
сеть и Сеть, так вот первая это локальная, а вторая это Сеть (если говорить по английски, они ее так называют, с большой буквы).
Piter (2004-11-20 19:52:00) [5]Verg © (20.11.04 19:47) [14]
Ну что, начнем в "лучших традициях"?
Типа, а почему ты считаешь., что я считаю, что ты считаешь....?
чего ты завелся? Я просто уточних, что хорошо знаю насколько часто этот вопрос поднимается здесь...
Piter (2004-11-20 19:50:00) [6]Anatoly Podgoretsky © (20.11.04 19:11) [11]
Как только тебе доступны ресурсы из глобальной Сети, так сразу можешь говорить, что у тебя есть соединение с ней
хм. Ок, так вот если сайт www.some.ru находится в локальной сети моего провайдера, к которой я имею доступ, но из-за неоплаты отключен от прокси сервера провайдера... в данной ситуации можно считать что я подключен к интернету?
То есть, я имею доступ к одному сайту и по вашей логике можно считать, что я подключен к интернету?!
Anatoly Podgoretsky (2004-11-20 19:48:00) [7]Piter © (20.11.04 19:33) [13]
Ну тогда ты провокатор :-)
Verg (2004-11-20 19:47:00) [8]
> [13] Piter © (20.11.04 19:33)
> почему ты считаешь, что я не знаю? Я на этом сайте года
> три где-то... не меньше
Ну что, начнем в "лучших традициях"?
Типа, а почему ты считаешь., что я считаю, что ты считаешь....?
Сказочку про белого бычка....?
Piter (2004-11-20 19:33:00) [9]Verg © (20.11.04 19:18) [12]
Знал бы ты СКОЛЬКО перетерто по этому поводу, на этом сайте, в этом только форуме на ЭТУ тему
почему ты считаешь, что я не знаю? Я на этом сайте года три где-то... не меньше
Verg (2004-11-20 19:18:00) [10]
> [10] Piter © (20.11.04 18:14)
Знал бы ты СКОЛЬКО перетерто по этому поводу, на этом сайте, в этом только форуме на ЭТУ тему.
При виде вопроса "Как опредлить, что подключен к Интернету" у многих завсегдатаев начинаются спазмальгические реакции (кроме все остальных, типа изжога и т.п.), граничащие с истерическим нервным хохотом.... заканчивающиеся, как правило в последнее время, гробовым молчанием...
Anatoly Podgoretsky (2004-11-20 19:11:00) [11]Как только тебе доступны ресурсы из глобальной Сети, так сразу можешь говорить, что у тебя есть соединение с ней. И определяется это не через какое то мифическое соединение, а именно через доступность ресурсов глобальной сети. Частный случай когда скажем доступен только один ресурс, скажем одна единственная страница, а у меня есть такие рабочие места, с которых доступен только один единственный сайт. То есть доступ есть но толькло до одного ресурса. И о какой проверки речь не может идти, поскольку если подключение идет через локальную сеть или прокси, то считается что подключение постоянное и нечего проверять, а в случае с модемом тоже нельзя говорить о подключении к Интернет, а только о подключение к локальной сети провайдера или его маршрутизатору, а далее все то, что сказал про ресурсы. И только в одном случае можно говорить о подключении к Сети, это когда она напрямую подключается к единственному комьютеру, в этом случае имеется глобальный, а не локальный адрес. Все остальное от лукавого.
Piter (2004-11-20 18:14:00) [12]Anatoly Podgoretsky © (20.11.04 15:46) [9]
Нет поскольку она олна, то она не может быть Inter, а только Net
Более того, если есть более одной взаимодействующей локальной сети, то тоже не Inter, а Intra
ок. А вот моя локальная сеть через роутер соединена с другой локальной сетью. А в той локальной сети есть NAT, который одним своим интерфейсом подключен к роутеру компании tochka.ru - при этом пропускает этот роутер только IP пакеты с портом назначения 80. Так что - я в интернете или нет? И моя локальная сеть является частью интернета или как?
Вообщем, я бы так ответил на поставленный вопрос - узнать в интернете ты или нет - невозможно, это слишком глобальная задача, ответ на которую никому на самом деле не нужен, просто вопрос поставлен некорректно. Скорее всего, человеку нужно проверить доступность того или иного сетевого ресурса, а это другое дело. Например, программа обращается на свой сайт в поисках новой версии. На данную постановку вопроса ответить можно.
Нужно просто следить за списком доступных интерфейсов - если там произошло какое-то изменение - попытаться достучаться до своего сайта/сервера. Получится - сделать то, что нужно. Не получилось - дальше отслеживать. При этом неважно есть ли доступ к "интернету" или нет. Возможно, доступ есть, но твой сайт в дауне, для программы это аналогично тому, что интернета нету, потому что весь интернет сошелся для нее только на одном сервере. Или например, выхода нет, но нужный сервер распологается в локальной сети какого-то хостер-провайдера... Варианты различны, перебирать их не имеет смысла. Нужно просто попытаться обратиться туда, куда хочешь. Признаком того, что стоит сделать очередную попытку в частности является добавление нового интерфейса. Хотя и это не панацея, допустим в сети может быть прокси, который не работат - соответственно "интернета" нет. А тут пришел админ и починил прокси - интернет появился, да только на клиенте это никак прочувствовать невозможно, пока не попробуешь. Тут наверное только можно по таймеру предложить опрашивать...
Anatoly Podgoretsky (2004-11-20 15:46:00) [13]Piter © (20.11.04 15:36) [7]
Нет поскольку она олна, то она не может быть Inter, а только Net
Более того, если есть более одной взаимодействующей локальной сети, то тоже не Inter, а Intra
Verg (2004-11-20 15:39:00) [14]Ну, одним словом, кроме понятия присутствия 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.
Piter (2004-11-20 15:36:00) [15]Anatoly Podgoretsky © (20.11.04 15:14) [4]
С этим нет проблем, Интернет (Сеть) это сеть сетей
каких сетей? Вот моя локальная сеть является интернетом?
Anatoly Podgoretsky (2004-11-20 15:35:00) [16]Нет это подключение к локальной сети
Piter (2004-11-20 15:34:00) [17]Sicilla © (20.11.04 15:01) [3]
правда? А вот у меня в трее горит значок подключения к локальной сети. Это как, считается теперь что я в интернете?
Anatoly Podgoretsky (2004-11-20 15:14:00) [18]Piter © (20.11.04 14:55) [2]
С этим нет проблем, Интернет (Сеть) это сеть сетей.
Sicilla (2004-11-20 15:01:00) [19]Просто надо посмотреть на tray, и запустить у себя таймер на часах
Piter (2004-11-20 14:55:00) [20]Ага, даже так - надо определиться с понятием "интернет" - что это такое?