13

C# を使用して、システムが接続されているワイヤレス アクセス ポイントの BSSID / MAC (Media Access Control) アドレスを取得するにはどうすればよいですか?

WAP の BSSID に関心があることに注意してください。これは、WAP のネットワーク部分の MAC アドレスとは異なります。

4

3 に答える 3

23

以下をプログラムで実行する必要があります。

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

上記は、次のものとは異なるアクセス ポイントのワイヤレス MAC アドレスを示しています。

arp -a | findstr 192.168.1.254

これは、アクセス ポイントに 2 つの MAC アドレスがあるためです。1 つはワイヤレス デバイス用で、もう 1 つはネットワーク デバイス用です。ワイヤレス MAC が必要ですが、 arpを使用してネットワーク MAC を取得します。

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);
    }
}
于 2008-10-09T15:38:38.710 に答える
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); 
    }   
}

中括弧のような構文エラーに注意してください。しかし、コンセプトはここにあります。このプロセスを定期的に呼び出すことにより、スキャン機能を作成できます。何か問題が発生した場合は修正してください。

于 2011-10-17T17:22:56.307 に答える
2

プログラムで ARP.EXE からその結果を取得する方法について:

これを取得するための Win32 API は、関数のIP ヘルパーグループにあり、 GetIpNetTable()と呼ばれます。そのための P/Invoke 署名は hereです。その結果をマーシャリングするコードを書く必要があります。これは可変長の結果を持つ楽しい Win32 API の 1 つです。

これを行うもう 1 つの方法は、 System.Management および System.Management.Instrumentation 名前空間に優れたラッパー クラスのセットを持つWindows Management Instrumentationを使用することです。ただし、欠点は、それが機能するために WMI サービスが実行されている必要があることです。いろいろ調べてみましたが、WMI ツリー内に同等の情報を含む正確なオブジェクトが見つからないようです。このAPIを使用してこの情報を取得すると主張するサードパーティのツールがネット上にあるので、それが存在すると確信しています。たぶん、他の誰かがその部分にチャイムを鳴らします。

于 2008-10-09T16:24:59.023 に答える