Определение IP-адресов сетевых карт и сетевых устройств с помощью Windows API - PullRequest
3 голосов
/ 28 июля 2011

Я использую код Microsoft, чтобы узнать, как обнаружить IP-адреса карт и устройств:

http://msdn.microsoft.com/en-us/library/aa365949%28v=VS.85%29.aspx

Я заметил странное поведение.

  1. У меня есть система с двумя сетевыми картами;один подключен к Интернету, а другой - к сетевому устройству.Когда я запускаю пример кода, он всегда будет давать IP-адрес для карты, имеющей подключение к Интернету, но другая карта будет иметь вид 127.0.0.1 с маской подсети 255.0.0.0, если только я не подключил устройство Ethernetи работает.Но у карты должен быть IP-адрес по умолчанию, действительно ли она подключена к чему-либо, верно?Как я могу изменить этот код для его обнаружения?

  2. Обнаружен третий IP-адрес, который выглядит как пустые данные.Я попробовал это на другом компьютере с одним сетевым соединением, и он также обнаружил второе, несуществующее соединение.Каждый раз это соединение имеет IP-адрес 127.0.0.1 и маску подсети 255.0.0.0.Что это означает?

  3. Учитывая демо-код, будет ли легко отредактировать его, чтобы можно было обнаружить IP-адреса устройств в сети, к которым подключена любая карта?Я действительно просто хочу определить IP-адрес, на который настроено одно устройство Ethernet.Устройство напрямую подключено к карте.Причина, по которой я хочу это сделать, заключается в том, что устройство и карта, очевидно, не играют хорошо, когда их подсети разные, и я хочу определить, когда это так.

Спасибо!

R

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Этот адрес 127.0.0.1 не является адресом другой карты.Это адрес петлевого адаптера - виртуальный IP-адрес, который может отправлять и получать данные только сам по себе.Другой сетевой адаптер (который не подключен к сети) просто отсутствует в таблице адресов.

Возможно, вы просто захотите вызвать GetAdapterAddresses и отфильтровать все адаптеры с IFType IF_TYPE_SOFTWARE_LOOPBACK.

Если вы хотите увидеть использование существующих инструментов, которые предоставляют ту же вещь,введите в командной строке один из следующих вариантов:

route print
(This will dump the routing table)

ipconfig /all
(this will show you the state of ALL adapters including the loopback)
0 голосов
/ 28 июля 2011
  1. Не знаю точно, вы должны хотя бы указать свою конфигурацию, это DHCP или статический IP или что-то еще?
  2. Это интерфейс обратной связи
  3. Некоторое вещание может потребоваться. ARP - протокол канального уровня, поэтому его можно использовать без IP-адреса для широковещательной передачи ссылки для поиска устройств, а затем для определения их адреса.Точно не знаю о Windows, но в Unix для этого присутствует команда arping.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...