TL; Dr: Используйте bcdedit /set {dbgsettings} dhcp No
или nodhcp
flag.
bcdedit /dbgsettings NET HOSTIP:ip PORT:port [KEY:key] [nodhcp] [newkey] [/start startpolicy] [/noumex]
WinDBG, использующий сетевую отладку ядра Windows 10 (RS5 / 17763.1), по умолчанию требует DHCP для оптимальной работы.
Напомним, что модуль ядра KDNET работает на более низком уровне, чем ОС Windows. Настройки IP-адреса соединения "Microsoft Kernel Debug Network Adapter" не используются, также как и скрытый реальный (Intel/Realtek/Broadcom) адаптер, который также имеет свой IP-адрес.
Например, если для IPv4-адреса установить значение 192.168.128.1 на панели управления «Сетевые подключения», отладчик (при подключении к коммутатору) сообщает об этом:
Connected to target 172.29.1.132 on port 50008 on local IP 172.29.13.140.
это соответствует моему предыдущему наблюдению о том, что при использовании перекрестного кабеля:
Connected to target 169.254.78.132 on port 50008 on local IP 192.168.128.1
Таким образом, перекрестный кабель без DHCP-сервера приводит к тому, что KDNET останавливается на 10 минут по DHCP, а затем возвращается к локальному адресу.
Подтверждено https://community.osr.com/discussion/290941/network-debugging-took-pcs-off-the-dhcp-network-windbg-can-no-longer-connect
Отладчик ядра (имеется в виду часть, встроенная в ядро целевого компьютера) может подключать windbg на машине со статическим IP, но он никогда не поддерживал назначение статического IP себе.
Вы либо используете DHCP, либо получаете запасной адрес в диапазоне 169.254.xx. Этот диапазон не маршрутизируемый, поэтому два компьютера должны быть подключены напрямую.
Обратите внимание, что IP-адрес, назначенный сетевому адаптеру операционной системой, не имеет значения. Отладчик ядра имеет свой собственный независимый стек драйверов.
Кроме того, связь осуществляется с помощью пакетов UDP, а не TCP ... поэтому для этого не требуется IP-адрес. Вот захват пакета Wireshark, показывающий запросы DHCP, используя перекрестный кабель:
Если присмотреться к выводам bcdedit
и bcdedit /dbgsettings
я вижу, что окна автоматически использовали флаг DHCP, несмотря на то, что я его никогда не добавлял. Я вижу, что они также добавили опцию "nodhcp", хотя ее трудно найти в документации
debug Yes
----- dbgsettings -----
busparams 3.0.0
key 1.2.3.4
debugtype NET
hostip 192.168.128.1
port 50008
dhcp Yes
Добавление DHCP: нет, мой пакетный сценарий установки отладки сети решил проблему!
@echo off
rem get bus device function from Device Manager of network adapter
set bdf=3.0.0
rem port used in WinDbg
set port=50008
rem set your workstation machine to the following IP on a secondary adapter
set ip=192.168.128.1
rem enable network debug using the ip address of the dev system
bcdedit /debug on
bcdedit /create {dbgsettings} > NUL 2>&1
bcdedit /dbgsettings NET HOSTIP:%ip% PORT:%port% KEY:1.2.3.4
bcdedit /set {dbgsettings} busparams %bdf%
bcdedit /set {dbgsettings} dhcp No
rem rebuilt BCDs don't contain these sections / inheritance, and prevents Microsoft Kernel Debug Network Adapter from appearing
bcdedit /set {current} inherit {globalsettings}
bcdedit /create {globalsettings} > NUL 2>&1
bcdedit /set {globalsettings} inherit {dbgsettings}
pause
Существует также проблема брандмауэра, вызванная статическими сетями, когда DNS не помечен как "общедоступный", у меня есть этот фрагмент powershell, чтобы исправить это, но он требуется при запуске .... Я просто отключил брандмауэр для этой целевой машины, чтобы смягчить проблему.
# Name : Unidentified network
# InterfaceAlias : nameOfYourNetworkAdapter
# InterfaceIndex : 6
# NetworkCategory : Public
# IPv4Connectivity : NoTraffic
# IPv6Connectivity : NoTraffic
# converts the "Public" network to "Private" so file sharing and such works with Windows firewall
# this is good for local connections that do not need gateway / dns
get-netconnectionprofile -InterfaceAlias *
set-netconnectionprofile -InterfaceAlias nameOfYourNetworkAdapter -NetworkCategory Private
get-netconnectionprofile -InterfaceAlias *
# note, I don't believe this persists between reboots... so add to startup menu if needed
# it makes it easier to rename your nework adapter to 'debug' or something without spaces