Как получить IP адрес своего ПК при оторванном LAN кабеле?
От: Интересующийся Россия  
Дата: 28.01.08 07:35
Оценка:
Как получить список "жестких" 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 кабел
От: Hacker_Delphi Россия  
Дата: 28.01.08 11:48
Оценка:
Здравствуйте, Интересующийся, Вы писали:

И>но он при отключенном кабеле дает 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 кабел
От: revgen  
Дата: 28.01.08 12:24
Оценка:
Здравствуйте, Интересующийся, Вы писали:

И>Как получить список "жестких" IP адресов (IPv4) собственного ПК при отключенном сетевом кабеле?


Точно неуверен что при отколюченом кабеле поможет (возможности проверить счас нету), но думаю можно просто смотреть настройки сетевой карты


IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();

foreach (NetworkInterface adapter in nics)
{
   if (adapter.NetworkInterfaceType != NetworkInterfaceType.Loopback)
   {
         UnicastIPAddressInformationCollection uniCast = adapter.GetIPProperties().UnicastAddresses;
         if (uniCast != null)
         {
                foreach (UnicastIPAddressInformation uni in uniCast)
                {
                    //uni.Address  - нужный нам адресс (может быть несколько)
                }
        }
    }
}


Это только шаблон как получить, писал по памяти .
Re[2]: Как получить IP адрес своего ПК при оторванном LAN ка
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 28.01.08 12:26
Оценка:
Здравствуйте, revgen, Вы писали:

R>
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>


R>Это только шаблон как получить, писал по памяти .


Не помогает, проверил на интерфейсе, который использует DHCP. Со статически заданным IP может сработает.
Re[3]: Как получить IP адрес своего ПК при оторванном LAN ка
От: Ziaw Россия  
Дата: 28.01.08 13:11
Оценка:
Здравствуйте, pt4h, Вы писали:

P>Не помогает, проверил на интерфейсе, который использует DHCP. Со статически заданным IP может сработает.

какой IP адрес ты хочешь узнать при отключеном интерфейсе? он выдается динамически при подключении.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[3]: Как получить IP адрес своего ПК при оторванном LAN ка
От: revgen  
Дата: 28.01.08 13:17
Оценка:
Здравствуйте, pt4h, Вы писали:

R>>skip


P>Не помогает, проверил на интерфейсе, который использует DHCP. Со статически заданным IP может сработает.


Так при DHCP конечно нет у нас адреса никакого, сервер раздающий адреса недоступен, и у нас нету адреса соответсвтенно.
По настройкам сетевой карты можжно узнавать у нас статический или динамический ИП, соответственно делать свою какую то логику разных случаях
Re[2]: Как получить IP адрес своего ПК при оторванном LAN ка
От: Интересующийся Россия  
Дата: 29.01.08 06:46
Оценка:
Здравствуйте, 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 ка
От: Интересующийся Россия  
Дата: 29.01.08 07:01
Оценка:
Здравствуйте, revgen, Вы писали:

R>
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 ка
От: revgen  
Дата: 29.01.08 09:39
Оценка:
Здравствуйте, Интересующийся, Вы писали:

И>Но ведь при отключенном кабеле сохраняется же где-то (в реестре?) статический IP адрес и т.п,

И>которые я задал в настройках:
И>...Сеть-Свойства-Протокол Интернета(TCP/IP)-Использовать следующий IP адрес- IP адрес/Маска подсети/Основной шлюз


Попробуй рыть в реестре (у себя сеть отключить не могу -> поэтому проверить тоже не могу)

Нашел такие ветки:

Список всех сетевух
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\11]
"ServiceName"="{AD8FA367-EDA4-4F46-AAAC-12B989044F20}"
"Description"="Broadcom NetXtreme Gigabit Ethernet for hp"


По полученому Guid можно дальше смотреть:
[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 ка
От: Интересующийся Россия  
Дата: 29.01.08 12:29
Оценка:
Здравствуйте, 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)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\EAPOL\Parameters\General
"InterfaceList" = "\DEVICE\{7F583125-122F-4B36-B2D7-5A0319312A83}\DEVICE\{3CD17183-97FF-4A5B-8FCC-F627F8D37C15}"


По Гуидам находим IP адреса (один из них):
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\{Гуид1}\Parameters\Tcpip
"IPAddress"="xxx.xxx.xxx.21" - прописанный (статический)
"EnableDHCP"="0"




Спасибо всем за внимание!
Похоже, придется пользоваться реестром, зависящий от ОС.
Не заботятся МелкоСофтовцы о нашем брате.
Re[3]: Как получить IP адрес своего ПК при оторванном LAN ка
От: Hacker_Delphi Россия  
Дата: 29.01.08 14:21
Оценка:
Здравствуйте, Интересующийся, Вы писали:

Да нет, мой топик нес в себе тот смысл, что если система не дает тебе штатными средствами IP — не надо его искать как-то иначе. Все равно ты не сможешь с ним ничего полезного сделать. Win Server 2003 каким-то образом можно настроить, чтобы он не обрубал интерфейсы при отключении кабеля (и XP, соответственно тоже — тут у них все очень близко устроено). Я сам когда-то такое для своего сервера делал. А потом отказался от левых серверных продуктов и все теперь работает даже если отключать интерфейсы и снова включать — стандартные сетевые сервисы как-то это отлавливают и заово биндятся к интерфейсу.
Не надо искать настройки "кривыми" путями — тебе это не поможет.
P.S. Да, топик, неверное, надо в "Сети, сокеты, протоколы" перенести... к .Net прямого отношения он, похоже, не имеет....
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re: Как получить IP адрес своего ПК при оторванном LAN кабел
От: Fortnum  
Дата: 29.01.08 16:48
Оценка: 2 (1)
И>Как получить список "жестких" IP адресов (IPv4) собственного ПК при отключенном сетевом кабеле?

Как вариант, если без реестра, отключить Media Sense. А дальше хоть через GetAdaptersInfo, хоть как.
Re[4]: Как получить IP адрес своего ПК при оторванном LAN ка
От: Интересующийся Россия  
Дата: 30.01.08 08:52
Оценка:
Здравствуйте, Hacker_Delphi, Вы писали:


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 ка
От: Интересующийся Россия  
Дата: 30.01.08 14:26
Оценка:
Здравствуйте, Fortnum, Вы писали:

F>Как вариант, если без реестра, отключить Media Sense. А дальше хоть через GetAdaptersInfo, хоть как.


Спасибо! Помогло.
Только пришлось пожертвовать исключениями, которые возбуждались сокетом при отключении кабеля.
А на других ПК пока боятся внедрять — там завязка на сокеты Oracle, может аукнутья.
Поэтому, буду искать еще...
Re: Как получить IP адрес своего ПК при оторванном LAN кабел
От: Аноним  
Дата: 30.01.08 17:37
Оценка:
а смысл в этом IP если ты на него даже сокет забиндить не сможешь?
а еще IP может измениться при подключении сети..
а еще IP может быть много и они все могут измениться
Re[2]: Как получить IP адрес своего ПК при оторванном LAN ка
От: Интересующийся Россия  
Дата: 31.01.08 06:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а смысл в этом IP если ты на него даже сокет забиндить не сможешь?

А>а еще IP может измениться при подключении сети..
А>а еще IP может быть много и они все могут измениться
В одном из ответов я неможко описал задачу (требования заказчика).
1.Произвести выбор оператором желаемых IP из списка настроек фиксированных IP в протоколах для сетевых карт,
с учетом подключенных кабелей и настроек оператора в предыдущем сеансе, а также после распространения настроек
оператора на другие ПК для других операторов.
2.Возможно, перенастроить фиксированные IP (факультативно).
3.Открыть сокеты с параметрами выбранных IP (+ портами) и организовать постоянные соединения для управления
устройствами.
Re: Как получить IP адрес своего ПК при оторванном LAN кабел
От: Интересующийся Россия  
Дата: 12.02.08 13:18
Оценка:
По долгому размышлению пришли с ребятами к решению брать IP из реестра.

Здесь сидят узлы с ГУИДом на конце, характеризующие адаптеры (сколько адаптеров — столько ГУИДОВ):
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Adapters\{Гуид1}
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Adapters\{Гуид2}
...


Теперь ищем узлы с ГУИДами, соответствующими ГУИДам адаптеров:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Гуид1}
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{Гуид2}
...


В найденных узлах достаем параметр "IPAddress".

Решение работает и проверено на операционках:
Windows Server 2003 
Windows XP Prof SP2 
Windows Vista Home Premium
Windows Vista Business
Re: Как получить IP адрес своего ПК при оторванном LAN кабел
От: Аноним  
Дата: 23.02.08 16:28
Оценка:
Здравствуйте, Интересующийся, Вы писали:

И>Как получить список "жестких" IP адресов (IPv4) собственного ПК при отключенном сетевом кабеле?


при включенном можно узнать, например http://adultfriendfinder.com/ сразу whois сообщает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.