Форум: "Система";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];
ВнизOnline/Offline Найти похожие ветки
← →
Groove_ (2002-12-11 19:41) [0]Как узнать: в онлайне комп или нет и если в онлайне, какой у него ип? Заранее спасибо
← →
xyz (2002-12-12 01:57) [1]сперва узнать ИП
(или через компонент или через функцию, к-х до фига не сайте)
а потом если ип 127.0.0.1 - то подключения нет
← →
Groove_ (2002-12-12 09:36) [2]А если ип например от локальной сети (у меня например 192.168.100.104 - локальный, а в инете 10.10.8.54)
как узнать когда комп находится в инете??
← →
Ihor Osov'yak (2002-12-13 01:20) [3]Хвилософский вопрос, однако... А что такое инет и где он начинается? К примеру - вот соединился я с провайдером через дайлап, а от него канал, что далее в мир, лежит... В инете я или не в инете?
Имхо, самое верное решение - пинговать какой-то уделенный сервер, что работает постоянно, тот же microsoft.com...
А чтобы при пинге не вылезла дайлап-дозвонка, если сидим на дайлате, то можно для начала поюзать что-то типа InternetGetConnectedState...
Я, к примеру, юзаю такой модулек:
unit uInetTools;
interface
uses
Windows, WinInet;
type
TConDescription = ( cdModem, { Local system uses a modem to connect to the Internet }
cdLan, { Local system uses a local area network to connect to the Internet }
cdUsesProxy, { Local system uses a proxy server to connect to the Internet }
cdModemBusy, { not used }
cdRasInstalled, { Local system has RAS installed }
cdOffline, { Local system is in offline mode }
cdConfigured { Local system has a valid connection to the Internet,
but it may or may not be currently connected }
);
TConDescriptions = set of TConDescription;
function inet_IsConnected: boolean; overload;
function inet_IsConnected(var ConDes: TConDescriptions): boolean; overload;
function inet_IsConnected(var ConDes: TConDescriptions; var sConName : string): boolean; overload;
implementation
uses
Sysutils
,classes
;
const
{ these are already defined into WinInet.pas }
//INTERNET_CONNECTION_MODEM = 1;
//INTERNET_CONNECTION_LAN = 2;
//INTERNET_CONNECTION_PROXY = 4;
//INTERNET_CONNECTION_MODEM_BUSY = 8;
{ from the W2K SDK }
INTERNET_RAS_INSTALLED = $10;
INTERNET_CONNECTION_OFFLINE = $20;
INTERNET_CONNECTION_CONFIGURED = $40;
const
winetdll = "wininet.dll";
{ from the W2K SDK }
function InternetGetConnectedStateEx(lpdwFlags: LPDWORD;
lpszConnectionName: LPSTR;
dwNameLen: DWORD;
dwReserved: DWORD): BOOL;
stdcall; external winetdll name "InternetGetConnectedStateExA";
function inet_IsConnected: boolean;
var
dwConnectionTypes : DWORD;
begin
dwConnectionTypes := 0;
Result := InternetGetConnectedState(@dwConnectionTypes, 0);
end;
function inet_IsConnected(var ConDes: TConDescriptions): boolean;
// Description : detects an internet connection
// returns the connection description into the ConDes
var
S : string;
begin
Result := inet_IsConnected(ConDes, S);
end;
function inet_IsConnected(var ConDes: TConDescriptions; var sConName : string): boolean;
var
dwCTp : DWORD;
Buffer : array[0..MAX_PATH - 1] of char;
begin
dwCTp := 0;
Result := InternetGetConnectedStateEx(@dwCTp, Buffer, Sizeof(Buffer)-1, 0);
if Result then sConName := StrPas(Buffer);
ConDes := [];
if ( (dwCTp and INTERNET_CONNECTION_CONFIGURED ) > 0 )
then Include(ConDes, cdConfigured );
if ( (dwCTp and INTERNET_CONNECTION_LAN ) > 0 )
then Include(ConDes,cdLan);
if ( (dwCTp and INTERNET_CONNECTION_MODEM ) > 0 )
then Include(ConDes, cdModem );
if ( (dwCTp and INTERNET_CONNECTION_OFFLINE ) > 0 )
then Include(ConDes,cdOffline );
if ( (dwCTp and INTERNET_CONNECTION_PROXY ) > 0 )
then Include(ConDes,cdUsesProxy );
if ( (dwCTp and INTERNET_RAS_INSTALLED ) > 0 )
then Include(ConDes,cdRasInstalled);
end;
end.
← →
Rouse_ (2002-12-13 01:44) [4]> xyz © (12.12.02 01:57)
> а потом если ип 127.0.0.1 - то подключения нет
В корне не верно (не хочу обидеть), это раз, второе, прочитайте статью на форуме, о определении состояния подключения, очень, кстати, грамотно расписанно, в третьих можно воспользоваться примером Ihor Osov"yak © (13.12.02 01:20), но, даже на вскидку данный пример не будет давать верный результат в очень многих случаях.
Желаю успехов
← →
Ihor Osov'yak (2002-12-13 02:10) [5]2 Rouse_ © (13.12.02 01:44)
> не будет давать верный результат в очень многих случаях.
Дык я говорил, сначала так, чтобы не нарватся на подымающийся дайлап (ибо когда разрешен автодозвон и работаем по дайлапу то при пинге дозвон активизируется), а потом если эти функции сказали OK - пинговать чего-то далекое .... (для меня это может быть Москва, для Вас - майкрософт).. Внимательно читайте весь постинг ...
← →
Delphi5.01 (2003-01-07 04:25) [6]A zachem paritsa?
Uses winSock
Function GetLocalIP: String;
type
TaPInAddr = Array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: Array[0..63] of Char;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
Result:=inet_ntoa(pptr^[0]^);
WSACleanup;
end;
← →
Alex Konshin (2003-01-07 09:32) [7]2 Groove_ : У тебя не может быть адрес в интернете = 10.10.8.54
Итак, где же у тебя интернет?
← →
Black Rawen (2003-01-07 11:10) [8]Это не провайдерский IPшник, а прокся, как я понял...
← →
Anatoly Podgoretsky (2003-01-07 11:23) [9]Может и провайдерский, они часто выдают клиентам адреса своей локальной сети
← →
Groove_ (2003-01-07 14:03) [10]вы правы.. это прокси... Delphi5.01 хороший код привёл .. я им и воспользовался :)
← →
grab3 (2003-01-07 19:19) [11]А если проверять подключение к какому нибудь серверу, например microsoft.com(:-)), или сразу к нескольким серверам. Ведь IP может меняться даже если подключаться и не к инету.
← →
?! (2003-01-07 19:50) [12]хммм ... а если я (страшный админ) дал возможность юзерам работать только через WinGate прокси ?
как ты буш вычислять имя прокси ? а если в настройках IE у юзера лажа написана, и он ими не пользуется ? ;-))
(ногами не пинать - уже перехожу на нормальный FreeBSD :-)
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c