2008-10-09 40 views
12

Làm cách nào để nhận được địa chỉ BSSID/MAC (Điều khiển truy cập phương tiện) của điểm truy cập không dây mà hệ thống của tôi được kết nối với C#?Nhận BSSID (địa chỉ MAC) của điểm truy cập không dây từ C#

Lưu ý rằng tôi quan tâm đến BSSID của WAP. Địa chỉ này khác với địa chỉ MAC của phần mạng của WAP.

+5

C# không hoạt động trên MAC. Tôi không thể cưỡng lại. : P –

+4

http://www.mono-project.com/Main_Page – Iain

Trả lời

21

Nhu cầu sau đây được thực hiện theo chương trình:

netsh wlan show networks mode=Bssid | findstr "BSSID" 

trên cho thấy địa chỉ MAC không dây của điểm truy cập đó là khác nhau từ:

arp -a | findstr 192.168.1.254 

này là vì điểm truy cập có 2 địa chỉ MAC. Một cho thiết bị không dây và một cho thiết bị mạng. Tôi muốn MAC không dây nhưng nhận MAC mạng bằng cách sử dụng arp.

Sử dụng Managed Wifi API:

var wlanClient = new WlanClient(); 
foreach (WlanClient.WlanInterface wlanInterface in wlanClient.Interfaces) 
{ 
    Wlan.WlanBssEntry[] wlanBssEntries = wlanInterface.GetNetworkBssList(); 
    foreach (Wlan.WlanBssEntry wlanBssEntry in wlanBssEntries) 
    { 
     byte[] macAddr = wlanBssEntry.dot11Bssid; 
     var macAddrLen = (uint) macAddr.Length; 
     var str = new string[(int) macAddrLen]; 
     for (int i = 0; i < macAddrLen; i++) 
     { 
      str[i] = macAddr[i].ToString("x2"); 
     } 
     string mac = string.Join("", str); 
     Console.WriteLine(mac); 
    } 
} 
3

Điều này question cho biết cách lấy bất kỳ thông tin nào bạn muốn ra khỏi kết nối mạng của mình. (Cuộn xuống câu trả lời bằng NetworkInformation)

2

Về nhận được kết quả là từ ARP.EXE lập trình:

Các Win32 API để có được điều này là trong nhóm IP Helper chức năng, nó được gọi là GetIpNetTable(). P/Invoke signature for it is here. Bạn sẽ phải viết một số mã để sắp xếp các kết quả ra khỏi nó, và một trong những API Win32 thú vị của nó với các kết quả có chiều dài thay đổi.

Một cách khác để thực hiện việc này là sử dụng Windows Management Instrumentation có bộ lớp bao bọc đẹp trong System.Management and System.Management.Instrumentation namespaces. Nhưng phía dưới là dịch vụ WMI phải chạy để làm việc. Tôi đã đào xung quanh nhưng tôi dường như không thể tìm thấy đối tượng chính xác trong cây WMI có chứa thông tin tương đương. Tôi khá chắc chắn nó tồn tại bởi vì tôi thấy các công cụ của bên thứ ba trên mạng mà yêu cầu bồi thường để lấy thông tin này bằng cách sử dụng API này. Có lẽ một người khác sẽ kêu vang với phần đó.

4
using System; 
using System.Diagnostics; 

class Program 
{ 
    static void Main(string[] args) 
    {  
     Process proc = new Process(); 
     proc.StartInfo.CreateNoWindow = true; 
     proc.StartInfo.FileName = "cmd"; 

     proc.StartInfo.Arguments = @"/C ""netsh wlan show networks mode=bssid | findstr BSSID """; 

     proc.StartInfo.RedirectStandardOutput = true;  
     proc.StartInfo.UseShellExecute = false; 
     proc.Start(); 
     string output = proc.StandardOutput.ReadToEnd(); 
     proc.WaitForExit(); 

     Console.WriteLine(output); 
    } 
} 

Hãy coi chừng lỗi cú pháp như dấu ngoặc nhọn. Nhưng khái niệm ở đây. Bạn có thể tạo chức năng Quét bằng cách định kỳ gọi quy trình này. Đúng nếu tôi gặp sự cố.

Các vấn đề liên quan