Имя устройства сетевого адаптера Windows 7 с использованием winpcap

8662
Pita

Я пытаюсь использовать winpcap для приложения, которое будет использоваться на нескольких серверах в производственной линии. До сих пор меня раздражает соглашение о присвоении имен устройствам в Windows 7, представляющее собой длинную шестнадцатеричную строку, которая меняется от сервера к серверу (т. Е. \Device\NPF_(Linux облегчает это с помощью соглашения eth0, eth1, ...). Так как каждый сервер будет использовать 5 сетевых адаптеров, я хотел бы избежать необходимости сохранять файл конфигурации с именами устройств или не изменять исходный код, чтобы учесть изменения имени устройства. Кроме того, подключение cat5 будет происходить на разных устройствах в отдельных сетях и назначения портов должны всегда оставаться одинаковыми для каждого чертежа.

Поэтому у меня вопрос: есть ли какой-нибудь простой способ управлять этими именами устройств в Windows, например, легко переименовать их в реестре? Когда я посмотрел в реестре, шестнадцатеричная строка показывается во многих записях, а также отображается в именах папок, поэтому я не был уверен, станет ли это проблемой или нет. Или, может быть, есть ли способ с помощью winpcap захватить понятное имя устройства, которое можно установить через страницу сетевых подключений, и таким образом получить результат с шестнадцатеричным именем устройства (аналогично findalldev_ex ()). Любые другие предложения также приветствуются.

PS: я знаю, что могу использовать bind () для привязки к ip и портам или использовать winsock и т. Д., Но взаимодействие приложений и оборудования с другими устройствами затруднено из-за того, что нескольким сетевым адаптерам требуется одинаковый IP-адрес и что конфликтует в Windows, следовательно опция winpcap в случайном режиме создает все необработанные сообщения.

2
Обратите внимание, что это GUID, а не просто строка, и большинство программистов будет рассматривать его как абстрактный тип данных более высокого уровня, то есть он будет анализировать его и ожидать, что он будет состоять из шестнадцатеричных символов с дефисами в определенных позициях и т. Д. Этот код будет скорее всего, сломается, если вы измените его на что-то вроде 'NIC1'. Во-вторых, это не должны были быть читаемые пользователем имена. аналог Windows для / dev / eth0 - «Подключение по локальной сети X». В Linux для сопоставления устройств используется собственное имя, не относящееся к пользователю, с указанием адреса шины PCI устройства. у вас когда-нибудь были eth0 и eth1 просто поменялись местами при перезагрузке? Я имею. Frank Thomas 9 лет назад 0
В настоящее время я могу извлечь и проанализировать GUID из вызова pcap_findalldevs_ex и использовать его как const char * для имени устройства. Это не проблема. Поскольку Linux сам изменил eth0 и eth1, я еще не сталкивался с этой проблемой, так как несколько серверов были развернуты на месте уже несколько лет. Спасибо, что сообщили мне об этой потенциальной проблеме. Тем не менее, это соглашение eth0 упростило развертывание на основе Linux, но теперь мы переносим вещи в среду Windows, и именно здесь GUID становится более сложным. Pita 9 лет назад 0

1 ответ на вопрос

2
DavidPostill

Как получить «Имя подключения» к сетевому соединению?

В Windows getmacможно использовать для получения как «Имя соединения» (понятное имя), так и «Имя транспорта» (GUID).

getmac /fo csv /v 

Пример вывода:

"Connection Name","Network Adapter","Physical Address","Transport Name" "Local Area Connection","Realtek PCIe GBE Family Controller","F0-BF-97-62-95-5D","\Device\Tcpip_" "Wireless Network Connection","Atheros AR9285 Wireless Network Adapter","CC-AF-78-B2-4C-09","\Device\Tcpip_" "Bluetooth Network Connection","Bluetooth Device (Personal Area Network)","CC-AF-78-B2-4C-0A","Media disconnected" 

Как переименовать соединение?

netsh может использоваться для переименования сетевого подключения.

netsh interface set interface name="Local Area Connection" newname="New Name" 

Как я могу автоматизировать все это?

Вы можете использовать вышеупомянутые команды в пакетном файле при установке вашего продукта для автоматического создания пользовательского локального файла конфигурации.


Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • getmac - отображает адрес Media Access Control (MAC) и список сетевых протоколов, связанных с каждым адресом, для всех сетевых карт на каждом компьютере, локально или через сеть.
  • netsh - настройка сетевых интерфейсов, брандмауэра Windows, маршрутизации и удаленного доступа.
Я буду смотреть на это. Спасибо за советы! Pita 9 лет назад 0