2011-02-16 110 views
1

我在網絡上的幾臺機器上遇到了一個非常奇怪的WMI問題。WMI - 無法通過IP地址連接到某些計算機

我有一塊軟件(.NET/C#)編寫,掃描本地網絡上的IP範圍,然後使用WMI查詢有關計算機的某些數據(計算機名稱,.NET框架版本等)。我最近遇到的一個問題是,這些機器的一小部分將不會響應通過其IP地址進行的WMI連接 - 它們只是拋出「RPC服務器不可用」異常,就像WMI沒有開始運行一樣。

這與C#應用程序,並試圖簡單的查詢,以返回計算機的名稱的VBScript的應用程序中出現兩個:

if wscript.arguments.count >= 1 then 
    host = wscript.arguments(0) 
end if 
if host = "" or isnull(host) then host = "." 

connectionStr = "winmgmts:{impersonationLevel=impersonate}!\\" & host & "\root\cimv2" 
wscript.echo connectionStr 

set objWMIService = GetObject(connectionStr)  
set objCompName = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") 
for each x in objCompName 
    wscript.echo x.Name 
next 

這將返回以下的結果:

C:\>nslookup BROKENCOMPUTER 
Address: 192.168.1.123 

C:\>cscript testwmi.vbs 192.168.1.123 
winmgmts:{impersonationLevel=impersonate}!\\192.168.1.123\root\cimv2 
C:\testwmi.vbs(9, 1) Microsoft VBScript runtime error: The remote server machine does not exist or is unavailable: 'GetObject' 

C:\>cscript testwmi.vbs BROKENCOMPUTER 
winmgmts:{impersonationLevel=impersonate}!\\BROKENCOMPUTER\root\cimv2 
BROKENCOMPUTER 

我可以如果我通過主機/計算機名稱引用計算機,仍然會打開WMI連接。我也可以通過IP地址(例如HTTP或RDP)連接到機器上運行的其他服務器 - 請求成功返回http://192.168.1.123

爲了讓事情變得更加怪異,行爲甚至不一致。有時連接到IP會正常工作,並且分批發生。爲了測試這個問題,我設置了一個腳本,每隔5秒向所涉及的計算機反覆發送WMI請求,並記錄結果(以及結果趨勢)。我發現的是,所有請求都會失敗或成功處理大約一定數量的請求(180- 15分鐘間隔)或其倍數。示例:

- Start script 
    - 35 successful requests in a row 
    - 180 failed requests in a row 
    - 180 successful requests 
    - 360 failed requests 
    - 180 successful requests 
    - 180 failed requests 
    - 900 successful requests 
    - etc etc 

然後我在兩臺機器上同時運行此腳本。我發現兩者之間的行爲是相似的(有幾分鐘的時間能夠連接並且無法連接),但兩者之間沒有同步;有兩個時期都可以連接,只有一個(或另一個)可以連接的時期,以及兩個都不可以連接的時期。

我知道這是一個令人難以置信的奇怪和具體的問題,我真的不希望任何人能夠立即解決它,但我想知道如果任何人有任何提示或方向?我在這裏和網絡人員交談過,他們和我一樣對這個問題感到困惑。

回答

4

除了MisterZimbu提供的正確答案之外,我可以在這裏增加一些觀點。假設微軟不刪除我對這篇文章的評論,請參閱http://msdn.microsoft.com/en-us/library/windows/desktop/aa393720%28v=vs.85%29.aspx。基本上,當IP地址傳遞到WMI時,微軟似乎在做反向DNS查詢。如果您的DNS不乾淨,您將得到「不可預知的結果」,也就是說您將連接到您不希望連接的計算機。

向IP地址添加週期會強制反向(或轉發)查找失敗,然後通過某種奇蹟實際使用IP地址,而不是從DNS返回的(可能不正確的)主機名。看起來,爲IP地址添加一段時間可以用於許多情況下(UNC,瀏覽器等),但有可能遇到的警告和其他故障。請注意,如果您查看DNS緩存(ipconfig/displaydns),則會在追加期間時看到失敗的查找,因此它不會阻止操作系統執行查找 - 它只會確保陳舊的DNS條目不會使用。

1

奇怪的是,添加一個「。」在查詢糾正問題時將其添加到IP地址的末尾。我認爲這迫使它通過DNS解析或類似的東西。

所以通過

winmgmts:{impersonationLevel=impersonate}!\\192.168.1.123.\root\cimv2 

連接似乎工作的時間正確的100%。

儘管如此,仍然很高興知道究竟是什麼問題的根本原因。

相關問題