Как получить список "жестких" IP адресов (IPv4) собственного ПК при отключенном сетевом кабеле?
Варианты получения адресов работают только при подключенном кабеле:
Dns.GetHostEntry().AddressList[]
Dns.Resolve().AddressList[]
Dns.GetHostAddresses()
ManagementClass("Win32_NetworkAdapterConfiguration").GetInstances()["IPAddress"]
По идее, Win32_NetworkAdapterConfiguration должен бы прочитать адрес из настроек,
но он при отключенном кабеле дает 0.0.0.0.
Есть некрасивый способ через реестр, но он может зависеть от варианта ОС.
30.01.08 14:30: Перенесено модератором из '.NET' — AndrewVK
Re: Как получить IP адрес своего ПК при оторванном LAN кабел
Здравствуйте, Интересующийся, Вы писали:
И>но он при отключенном кабеле дает 0.0.0.0.
Зависит от насторек системы... от каких именно — не могу сказать...
интереса для при выдернутом кабеле набери ipconfig /all в командной строке.. скорее всего он тоже 0.0.0.0 даст...
И>Есть некрасивый способ через реестр, но он может зависеть от варианта ОС.
И не факт, что получишь то, что надо...
В сторону: на самом деле надо брать именно те данные, которые система отдает... если она говорит 0.0.0.0 — значит так и должно быть...
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re: Как получить IP адрес своего ПК при оторванном LAN кабел
Здравствуйте, pt4h, Вы писали:
P>Не помогает, проверил на интерфейсе, который использует DHCP. Со статически заданным IP может сработает.
какой IP адрес ты хочешь узнать при отключеном интерфейсе? он выдается динамически при подключении.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[3]: Как получить IP адрес своего ПК при оторванном LAN ка
Здравствуйте, pt4h, Вы писали:
R>>skip
P>Не помогает, проверил на интерфейсе, который использует DHCP. Со статически заданным IP может сработает.
Так при DHCP конечно нет у нас адреса никакого, сервер раздающий адреса недоступен, и у нас нету адреса соответсвтенно.
По настройкам сетевой карты можжно узнавать у нас статический или динамический ИП, соответственно делать свою какую то логику разных случаях
Re[2]: Как получить IP адрес своего ПК при оторванном LAN ка
Здравствуйте, Hacker_Delphi, Вы писали:
H_D>интереса для при выдернутом кабеле набери ipconfig /all в командной строке.. скорее всего он тоже 0.0.0.0 даст...
Адреса вообще не дает. Просто говорит, что сеть отключена.
И>>Есть некрасивый способ через реестр, но он может зависеть от варианта ОС. H_D>И не факт, что получишь то, что надо... H_D>В сторону: на самом деле надо брать именно те данные, которые система отдает... если она говорит 0.0.0.0 — значит так и должно быть...
Может я ошибаюсь, похоже все обсуждаемые варианты (кроме реестра), дают адрес, получаемый через соединение.
Так как соединения нет из-за кабеля, то нет и IP адреса в ответе.
Но где-то же лежит настроенный статический IP адрес, присвоенный оператором для TCPIP интерфейса при работе с диалогом:
...Сеть-Свойства-Протокол Интернета(TCP/IP)-Использовать следующий IP адрес- IP адрес/Маска подсети/Основной шлюз
Как получить именно эти настройки? Ведь они сохраняются (в реестре?) независимо от подключенности кабеля.
Если интересно, могу рассказать, как получить кучу настроек (и IP адреса) из реестра. Неужели майкрософтовцы
так неуважают простых программистов?
Попробовал совет revgen-а через:
.GetIPGlobalProperties().NetworkInterface[].GetIPProperties().UnicastAddresses[].Address
результат тот же: Unicast отключенной карты = null.
Re[2]: Как получить IP адрес своего ПК при оторванном LAN ка
R>IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();
R>NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
R>foreach (NetworkInterface adapter in nics)
R>{
R> if (adapter.NetworkInterfaceType != NetworkInterfaceType.Loopback)
R> {
R> UnicastIPAddressInformationCollection uniCast = adapter.GetIPProperties().UnicastAddresses;
R> if (uniCast != null)
R> {
R> foreach (UnicastIPAddressInformation uni in uniCast)
R> {
R> //uni.Address - нужный нам адресс (может быть несколько)
R> }
R> }
R> }
R>}
R>
Проверил. При отключенном кабеле IP адрес (совсем) отсутствует.
Но ведь при отключенном кабеле сохраняется же где-то (в реестре?) статический IP адрес и т.п,
которые я задал в настройках:
...Сеть-Свойства-Протокол Интернета(TCP/IP)-Использовать следующий IP адрес- IP адрес/Маска подсети/Основной шлюз
Re[3]: Как получить IP адрес своего ПК при оторванном LAN ка
Здравствуйте, Интересующийся, Вы писали:
И>Но ведь при отключенном кабеле сохраняется же где-то (в реестре?) статический IP адрес и т.п, И>которые я задал в настройках: И>...Сеть-Свойства-Протокол Интернета(TCP/IP)-Использовать следующий IP адрес- IP адрес/Маска подсети/Основной шлюз
Попробуй рыть в реестре (у себя сеть отключить не могу -> поэтому проверить тоже не могу)
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\{AD8FA367-EDA4-4F46-AAAC-12B989044F20}]
"EnableDHCP"=dword:00000001
"DhcpIPAddress"="xxx.xxx.x.xx"
кучу всего
Название соединения как-то так (но не рыл глубоко)
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{AD8FA367-EDA4-4F46-AAAC-12B989044F20}\Connection]
"MediaSubType"=dword:00000001
"Name"="Local Area Connection 2"
Проверь будут ли при отключеном кабеле заполнены поля.
Ещё можно попробовать утилиту, но требует Админа
netsh interface ip show address "Local Area Connection 2"
Re[4]: Как получить IP адрес своего ПК при оторванном LAN ка
Здравствуйте, revgen, Вы писали:
R>Ещё можно попробовать утилиту, но требует Админа R>
R>netsh interface ip show address "Local Area Connection 2"
R>
netsh interface ip show address — дает IP адрес и без кабеля!
Здорово, хоть что-то сработало.
Только действительно, права доступа,
а также из приложения вызывать и разбирать ответ консоли...
R>Попробуй рыть в реестре (у себя сеть отключить не могу -> поэтому проверить тоже не могу)
У меня Windows XP Prof ServicePack2.
Эти записи реестра не зависят от наличия кабеля и по ним всегда можно
найти прописанный статический IP.
Получаем cписок интерфейсов — у меня их два (Гуиды 1,2)
Да нет, мой топик нес в себе тот смысл, что если система не дает тебе штатными средствами IP — не надо его искать как-то иначе. Все равно ты не сможешь с ним ничего полезного сделать. Win Server 2003 каким-то образом можно настроить, чтобы он не обрубал интерфейсы при отключении кабеля (и XP, соответственно тоже — тут у них все очень близко устроено). Я сам когда-то такое для своего сервера делал. А потом отказался от левых серверных продуктов и все теперь работает даже если отключать интерфейсы и снова включать — стандартные сетевые сервисы как-то это отлавливают и заово биндятся к интерфейсу.
Не надо искать настройки "кривыми" путями — тебе это не поможет.
P.S. Да, топик, неверное, надо в "Сети, сокеты, протоколы" перенести... к .Net прямого отношения он, похоже, не имеет....
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re: Как получить IP адрес своего ПК при оторванном LAN кабел
H_D>Да нет, мой топик нес в себе тот смысл, что если система не дает тебе штатными средствами IP — не надо его искать как-то иначе. Все равно ты не сможешь с ним ничего полезного сделать. Win Server 2003 каким-то образом можно настроить, чтобы он не обрубал интерфейсы при отключении кабеля (и XP, соответственно тоже — тут у них все очень близко устроено). Я сам когда-то такое для своего сервера делал. А потом отказался от левых серверных продуктов и все теперь работает даже если отключать интерфейсы и снова включать — стандартные сетевые сервисы как-то это отлавливают и заово биндятся к интерфейсу. H_D>Не надо искать настройки "кривыми" путями — тебе это не поможет.
=========================================================================
Основной смысл самого первого вопроса был (полностью согласен с Вами)
— поиск Штатного средства для определения IP адресов.
А моя задача состоит в следующем: Выдать пользователю
по возможности полный список его статических IP адресов,
окраске подключенных к сети, да еще и с учетом его
выбора в предыдущей сессии.
Все-таки я достану эти адреса из реестра (не будет их — и не надо)
— это хоть какая-то помощь операторам при привязке
сокетов к адресам (требование ТЗ).
Если интересно.
Я в C# использую непосредственно сокеты для клиента и сервера
с постоянным соединением (опять ТЗ). При этом обрыв кабеля от
ПК к ближайшему Хабу на 4-6 секунд не вызывает исключения в сокете.
При более длительных обрывах возникает исключение.
Обрыв кабелей после Хаба вызывает исключение через минуты.
Проверка соединения обеспечиваю периодической
посылкой меток жизни. Если есть возможность (подключили кабель)
— автоматически восстанавливаю соединение (ТЗ).
H_D>P.S. Да, топик, неверное, надо в "Сети, сокеты, протоколы" перенести... к .Net прямого отношения он, похоже, не имеет....
Наверное, туда. Меня интересовал доступ к настройкам, а система .Net его не дает.
А как насчет того, чтобы узлы карты тем были по Namespace 1 уровня.
Re[2]: Как получить IP адрес своего ПК при оторванном LAN ка
Здравствуйте, Fortnum, Вы писали:
F>Как вариант, если без реестра, отключить Media Sense. А дальше хоть через GetAdaptersInfo, хоть как.
Спасибо! Помогло.
Только пришлось пожертвовать исключениями, которые возбуждались сокетом при отключении кабеля.
А на других ПК пока боятся внедрять — там завязка на сокеты Oracle, может аукнутья.
Поэтому, буду искать еще...
Re: Как получить IP адрес своего ПК при оторванном LAN кабел
От:
Аноним
Дата:
30.01.08 17:37
Оценка:
а смысл в этом IP если ты на него даже сокет забиндить не сможешь?
а еще IP может измениться при подключении сети..
а еще IP может быть много и они все могут измениться
Re[2]: Как получить IP адрес своего ПК при оторванном LAN ка
Здравствуйте, Аноним, Вы писали:
А>а смысл в этом IP если ты на него даже сокет забиндить не сможешь? А>а еще IP может измениться при подключении сети.. А>а еще IP может быть много и они все могут измениться
В одном из ответов я неможко описал задачу (требования заказчика).
1.Произвести выбор оператором желаемых IP из списка настроек фиксированных IP в протоколах для сетевых карт,
с учетом подключенных кабелей и настроек оператора в предыдущем сеансе, а также после распространения настроек
оператора на другие ПК для других операторов.
2.Возможно, перенастроить фиксированные IP (факультативно).
3.Открыть сокеты с параметрами выбранных IP (+ портами) и организовать постоянные соединения для управления
устройствами.
Re: Как получить IP адрес своего ПК при оторванном LAN кабел