Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> название активного интернет-соединения, как получить название интернет-соединен 
:(
    Опции темы
Гость_Den
  Дата 29.12.2004, 04:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите пожалуйста. Как получить название активного интернет-соединения. Т.е. не всех возможных настроенных соединений, а именно активного.
Заранее списибо. smile

название активного интернет-соединения.
  Вверх
Snowy
Дата 29.12.2004, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Они все активные, если соединение есть.
Винда, получая запрос начинает перебирать все соеденения по порядку. Какое выполнит запрос, с таким и работает. Можно одновременно быть соедененным с инетом, с локальной сетью и по модему сетью на работе. Любой запрос будет дан поочереди кождому интерфейсу, пока какой-нить его не выполнит.
Поэтому вывод такой:
1. Перебирать все соеденения по порядку и определять, какие из них активны.
2. Если интересует именно инет, то пробовать дать запрос к любому инетовскому серверу. Ping не всегда помогает. Поэтому надежней будет, например открывать 25-й порт на mail.ru
3. Если нигде не открылось, а такое может быть, если сидим за прокси, то берем первое по порядку соединение, если оно не 127.0.0.1, конечно.
PM MAIL   Вверх
Guest
  Дата 4.1.2005, 05:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо за отзыв, но Вы меня наверное не поняли.
Приведу пример:
В WinXP при подключении к интернет через модем (DialUp) появляется иконка с двумя моргающими мониторами. При двойном клике по этой иконке появляется окно, в зоголовке каторого написано: "Состояние xxxxxx", где xxxxxx - и есть нужное мне назвение.

Еще пример:
Кликпув Пуск - Панель упревления - Сети и подключение к интернету - Настройка подключения к интернету, появляется окно Свойства: Интернет. Так вот на вкладке подключения, в маленьком окощечке и есть желанные названия.

В общем-то само название и не столько нужно. Нужно просто знать по какому соединению сейчас вышел пользователь в интернет. Даже если это будут какие-либо идентификаторы этих соединений, все равно. smile
  Вверх
Snowy
Дата 4.1.2005, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата

В WinXP при подключении к интернет через модем (DialUp) появляется иконка с двумя моргающими мониторами. При двойном клике по этой иконке появляется окно, в зоголовке каторого написано: "Состояние xxxxxx", где xxxxxx - и есть нужное мне назвение.

А если у меня в свойствах сети сказано "показывать мониторчик", то при подключении по модему у меня их два - один сеть, другой модем.
Этих мониторчиков может быть и два и три. (в WinXP. в 9х их нет, но соединение есть).
По какому из них идет интернет... Этого не знает никто. Может не по какому, а может через все... Всякое бывает.

Что касается второго вопроса: Название соединения.
Список интерфейсов получить несложно. Примеров много. А вот название соединения, это вопрос посложней. Соединение - понятие абстрактное. На один интерфейс их может быть несколько.
В Win98 список соединений хранится в реестре, а в 2k/XP уже нет. Yandex тоже не знает...
Попробовал выяснить сам. Оказывается нигде... Видимо должны быть какие-то API функции, но я их не знаю.
Удалось выяснить, где винда хранит модемные соединеня:
E:\Documents and Settings\All Users\Application Data\Microsoft\Network\Connections\Pbk\rasphone.pbk
Это файл с модемными соединениями. Представляет собой обычный ini файл, что меня удивило. Зачем, спрашивается M$ придумали реестр? Что это? Возврат к прошлому?
Вобщем, если выбрать все строки, начинающиеся на '[' и заканчивающиеся на ']' из этого файла, то между строками как раз и будут названия подключений. Но какое из них активное для данного интерфейса, я не знаю.

Короче, как я понял, интересует, какое из подключений в данный момент использует модем.
А если инет через локалку?
Вобщем затыка в том, что активных подключений может быть несколько одновременно.
Список интерфейсов - пожалуйста, а "название активного подключения к интернет" - это не серъезно. Представь себе спутниковую тарелку, у которой исходящие запросы идут по модему, а входящий трафик через тарелку. Что здесь "активное интернет соединение?". А, если это еще идет и в локалку? Тогда у нас есть локальная сеть. А еще мы можем сюда же воткнуть WiFi и DSL и ... и всего у нас получится n-цать соединений, два из которых с инетом, остальные неизвестно с кем. Может через одно из них тоже можем выйти в инет через прокси запрос. Кто знает...
PM MAIL   Вверх
Akella
Дата 4.1.2005, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



а разве два соединения одновременно быть не может, если есть две сетевые, одна подключена непосредственно к модему (xDSL), а другая через LAN к другому компьютеру, который в свою очередь через другой модем тоже смотрит в инет.
Добавлено @ 17:17
Цитата
E:\Documents and Settings\All Users\Application Data\Microsoft\Network\Connections\Pbk\rasphone.pbk

этот файл у меня пуст (0 байт), т.к. соединение с инетом у меня через сетевую и xDSL
PM MAIL   Вверх
Snowy
Дата 5.1.2005, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Естественно пуст. Там только модемные соединения.
Но, как правило только модемный интерфейс имеет несколько соединение. Остальным интерфейсам как правило соответствует только одно соединение. Например для сетевой карты только "Соединение по локальной сети". Так что вопрос актуален только для модемов".
PM MAIL   Вверх
Poseidon
Дата 4.2.2005, 03:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Я опять остался непонят. Имеется ввиду DialUp соединения. Не чераз локалку, не тем более через спутник, а на прямую через дозвон до провайдера. Понятное дело, что должна быть какая-то функция, наврятли что бы Windows при соединении что-либо изменял, а при разъединении возвращал обратно. Хотя может что нибудь в реестре, но что?

О том, что эта функция существует говорит тот факт, что Windows-то понимает, какое соединение активно, потому как при щелчке по этим мониторчикам появляется окно с заголовком "Состояние xxxxxxxxx" (см. выше), но вот что это за функция?.. smile


PS. А про мониторчики в углу, так это же пример, что бы было понятно что требуется.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Snowy
Дата 4.2.2005, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Попробуй такой код:
Код

function ActiveRASConnection:string;
type
 TRasConn = record
   Size: DWORD;
   Handle: THandle;
   Name: array[0..20] of AnsiChar;
 end;
 TRasEnumConnections = function(var RasConn: TRasConn; var Size: DWORD;
   var Connections: DWORD): DWORD stdcall;
var
 Lib: HINST;
 RasEnumConnections: TRasEnumConnections;
 RasConn: TRasConn;
 Code, Size, Connections: DWORD;
begin
 result:='';
 try
   Lib := LoadLibrary('rasapi32.dll');
   try
     if Lib = 0 then Abort;
     RasEnumConnections := GetProcAddress(Lib, 'RasEnumConnectionsA');
     if not Assigned(@RasEnumConnections) then Abort;
     FillChar(RasConn, SizeOf(RasConn), 0);
     RasConn.Size := SizeOf(RasConn);
     Code := RasEnumConnections(RasConn, Size, Connections);
     if (Connections > 0) and (Code = 0) then result:=RasConn.Name;
   finally
     FreeLibrary(Lib);
   end;
 except
 end;
end;

Гарантировать, что работает не могу - модема нет, проверить никак.
Но вроде должно отработать корректно.
Возвращает пусто, если нет активных соединений, или имя активного соединения.
Сразу повторюсь, что таких соединений может быть несколько.
Если 2 модема одновременно законнектятся, ты увидишь имя только первого соединения.
Попробуешь - ответь, рабочий код или нет. Может еще кому понадобится.
PM MAIL   Вверх
Poseidon
Дата 4.2.2005, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Финкция компилируется, т.е. ошибок в коде нет, желаемого эффекта, впрочем, тоже. Почему не знаю, но возвращается пустая строка, при этом DialUp соединение присутствует. Т.е. функция по-просту не видит этого соединения. Но все равно спасибо. Видимо это вопрос из ряда риторических, но ответ узнать все равно хочется. Буду пробовать. smile


Это сообщение отредактировал(а) Poseidon - 4.2.2005, 21:18


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Girder
Дата 4.2.2005, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 4
Всего: 155





--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Poseidon
Дата 7.2.2005, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



smile ВОТ ОНО!!! Спасибо. Конечно не совсем то, но из этого можно достать то что требуется. А я то уже и подумывал, что эту задачу не решить. В каторый раз убеждаюсь, что это лучший форум. ОГРОМНОЙ спасибо Girder и за предоставленый код и за ссылку на него. Snowy также прими благодарность. smile


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0611 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.