システムがC#を使用して接続されているワイヤレスアクセスポイントのBSSID/MAC(Media Access Control)アドレスを取得するにはどうすればよいですか?
WAPのBSSIDに興味があることに注意してください。これは、WAPのネットワーク部分のMACアドレスとは異なります。
以下はプログラムで実行する必要があります。
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);
}
}
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);
}
}
中括弧のような構文エラーに注意してください。しかし、コンセプトはここにあります。このプロセスを定期的に呼び出すことにより、スキャン機能を作成できます。何かがうまくいかない場合は私を修正してください。
この 質問 は、ネットワーク接続から必要な情報を取得する方法を示しています。 (NetworkInformationを使用して回答までスクロールします)
プログラムでARP.EXEからその結果を取得することについて:
これを取得するためのWin32 APIは IP Helper 関数のグループにあり、それは GetIpNetTable() と呼ばれます。 P/Invokeのシグネチャはここにあります 。結果をマーシャリングするためのコードを記述する必要があります。コードは、可変長の結果を持つ楽しいWin32 APIの1つです。
これを行う別の方法は、 System.ManagementおよびSystem.Management.Instrumentation名前空間 にラッパークラスのニースセットがある Windows Management Instrumentation を使用することです。しかし、欠点は、WMIサービスが動作するために実行されている必要があることです。調べてみましたが、同等の情報を含む正確なオブジェクトをWMIツリーで見つけることができません。このAPIを使用してこの情報を取得すると主張するサードパーティのツールがネット上にあるので、それが存在すると確信しています。たぶん、他の誰かがその部分でチャイムを鳴らすでしょう。