目標は、すべてのローカルNICのリストではなく、接続されたローカルNICのMACアドレスを収集することです:)
socket
とを使用することで、インターネットへの接続に使用されているIPを取得するためにconnect (to_a_website)
使用できます。getsockname()
しかし、IPからローカルNICのMACアドレスを取得するにはどうすればよいですか?
質問の主な理由は、NICが複数あるかどうかです。
目標は、すべてのローカルNICのリストではなく、接続されたローカルNICのMACアドレスを収集することです:)
socket
とを使用することで、インターネットへの接続に使用されているIPを取得するためにconnect (to_a_website)
使用できます。getsockname()
しかし、IPからローカルNICのMACアドレスを取得するにはどうすればよいですか?
質問の主な理由は、NICが複数あるかどうかです。
外部IPのMACアドレスを取得することはできません。
詳細については、C#で外部IPのMACアドレスを取得する方法の説明を参照してください。
これを行う原始的な方法は、OS で利用可能なコマンドライン ツールを使用することです。subprocess
モジュール (! ではありません)を使用してツールを実行しos.system()
、出力を収集して解析します。
Windows では、必要なコマンドはipconfig /all
.
Linux、OSX、BSD を含むほとんどの Unice では、ifconfig
.
コマンド ライン ユーティリティを使用せずにこれを行うためのより良い方法があるかもしれませんが、私はそれを知りません...まだ.
ipconfig /all
Windows XPでの出力例:
D:\Documents and Settings\LAYip>ipconfig /all
Windows IP Configuration
Host Name . . . . . . . . . . . . : <redacted>
Primary Dns Suffix . . . . . . . : <redacted>
Node Type . . . . . . . . . . . . : Hybrid
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
DNS Suffix Search List. . . . . . : <redacted>
<redacted>
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix . : <redacted>
Description . . . . . . . . . . . : Intel(R) 82579LM Gigabit Network Con
nection #2
Physical Address. . . . . . . . . : 5C-26-0A-60-8D-C7
Dhcp Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : xxx.xxx.28.29
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : xxx.xxx.28.254
DHCP Server . . . . . . . . . . . : xxx.xxx.23.13
DNS Servers . . . . . . . . . . . : xxx.xxx.23.13
xxx.xxx.23.11
Lease Obtained. . . . . . . . . . : Thursday, 12 April 2012 9:14:41 AM
Lease Expires . . . . . . . . . . : Friday, 20 April 2012 9:14:41 AM
Ethernet adapter VirtualBox Host-Only Network:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter
Physical Address. . . . . . . . . : 08-00-27-00-28-E6
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 192.168.56.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
ifconfig
Linuxでの出力:
lws@helios:~$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:25:22:db:8c:b6
inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0
inet6 addr: fe80::225:22ff:fedb:8cb6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:322333 errors:0 dropped:0 overruns:0 frame:0
TX packets:296952 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:40005876 (40.0 MB) TX bytes:162343969 (162.3 MB)
Interrupt:40 Base address:0x4000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:362 errors:0 dropped:0 overruns:0 frame:0
TX packets:362 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:31806 (31.8 KB) TX bytes:31806 (31.8 KB)
システムの mac id を取得するもう 1 つの回避策は、ping コマンドを使用してシステムの名前を ping し、ping された IP アドレスに対して arp -a 要求を実行することです。その方法の失敗は、ping 応答を Python のメモリに書き込み、readline 操作を実行して IP アドレスを取得し、システム名、IP アドレス、および問題のマシンの mac id をディスプレイまたはテスト ファイルに出力します。
テスト手順の自動化を改善するためにシステム検証チェックと同様のことをしようとしていますが、スクリプトは当分の間Pythonにあります。
ソケットから MAC アドレスを取得することはできません。TCP 処理チェーンの最下層にあるイーサネット フレームが必要です。そのためには、ネットワーク トラフィックを監視 (キャプチャ) する必要があり、パケットを解析していくつかのパケットを見つけます。ヘッダ。そこからMACアドレスなどの必要な情報を抽出します。
これは便利なコード スパンであり、それを行うのに役立ちます。