2010-07-06 54 views
2

實際上,SqlDataSourceEnumerator的功能是查找局域網上各臺PC上運行的SQL Server的所有實例。如何在局域網上的所有主機上查找正在運行的程序的所有實例?

是否有相當於查找任意應用程序的運行實例?

編輯:好的,所以這隻適用,因爲這些應用程序有一個預先定義的合作方法。有沒有一種直接的方式來確定是否在局域網上的某臺計算機上存在給定的文件(exe,比如說),即使應用程序本身當時沒有運行?明白必須考慮到權限。

回答

0

它在整個LAN段(子網掩碼)上廣播一個UDP數據包(端口1434)是什麼SQL枚舉。在各種主機上運行的SQL瀏覽器代理服務會偵聽此數據包並使用本地實例列表進行響應。所以對於枚舉發生,一些鴨子你已經對齊:

  • 有一個衆所周知的協議,用於SQL isntance發現,UDP的1434廣播和響應
  • 有偵聽此服務廣播,由SQL Server安裝程序安裝
  • 有一個客戶端庫來實現廣播請求格式和響應解析您的槓桿作用

對於任意應用程序有同樣的表現,該申請將不得不實施這些小姐零件。發現子網段中任意主機上運行的任意進程基本上不可能實現。

0

不同之處在於SqlDataSourceEnumerator在局域網上查找「它可以看到」的所有實例。如果服務器進程配置爲不響應該請求,則不會被看到。

沿着同樣的路線,您可以掃描任何有遠程已知方式的應用程序。最簡單的是,應用程序將監聽和響應連接。例如,應用程序可以綁定到一個TCP端口並監聽任何請求併發回一個響應,說明它已處於活動狀態並正在運行,並且可以掃描網絡上的主機以查找這些響應。

但是,對於「任意應用程序」,大多數應用程序沒有這種網絡發現機制。如果你控制任意應用程序,那麼你可以在其中構建該功能。但是如果你不這樣做,那麼你需要一些方法在任何給定的主機上查找該應用程序,這意味着它需要某種網絡交互。

0

不,沒有。

適用於SQL服務器的原因是SQL服務器具有一個在網絡上偵聽「發現」請求的偵聽器。然後,應用程序可以在網絡上發送廣播消息,並偵聽對該請求的響應以發現SQL服務器實例。

我想你可以編寫一個通用的程序 - 它可以偵聽發現請求,使用一些Windows API函數枚舉在該計算機上運行的進程,並在請求的程序正在運行時作出響應。

相關問題