Форум: "Сети";
Текущий архив: 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.048 c