質問

ネットワーク上の特定の MAC アドレスをすべて Python スクリプト内から検索したいと考えています。ネットワーク内のすべてのアクティブな IP アドレスのマップはすでにありますが、MAC アドレスを収集する方法がわかりません。何か案は?

役に立ちましたか?

解決

必要です ARP. 。Python の標準ライブラリにはそのためのコードが含まれていないため、外部プログラムを呼び出すか (OS に「arp」ユーティリティがある場合があります)、または自分でパケットを構築する必要があります (おそらく次のようなツールを使用します)。 スカピー.

他のヒント

この記事, 、「Python で手作りのイーサネット フレームを送信する (ARP など)」は、まさにあなたが探しているもののようです。

Python 自体からそれを取得する組み込みの方法はないと思います。

私の質問は、ネットワークから IP 情報をどのように取得しているかということです。

ローカル マシンからこれを取得するには、ifconfig (unix) または ipconfig (windows) を簡単に解析できます。

純粋な Python ソリューションが必要な場合は、以下を参照してください。 スカピー パケットを作成します (ARP リクエストを送信し、応答を検査する必要があります)。または、外部プログラムを呼び出すことを気にしない場合は、次を使用できます arping (Un*x システムでは、Windows で同等のものを知りません)。

Python でこれを行うネイティブな方法はないようです。最善の策は、Windows の場合は「ipconfig /all」、Linux の場合は「ifconfig」の出力を解析することです。os.popen() をいくつかの正規表現とともに使用することを検討してください。

プラットフォームによって異なります。*nix を使用している場合は、「arp」コマンドを使用して、特定の IP (IPv4 を想定) アドレスの MAC アドレスを検索できます。それが機能しない場合は、アドレスに ping を実行してから確認することもできます。また、生のネットワークにアクセスできる場合 (BPF またはその他のメカニズムを使用して)、独自の ARP パケットを送信することもできます (ただし、それはおそらくやりすぎです)。

「arp」の出力を解析したいと思うかもしれませんが、カーネル ARP キャッシュには、それらのホストが Python スクリプトが実行されているホストと通信した場合の IP アドレスのみが含まれます。

ifconfig を使用すると、ローカル インターフェイスの MAC アドレスを表示できますが、LAN 上の MAC アドレスは表示できません。

Mark Pilgrim が、Netbios モジュールを備えた現在のマシンに対して Windows でこれを行う方法を説明しています。 ここ. 。Netbios モジュールは、python.org で入手可能な Win32 パッケージの一部として入手できます。残念ながら、現時点ではモジュールに関するドキュメントが見つかりません。

Python は OS 固有の問題に対処することを意図していないため (解釈され、クロスプラットフォームで解釈されることになっている)、これを行うには外部コマンドを実行します。

UNIXの場合、コマンドは次のとおりです ifconfig

パイプとして実行すると、望ましい結果が得られます。

import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top