DelphiでIPアドレスからMacアドレスを取得する
情報ソースはここ(表題:Get Client Mac Address)。
SendARP を用いて、IPアドレスからMacアドレスを取得します。
自分自身のNICのMacアドレスを取得するサンプルコードは多く見られましたが、他ホストのMacアドレスを取得するサンプルが見あたらなかったので、.NETのサンプルを翻訳してみました。
見よう見まねなので妙な部分等があると思いますが、とりあえず手元の環境では動いてます。
処理の流れとしては
- string型のIPアドレスをinet_addr関数でDWORD化。
- SendARP関数でMacアドレスを取得。
- 返値の判定後、取得したDWORD型のMacアドレスをByte型配列に分解。
- 配列化したMacアドレスをxx-xx-xx-xx-xx-xxの形式のstring型に変換。
というもの。
WindowsXP SP2 + Delphi7 の環境で検証したサンプルコードをzipで固めてアップしておきます。最低限の機能なので、自分でいじり倒して実装するのが吉です。
GetMacAddTest.zip(サイト整理により消失。必要であれば個別に連絡下さい)
これにARPキャッシュを取得する機能などを加えれば、ネットワークをモニタするアプリの基本的な機能を押さえられる・・・かな?
【追記】
と思ったら、環境によって不具合が出るコードを書いていたようで・・・。
検索していたらDelphiで綺麗に書かれているサンプルを発見したのでそれを利用。
これで環境依存の不具合もなくなった感じ。
(上のzipファイルも差し替えてあります)