天天看點

DHCP伺服器禁用NetBios功能後引發WPAD失效解決方法

今天的這篇博文呢,隻是想把最近遇到在DHCP伺服器上禁用NetBios選項後導緻的Windows XP SP3版本無法正常應用WPAD值的問題。

單擊“開始”/“管理工具”,然後單擊“DHCP”。

在DHCP控制台中,展開“作用域”,右鍵單擊“作用域選項”,然後單擊“配置選項”。

單擊“進階”頁籤,然後單擊“供應商類别”清單中的“Microsoft Windows 2000 選項”。

保證在“使用者類别”清單中的“預設使用者類别”處于選中狀态。

然後選中“可用選項”列下的“001 Microsoft 禁用 Netbios 選項”複選框。

在“資料輸入”區域中,鍵入 0x2,然後單擊“确定”即可。   

      但是當我們通過DHCP伺服器來禁用掉用戶端的NetBios功能後,會發現一個非常有意思的問題,那就是如果你的用戶端安裝了FWC用戶端來發現TMG伺服器,那麼Windows 7 與Windows XP SP2版本是不受影響的,但是如果企業已經将Windows XP用戶端安裝了最新的SP3更新檔包的話,那麼這時就需要注意了,Windows XP SP3用戶端上NetBios功能已經被禁用了,但是FWC卻發現不了TMG了,如果将DHCP伺服器上的禁用Netbios功能的選項取消,Windows XP sp3就立即可以正常發現了TMG伺服器并進行上網,有意思吧,當時将這個問題同微軟的工程師聊了聊,微軟工程師也幫助查詢了,回報的結果是微軟Windows XP SP3的相關文檔中并未提及到此問題,那就是木有辦法了,總不能不裝SP3吧,是以我們還是需要看看有沒有相關的解決方法呢?

      其實遇到這個問題的話可以利用如下方法先做一些基本的檢查

2、用戶端手動指向TMG伺服器發現可以正常發現TMG伺服器并進行上網,初步确定不是由于TMG引發的。

3、在DHCP上取消禁用NetBios選項時設定的那個值,Windows XP SP3用戶端通過DHCP自動發現了TMG,那麼可以很肯定的确定不是由TMG引發的。

4、在用戶端上安裝抓包軟體,在當時我使用了wireshark進行抓包,分析結果如下:

5、 重新擷取IP位址進行抓包,Windows XP用戶端上有如下提示:

<a href="http://tingdongwang.blog.51cto.com/attachment/201206/17/1056852_1339924657e70O.jpg"></a>

Windows 7用戶端上重新擷取位址抓包如下:

<a href="http://tingdongwang.blog.51cto.com/attachment/201206/17/1056852_1339924663tFD7.jpg"></a>

通過上圖可以發現在Windows XP SP3版本中确實存在發現WPAD值異常的問題。

6、當然不排除版本問題,安裝Windows XP SP2版本後,在DHCP伺服器上重新啟用禁用NetBios功能選項後,Windows XP SP2沒有出現發現不了TMG伺服器的問題,抓包發現應用WPAD時正常,至此可以确定此問題與DHCP上禁用NetBios功能是有一定的關系的。

7、取消DHCP伺服器的禁用NetBios選項後,手動到用戶端的本地聯接中禁用NetBios功能後,重新擷取IP位址,檢測WPAD正常,至此可以确定通過用戶端來關閉NetBios是可以的,如果大家平時有用系統資料庫的話,一定會想到的是必然可以通過修改系統資料庫對應鍵值來實作手動将本地聯接中NetBios功能取消一樣的結果,查找後發現當我們手動在用戶端中下圖所示位置禁用Netbios後其實是修改了系統資料庫

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces中對應網卡健值中的NetBiosOptions值的,如下圖所示;

<a href="http://tingdongwang.blog.51cto.com/attachment/201206/17/1056852_13399246746Ywe.png"></a>

但是大家如果注意觀察會發現每台計算機的Interfaces中的内容是不一樣的,這就意味将無法通過組政策的方法來直接修改所有Windows 用戶端的這項值來達到批量禁用NetBios功能的。

但是真的沒有解決方法了嗎?其實到這一步我們就已經有解決方法了,那就是利用腳本的方式來檢索此鍵值上所有NetBiosOptions選項非“2”的值,就全部改為2就好了,相關的解本呢如下,大家可以根據實際情況測試使用,這個腳本我這裡用的是VBS的。

======================================================================

Const sNetKey = "System\CurrentControlSet\Services\NetBT\Parameters\Interfaces\" 

Dim oReg            ' Registry object 

Dim sSubKey         ' SubKey instance 

Dim aSubKeys        ' SubKeys array 

Dim dwValue         ' registry value 

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") 

oReg.EnumKey HKEY_LOCAL_MACHINE, sNetKey, aSubKeys 

' Top layer is interfaces 

For Each sSubKey in aSubKeys 

     oReg.GetDWORDValue HKEY_LOCAL_MACHINE, sNetKey &amp; sSubKey, "NetbiosOptions", dwValue 

     If dwvalue &lt;&gt; 2 Then 

         oReg.SetDWORDValue HKEY_LOCAL_MACHINE, sNetKey &amp; sSubKey, "NetbiosOptions", 2 

     End If 

Next 

=====================================================================

用netbios over tcp/ip來實作,相關的方法也非常簡單,隻需要把下邊的指令放到批進行中就可以了,提接組政策或播發就可以了。

 wmic nicconfig where (TcpipNetbiosOptions!=Null and TcpipNetbiosOptions!=2) call SetTcpipNetbios 2

以上就是關于通過DHCP來禁用NetBIOS時對TMG的一些影響及排錯的思路,可能也是不很完整但還是整理了一些分享出來,嘻嘻。

本文轉自wangtingdong 51CTO部落格,原文連結:http://blog.51cto.com/tingdongwang/900939,如需轉載請自行聯系原作者

繼續閱讀