2009-01-10 40 views
23

Tôi muốn biết nếu có bất kỳ lớp .Net nào cho phép tôi biết SSID của mạng không dây mà tôi đang kết nối. Cho đến nay tôi chỉ tìm thấy thư viện được liên kết bên dưới. Là tốt nhất tôi có thể nhận được hoặc tôi nên sử dụng cái gì khác? Managed WiFi (http://www.codeplex.com/managedwifi)Nhận SSID của mạng không dây Tôi kết nối với C# .Net trên Windows Vista

Phương pháp khai thác WMI công trình cho Windows XP nhưng nó không làm việc nữa với Windows Vista.

Trả lời

22

Tôi đã giải quyết bằng thư viện. Nó dẫn đến được khá dễ dàng để làm việc với các lớp học được cung cấp:

Trước tiên tôi đã phải tạo ra một đối tượng WlanClient

wlan = new WlanClient(); 

Và sau đó tôi có thể nhận được danh sách các SSID máy tính được kết nối với với mã này :

Collection<String> connectedSsids = new Collection<string>(); 

     foreach (WlanClient.WlanInterface wlanInterface in wlan.Interfaces) 
     { 
      Wlan.Dot11Ssid ssid = wlanInterface.CurrentConnection.wlanAssociationAttributes.dot11Ssid; 
      connectedSsids.Add(new String(Encoding.ASCII.GetChars(ssid.SSID,0, (int)ssid.SSIDLength))); 
     } 
+0

Điều này không hoạt động. Nó đòi hỏi phải có một hội đồng mà tôi không tìm được! Bạn có thể chỉ cho tôi hướng đi đúng không? – MrAsterisco

+4

@MrAsterisco: Bạn cần thư viện Managed WiFi (http://www.codeplex.com/managedwifi) được đề cập ở trên. – habakuk

2

Nó trông như thế này sẽ làm những gì bạn muốn:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", 
"SELECT * FROM MSNdis_80211_ServiceSetIdentifier"); 


foreach (ManagementObject queryObj in searcher.Get()) 
{ 
    Console.WriteLine("-----------------------------------"); 
    Console.WriteLine("MSNdis_80211_ServiceSetIdentifier instance"); 
    Console.WriteLine("-----------------------------------"); 

    if(queryObj["Ndis80211SsId"] == null) 
     Console.WriteLine("Ndis80211SsId: {0}",queryObj["Ndis80211SsId"]); 
    else 
    { 
     Byte[] arrNdis80211SsId = (Byte[]) 
     (queryObj["Ndis80211SsId"]); 
     foreach (Byte arrValue in arrNdis80211SsId) 
     { 
      Console.WriteLine("Ndis80211SsId: {0}", arrValue); 
     } 
    } 
} 

từ http://bytes.com/groups/net-c/657473-wmi-wifi-discovery

+1

Cảm ơn cho câu trả lời. Thật không may phương pháp này không hoạt động với Windows Vista. Bạn có ý tưởng nào khác không? – mariosangiorgio

0

Bạn sẽ phải sử dụng API WLAN bản địa. Có một cuộc thảo luận dài về nó here. Rõ ràng đây là những gì Managed Wifi API sử dụng, vì vậy nó sẽ dễ dàng hơn cho bạn để sử dụng nó nếu bạn không có bất kỳ hạn chế để sử dụng mã LGPL.

+0

Đó là những gì tôi đã làm. Nó tiết lộ dễ dàng. Cảm ơn câu trả lời của bạn. – mariosangiorgio

-3

kiểm tra các trang web http://wwww.daedaltech.com họ đưa ra một dll mà chúng ta có thể tìm thấy t SSID và địa chỉ mac

+0

Trang được cung cấp không tồn tại –

2

Chúng tôi đã sử dụng thư viện wifi được quản lý, nhưng nó ném ngoại lệ nếu mạng bị ngắt kết nối trong khi truy vấn.

Hãy thử:

 var process = new Process 
         { 
          StartInfo = 
          { 
           FileName = "netsh.exe", 
           Arguments = "wlan show interfaces", 
           UseShellExecute = false, 
           RedirectStandardOutput = true, 
           CreateNoWindow = true 
          } 
         }; 
     process.Start(); 

     var output = process.StandardOutput.ReadToEnd(); 
     var line = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries) 
         .FirstOrDefault(l => l.Contains("SSID") && !l.Contains("BSSID")); 
     if (line == null) 
     { 
      return string.Empty; 
     } 
     var ssid = line.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries)[1].TrimStart(); 
     return ssid; 
Các vấn đề liên quan