バックグラウンド
コンピューターから一意の識別子を取得しようとしていますが、毎回同じMACアドレスを確実に返すことができるようにしたいと考えています。私はMACアドレスを使用する理由があり、代替の一意のIDメソッドに関する多くの投稿を読んだことがあります(そして、ネットワークカードがないかどうかを検討しました)。
問題
問題は.NETにあり、特定のNetworkInterfaceが、特定のVPNまたはWiFiネットワークに接続したときに追加される「NortelIPSECSHMアダプター-パケットスケジューラミニポート」などの物理ハードウェアネットワークカードであるかどうかを判断できません。
次のようなコードを使用してMacアドレスを取得する方法を知っています。
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
log.Debug("NIC " + nic.OperationalStatus + " " + nic.NetworkInterfaceType + " " + nic.Speed + " " + nic.GetPhysicalAddress() + " " + nic.Description);
}
当然のことながら、内部ネットワークカードを確実に取得する方法は100%ありませんが、MACアドレスを選択して、変更される可能性が最も低い特定のマシンのMACアドレスを返したいと思います。Wi-Fiに接続されているかどうか...何らかのテザー接続を介して接続されているかどうか...または新しいインターフェイスを追加する新しいVPNソフトウェアをインストールするかどうかなどの要因とは関係ありません。
考慮される戦略
1)「アップ」である最初のインターフェースを選択します。「パケットミニポート」が常に稼働しているため、これは私のラップトップでは失敗します。さらに、電話をラップトップにつなぐと、これも最初のカードとして表示されます。
2)最も適切なタイプを選択してください...これは失敗しますb / c基本的に、WiFiアダプターと私のiPHoneテザリングインターネット接続を含むすべてが「イーサネット」として表示されます。
3)IPアドレスを持つNICを選択します。いくつかの理由で失敗します:1)ネットワークカードがLANに接続されていない可能性があります2)IPアドレスを持つ可能性のある複数のNICがあります。
4)すべてのMACアドレスを送信するだけです...問題は、インストールされているソフトウェアに基づいてリストが変更され、比較が困難になることです。
5)最速のMACアドレスを選択します。これがおそらく私の最善の策だと思います。通常、最速のインターフェースが最も永続的であると言っても過言ではありません。
または、.NETで物理カードを検出する他の方法があるかもしれません。または、別の情報を提供するAPI呼び出しを推奨できる場合は、他のAPI呼び出しを呼び出すことを検討します。
他のアイデアはありますか?
ここで示すのは、iPhoneをテザー接続したときの上記のサンプルコードの出力です。
DEBUG - NIC Down Ethernet 500000 0021E98BFBEF Apple Mobile Device Ethernet - Packet Scheduler Miniport
DEBUG - NIC Up Ethernet 10000000 444553544200 Nortel IPSECSHM Adapter - Packet Scheduler Miniport
DEBUG - NIC Down Ethernet 54000000 00166FAC94C7 Intel(R) PRO/Wireless 2200BG Network Connection - Packet Scheduler Miniport
DEBUG - NIC Down Ethernet 1000000000 0016D326E957 Broadcom NetXtreme Gigabit Ethernet - Packet Scheduler Miniport
DEBUG - NIC Up Loopback 10000000 MS TCP Loopback interface
iPhoneが接続されていない場合:
DEBUG - NIC Up Ethernet 10000000 444553544200 Nortel IPSECSHM Adapter - Packet Scheduler Miniport
DEBUG - NIC Down Ethernet 54000000 00166FAC94C7 Intel(R) PRO/Wireless 2200BG Network Connection - Packet Scheduler Miniport
DEBUG - NIC Down Ethernet 1000000000 0016D326E957 Broadcom NetXtreme Gigabit Ethernet - Packet Scheduler Miniport
DEBUG - NIC Up Loopback 10000000 MS TCP Loopback interface