DelphiでIPアドレスからMacアドレスを取得する

情報ソースはここ(表題:Get Client Mac Address)
 
SendARP を用いて、IPアドレスからMacアドレスを取得します。
自分自身のNICMacアドレスを取得するサンプルコードは多く見られましたが、他ホストのMacアドレスを取得するサンプルが見あたらなかったので、.NETのサンプルを翻訳してみました。
見よう見まねなので妙な部分等があると思いますが、とりあえず手元の環境では動いてます。
 
処理の流れとしては

  1. string型のIPアドレスをinet_addr関数でDWORD化。
  2. SendARP関数でMacアドレスを取得。
  3. 返値の判定後、取得したDWORD型のMacアドレスをByte型配列に分解。
  4. 配列化したMacアドレスをxx-xx-xx-xx-xx-xxの形式のstring型に変換。

というもの。
 
WindowsXP SP2 + Delphi7 の環境で検証したサンプルコードをzipで固めてアップしておきます。最低限の機能なので、自分でいじり倒して実装するのが吉です。
 GetMacAddTest.zip(サイト整理により消失。必要であれば個別に連絡下さい)
 
これにARPキャッシュを取得する機能などを加えれば、ネットワークをモニタするアプリの基本的な機能を押さえられる・・・かな?
 
【追記】
と思ったら、環境によって不具合が出るコードを書いていたようで・・・。
検索していたらDelphiで綺麗に書かれているサンプルを発見したのでそれを利用。
これで環境依存の不具合もなくなった感じ。
(上のzipファイルも差し替えてあります)