我們的支持團隊已經診斷出計算機配置的某些特定區域,這可能會導致基於網絡的數據庫應用程序變慢。我的任務是創建一個工具來測試可能放緩的問題。我在檢測是否在Windows中爲其活動網絡適配器啓用了鏈接層拓撲時遇到問題。我有一個找到活動(最常用)網絡適配器的方法。檢測計算機上是否啓用鏈接層拓撲
有沒有辦法檢測鏈接層拓撲,我該如何測試它?
我們的支持團隊已經診斷出計算機配置的某些特定區域,這可能會導致基於網絡的數據庫應用程序變慢。我的任務是創建一個工具來測試可能放緩的問題。我在檢測是否在Windows中爲其活動網絡適配器啓用了鏈接層拓撲時遇到問題。我有一個找到活動(最常用)網絡適配器的方法。檢測計算機上是否啓用鏈接層拓撲
有沒有辦法檢測鏈接層拓撲,我該如何測試它?
不是純淨的.Net解決方案,但似乎工作。函數接受本地連接的名稱和協議名稱。我有一個鏈接到一個網站,有很多不同的協議驅動程序名稱,但你想要的是包含在代碼中。
這使用nvspbind.exe,你可以從http://archive.msdn.microsoft.com/nvspbind得到。
CODE
class Program
{
static void Main(string[] args)
{
//check Link-Layer Topology Discover Mapper I/O Driver
bool result1 = IsProtocalEnabled("Local Area Connection", "ms_lltdio");
//check Link-Layer Topology Discovery Responder
bool result2 = IsProtocalEnabled("Local Area Connection", "ms_rspndr");
}
private static bool IsProtocalEnabled(string adapter, string protocol)
{
var p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nvspbind.exe");
p.StartInfo.Arguments = string.Format("/o \"{0}\" {1}", adapter, protocol);
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
return output.Contains("enabled");
}
}
我從這裏得到的協議驅動程序名稱:http://djseppie.wordpress.com/category/windows/scripting/
真棒。我已經搜遍了,但一直沒有提出任何事。這正是我需要的!我不得不修改你的代碼來處理可能的多個網卡,所以我的代碼的返回語句如下所示: foreach(在輸出中的字符串strline('\ n')) { if(strline.Contains(adapter) ) return strline.Contains(「enabled」); } return output.Contains(「enabled」); 這將每個NIC劃分到它自己的行 – CEPA
有趣的是,我不認爲它會返回任何東西,但完全匹配,除非你傳入一個像'%Local Area Connection%'這樣的搜索字符串,儘管如此。很高興它適合你。 – Peter
它出現在最近的Windows版本的Windows服務。它的名字是'lltdsvc'。你可以檢查它的狀態。這只是一個粗略的指標,因爲該功能可以在每個適配器的基礎上禁用。我無法找到一個直接的方式來查詢此功能的網絡接口 – skarmats
非常有見地。謝謝。這讓我注意到存儲網絡連接信息的地方,但我仍然空手而歸。如果我仍然無法找到它,我會將我的程序指向該服務。我只是將其標記爲「諮詢」而不是「必需的」更改。 – CEPA