Есть интернет или нету интернету?
От: Gambler  
Дата: 29.11.01 09:13
Оценка:
Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало

Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?
-------------------------------------------------------------------

Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
Re: Есть интернет или нету интернету?
От: Vodka  
Дата: 29.11.01 09:24
Оценка:
Здравствуйте Gambler, Вы писали:


G>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало


G>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?


Эта проблема решается комплексно.
Во-первых, надо определить тип соединения (Постоянное(LAN) и коммутируемое (Dial-Up)).
В зависимости от этого действовать по разному. Для постоянного соединения можно что-ли пропинговать.
Для dial-up сложнее. В Explorer может быть выставлен флаг, что предлагать законектится при первом обращении к Internet. Там надо действовать как-то по другому....
Да ещё и файрволы по пути могут попаться

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

P.S. Если мне не изменяет склероз, то подобная проблема частично (или полностью) решена в продуктах комании ztrace (www.ztrace.com)
Re: Есть интернет или нету интернету?
От: TSS Россия http://www.sdl.ru
Дата: 29.11.01 09:31
Оценка:
Здравствуйте Gambler, Вы писали:


G>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало


G>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?


Попробуй воспользоваться следующим:
--- cut ---
InternetGetConnectedState Function

Retrieves the connected state of the local system.

BOOL InternetGetConnectedState(
    LPDWORD lpdwFlags,
    DWORD dwReserved
);

Parameters

lpdwFlags
[out] Pointer to an unsigned long integer variable where the connection description should be returned. This can be a combination of the following values:
INTERNET_CONNECTION_CONFIGURED
Local system has a valid connection to the Internet, but it may or may not be currently connected.
INTERNET_CONNECTION_LAN
Local system uses a local area network to connect to the Internet.
INTERNET_CONNECTION_MODEM
Local system uses a modem to connect to the Internet.
INTERNET_CONNECTION_MODEM_BUSY
No longer used.
INTERNET_CONNECTION_OFFLINE
Local system is in offline mode.
INTERNET_CONNECTION_PROXY
Local system uses a proxy server to connect to the Internet.
INTERNET_RAS_INSTALLED
Local system has RAS installed.

dwReserved
[in] Reserved. Must be set to zero.

Return Value
Returns TRUE if there is an Internet connection, or FALSE otherwise.

Function Information

Stock Implementation wininet.dll
Custom Implementation No
Header Wininet.h
Import library Wininet.lib
Minimum availability Internet Explorer 4.0
Minimum operating systems Windows NT 4.0, Windows 95, Windows CE 2.12

--- cut ---
Signed, [TSS] /SDL/
Re: Есть интернет или нету интернету?
От: Lexey Россия  
Дата: 29.11.01 09:45
Оценка:
Здравствуйте Gambler, Вы писали:


G>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало


G>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?


Вообще-то в ICQ эта задача на самом деле не решена. ICQ требует сначала задать тип подключения — LAN или Dial-Up.
Для LAN она вообще не мониторит соединение, для Dial-Up можно юзать функции типа RASEnumConnections и RASGetConnectionStatus.

Чтобы проверить, есть ли реальное подключение к интету, все равно придется обращаться к какому-нибудь ресурсу, т.к. и LAN и dial-up могут быть локальными.
Re[2]: Есть интернет или нету интернету?
От: Vodka  
Дата: 29.11.01 09:48
Оценка:
Здравствуйте TSS, Вы писали:

TSS>Здравствуйте Gambler, Вы писали:



G>>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало


G>>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?


TSS>Попробуй воспользоваться следующим:

TSS>--- cut ---
TSS>InternetGetConnectedState Function

TSS>Retrieves the connected state of the local system.


К сожалению, она не всегда работает. Это здесь (кажется) уже обсуждалось.
Re: Есть интернет или нету интернету?
От: KoraK Россия http:\\none.ru
Дата: 29.11.01 09:51
Оценка:
Здравствуйте Gambler, Вы писали:


G>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало


G>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?


Сорри, но мне не понятен вопрос — "Подключен ли к интернету ?"
Если нужен доступ к чему-то определенному, (ICQ Server) то можно тривиально попингать этот сервер.

Реализация пинга где-то на этом форуме проскакивала.
Re[2]: Есть интернет или нету интернету?
От: Vodka  
Дата: 29.11.01 10:10
Оценка:
Здравствуйте KoraK, Вы писали:


KK>Сорри, но мне не понятен вопрос — "Подключен ли к интернету ?"

KK>Если нужен доступ к чему-то определенному, (ICQ Server) то можно тривиально попингать этот сервер.

KK>Реализация пинга где-то на этом форуме проскакивала.


Если Dial-Up и стоит автопоключении к Internet, то при потытке пинговать выскочит окошечко от Explorer

Тут, как я понял, стоит задача сделать всё незаменто. Только вот где это может пригодится ,
если что-то делается в тайне от пользователя ?
Re: Есть интернет или нету интернету?
От: Lokki Зимбабве  
Дата: 29.11.01 19:13
Оценка:
Здравствуйте Gambler, Вы писали:


G>Вопрос, как определить подключён ли компьютер к сети, горячо обсуждался на codeguru, но к сожалению ничего толкового не получилось, кроме совершенно безумных советов попытатся законнектится к microsoft.com предварительно исправив в реестре свойство автоматического набора номера, что бы не выскакивало :)


G>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?

Для nt/2000
ipconfig /all
если что-то скажет — а потом сам додумаешь =)
Re[2]: Есть интернет или нету интернету?
От: Gambler  
Дата: 30.11.01 13:11
Оценка:
Здравствуйте Lokki, Вы писали:


G>>Ето нибудь знает как это сделано скажем в ICQ, я имею ввиду как узнать подключён к инету или нет без connect(), и чтоб незаметно для пользователя?

L>Для nt/2000
L>ipconfig /all
L>если что-то скажет — а потом сам додумаешь =)

Т.е. предлагается забрать output отпарсить его и т.д.?
Вот спасибо, до этого бы уж точно не додумался
-------------------------------------------------------------------

Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
Re[2]: Есть интернет или нету интернету?
От: nikita1  
Дата: 30.11.01 14:16
Оценка:
Здравствуйте KoraK, Вы писали:

KK>Сорри, но мне не понятен вопрос — "Подключен ли к интернету ?"

KK>Если нужен доступ к чему-то определенному, (ICQ Server) то можно тривиально попингать этот сервер.
Только тут есть одно НО — ping может не сработать, если ему дали неверный адрес, например в адресе www.microsoft.com забыли букву "t".
Или если пингуемый сервер отключен, или недоступен по какой-то еще другой причине. Короче говоря, ping вернет ошибку, но это НЕ означает, что Интернет недоступен.
Re[3]: Есть интернет или нету интернету?
От: Vodka  
Дата: 30.11.01 14:25
Оценка:
Здравствуйте nikita1, Вы писали:

N>Здравствуйте KoraK, Вы писали:


KK>>Сорри, но мне не понятен вопрос — "Подключен ли к интернету ?"

KK>>Если нужен доступ к чему-то определенному, (ICQ Server) то можно тривиально попингать этот сервер.
N>Только тут есть одно НО — ping может не сработать, если ему дали неверный адрес, например в адресе www.microsoft.com забыли букву "t".
N>Или если пингуемый сервер отключен, или недоступен по какой-то еще другой причине. Короче говоря, ping вернет ошибку, но это НЕ означает, что Интернет недоступен.

А что значит "Интернет недоступен"? Это что за зверь такой ? Может быть недоступен один из серверов интернета (в том числе и сервер провайдера). Ну а в интернет лезут обычно с в полне определенными целями, а значит на вполне определенный адрес.
Re: Есть интернет или нету интернету?
От: IgoX Россия  
Дата: 01.12.01 13:26
Оценка:
Здравствуйте Gambler, Вы писали:

RasEnumConnection()
InternetGetConnectedState()
InternetCheckConnection()
Re[2]: Есть интернет или нету интернету?
От: Sooker  
Дата: 16.04.02 07:54
Оценка:
Здравствуйте KoraK, Вы писали:

KK>Здравствуйте Gambler, Вы писали:


KK>Если нужен доступ к чему-то определенному, (ICQ Server) то можно тривиально попингать этот сервер.


KK>Реализация пинга где-то на этом форуме проскакивала.


А если стоит FireWall то пингом ты неичего не добъешься... Фигу тебе ответ прийдет.
----------------------
Одно из свойств человеческого ума состоит в том, что, сталкиваясь с противоречием, он не может оставаться пассивным.
Э. Фромм.
Re[3]: Есть интернет или нету интернету?
От: Aquila http://www.wasm.ru
Дата: 16.04.02 08:50
Оценка:
TSS>>Попробуй воспользоваться следующим:
TSS>>InternetGetConnectedState Function
TSS>>Retrieves the connected state of the local system.
V>К сожалению, она не всегда работает. Это здесь (кажется) уже обсуждалось.

Есть еще такая функция (но мне неизвестно, насколько хорошо она работает) :

InetIsOffline
Determines whether or not the system is connected to the Internet.

BOOL InetIsOffline(
DWORD dwFlags,
);

Parameters
dwFlags
Input flags for the function. This must be set to zero.
Return Value
Returns TRUE if the local system is not currently connected to the Internet. Returns FALSE if the local system is connected to the Internet or if no attempt has yet been made to connect to the Internet.

Requirements
Version 4.00 and later of Shell32.dll

Windows NT/2000: Requires Windows NT 4.0 or later.
Windows 95/98/Me: Requires Windows 95 or later.
Header: Declared in intshcut.h.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.