アクセスしてきた接続元のPCのMacアドレスを知るにはどうすればよいか。Javaには直接接続元のMacアドレスを取得するAPIはないようなので、OSのARPコマンドを利用してみる。ARPコマンドを実行すると以下のような結果が得られる。
C:\Documents and Settings\Administrator>arp -a 192.168.1.1 Interface: 192.168.1.1 on Interface 0x2 Internet Address Physical Address 192.168.1.1 00-00-00-00-fe-ca
でこれをRuntime.exec()メソッドを使って実行する
Process ps = Runtime.exec("arp -a 192.168.1.1"); InputStream is = ps.getInputStream(); //以後、BufferedReaderなどを使って出力結果を取得
で、MACアドレスの部分の文字列を取り出せば接続相手のMACアドレスは取得できる。問題は、接続元のIPアドレスが複数のPCで同一になる場合があるということだ。グローバルIPが1つの場合は実際の接続元が正しく取得できるかは非常に微妙なところなので、これは別な方法で解決する必要がある。