アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

現在、Java製の簡易的なアプリケーションサーバを作成しています。
サーバソケットをオープンして要求を受け、
何らかの処理を行って応答を返すことは出来ていますが、
アクセスに対してフィルタリングを行う要望が非常に高くなっています。
それも、IPアドレスなら簡単なのですが、
MACアドレスによるフィルタリングも要件に入って来ており、
このMACアドレスの取得方法が見つかりません。
ソケット中には必ずクライアントソケット側のMACアドレスも
存在していると思うのですが、
Javaでそれを取得するAPIが無い?のは不思議です。
クライアントのMACアドレスの取得方法は存在するのでしょうか?
存在するのでしたらどうかご教授をお願い致します。
どうぞよろしくお願い致します。

A 回答 (1件)

MACアドレスが入っているイーサネットヘッダは、ネットワークインターフェース層(物理層+データリンク層)のみで識別可能です。



受信したデータがネットワークインターフェース層(物理層+データリンク層)から上位のネットワーク層に送られる時点で受信データからイーサネットヘッダが削除され、ネットワーク層以上の層ではMACアドレスは判らなくなります。

その為、アプリケーション層に存在するドライバやソフトは、MACアドレスを取得する機能を持ちません。

また、データがファイヤウォールやゲートウェイを通過する際にデータのヘッダが再構成されMACアドレスが付け変えられる可能性もあります(送信元MACアドレスが中継機器のMACアドレスに変わってしまう)

どうしてもMACアドレスを知りたい(MACアドレスでフィルタリングしたい)と言うなら、ネットワークボードをコントロールするネットワークインターフェース層(データリンク層)を自前で作成するしかありません。つまり、ネットワークボードのドライバーソフトを自作する事になります。

但し、ネットワークインターフェース層(データリンク層)の制御ソフトがネットワークボードに搭載されたROMの中にある場合は書き替える事が出来ないので、どうする事も出来ません。
    • good
    • 0
この回答へのお礼

ご丁寧な回等ありがとうございます。
受信したソケットの中身くらい全部把握出来てもいいのではないかと考えていましたが、無理なようですね。
また、中継で書き換えられてはどうしようもないですね。
送信元から正確なMACアドレスをアプリケーションレベルのパラメータとして送信してもらう以外に方法は無いですね。
本当にありがとうございました。

お礼日時:2004/02/26 14:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!