クライアントソケットMACアドレスの取得方法

このQ&Aのポイント
  • JavaでクライアントソケットのMACアドレスを取得する方法について知りたいです。
  • 現在、Java製のアプリケーションサーバを作成しており、MACアドレスによるフィルタリングが必要ですが、その取得方法が分かりません。
  • クライアントのMACアドレスを取得するAPIが存在する場合、使い方を教えていただけませんか?
回答を見る
  • ベストアンサー

クライアントソケットMACアドレスの取得方法

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

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

MACアドレスが入っているイーサネットヘッダは、ネットワークインターフェース層(物理層+データリンク層)のみで識別可能です。 受信したデータがネットワークインターフェース層(物理層+データリンク層)から上位のネットワーク層に送られる時点で受信データからイーサネットヘッダが削除され、ネットワーク層以上の層ではMACアドレスは判らなくなります。 その為、アプリケーション層に存在するドライバやソフトは、MACアドレスを取得する機能を持ちません。 また、データがファイヤウォールやゲートウェイを通過する際にデータのヘッダが再構成されMACアドレスが付け変えられる可能性もあります(送信元MACアドレスが中継機器のMACアドレスに変わってしまう) どうしてもMACアドレスを知りたい(MACアドレスでフィルタリングしたい)と言うなら、ネットワークボードをコントロールするネットワークインターフェース層(データリンク層)を自前で作成するしかありません。つまり、ネットワークボードのドライバーソフトを自作する事になります。 但し、ネットワークインターフェース層(データリンク層)の制御ソフトがネットワークボードに搭載されたROMの中にある場合は書き替える事が出来ないので、どうする事も出来ません。

Murphy
質問者

お礼

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

関連するQ&A

  • MACアドレスを取得する方法はありますか?

    クライアントのMACアドレスを取得する方法はありますか? ご存知の方見えましたら教えてください。

  • クライアント情報の取得について(Win32API)

    同一ドメイン内に接続されているクライアント情報をサーバで取得したいのです。 サーバ上でサービスとして動作させています。ドメイン内にあるクライアントの 情報を取得したいと思っています。取得したい内容は、 1.コンピュータ名 2.ユーザ名(クライアントがログインしている時のユーザ名) 3.IPアドレス 4.MACアドレス の4つです。この4つのクライアント情報をサーバ側で取得したいのですが。 これら取得に関するWin32APIはありますか? プログラミング環境は、C言語(VisualC++)です。

  • 体組成計のMACアドレスの取得方法

    WiFiルーターでMACアドレスによるフィルタリングをしています。体組成計のMACアドレスの取得方法を教えてください。 ※OKWAVEより補足:「エレコム株式会社の製品」についての質問です。

  • Macアドレスを取得するには

    ユーザを認証するページを作っているのですが、認証してくるクライアントのMACアドレスをどうしても取得したいのですが、どうしたらいいのでしょうか?

  • Macアドレスを取得するには

    ローカルエリア内でユーザを認証するページを作っているのですが、認証してくるクライアントのMACアドレスをどうしても取得したいのですが、どうしたらいいのでしょうか?

  • DHCPクライアントで過去に取得したIPアドレスの取得方法(Win7)

    DHCPクライアントで過去に取得したIPアドレスの取得方法(Win7) Windows7でIPアドレスが自動取得の設定になっているのですが、 過去にDHCPサーバから割り振られたIPアドレスってクライアントのログに残っているんでしょうか?

  • ソケット通信にてサーバ日時を取得する方法?

    ソケット通信にて(send及びrecv)でクライアントからサーバのタイム情報を取得する方法はありますか?

  • アクセス元PCのMACアドレス取得方法

    どのカテで相談するべきか悩みましたが、Webについて こちらを見られている方がお詳しそうだったのでAJAX 限定と言う訳ではありませんがこちらに 質問させていただきました。 アクセス元PCのMACアドレスの取得をしたいのですが、 通常のやり方では、間にルータが入る以上取得不可能と言う 事は認識しておりますが、アクセス元のPC内でMACアドレス を記録して送信してもらうようなプログラムをWeb上又はローカル クライアントから実行してもらいそれを、サーバ側で取得する 方法では可能になりませんでしょうか? もし、別の方法でも可能であればその手順等を教えて頂けません でしょうか? ※実装に関しては、別途質問を立てたいと思いますので、 簡潔な情報で構いません。

    • ベストアンサー
    • AJAX
  • 利用者側のMACアドレスを取得したい

    いま PHP を使ってウェブサイトを構築しており、 認証として利用者のMACアドレスを取得したいと思っています。 LAN 内であれば http://www.phpclasses.org/browse/file/7704.html 等を利用して取得できるようですが、 当たり前ですが LAN の外の方との通信では取得ができません。 JavaScript を使ってクライアント側の MACアドレスを取得してしまう という方法があると聞いたことがあるのですが、 検索しても見つけ出すことができませんでした。 ご存じの方、お教え頂けますでしょうか? よろしくお願い致します。

  • サーバーからクライアントのMACアドレスを取得

    ASPを使用して、サーバーからクライアント側の ネット情報などを取得したいのですが、できるのでしょうか? 今現在WMIを使用してクライアントからサーバーのMACアドレスを 取得できているのですが、逆の事もできるのではと考えました。 <HTML> <HEAD> <TITLE>MACアドレスの表示</TITLE> </HEAD> <BODY> <Form method="post" name="form1"> <input type="hidden" name="h_MACaddress" value="<%= MACA %>"> <% Dim MACA ConnectString = "winmgmts:{impersonationLevel=impersonate}!root\cimv2" Query = "SELECT MACaddress " Query = Query & " FROM Win32_NetworkAdapterConfiguration" Query = Query & " WHERE IPEnabled=TRUE" On Error Resume Next Set IPConfigSet = GetObject( ConnectString ).ExecQuery( Query ) if Err <> 0 Then 'エラー発生表示 if Err.Number = -2147217405 then Response.Write "Error 0x80041003: Access Denied: " Response.Write "Check permissions and file security for this ASP file." Response.Write "<BR>" else Response.Write "エラー説明: " Response.Write Err.Description Response.Write "エラー番号: " Response.Write Err.Number Response.Write "<BR>" end if end if For each IPConfig in IPConfigSet 'MACアドレス取得処理 Response.Write("MACADDRESS: ") Response.Write(IPConfig.MACaddress & "<br>") MACA = IPConfig.MACaddress Next 'Response.write("aaa:" & MACA & "<BR>") 'MACアドレスの変数 Response.Write "<BR>" if Err <> 0 Then 'エラー発生表示 Response.Write "エラー説明: " Response.Write Err.Description Response.Write "エラー番号: " Response.Write Err.Number Response.Write "<BR>" end if %> </BODY> </HTML> プログラムはこのようなものを使用しております。 できるできないだけでも知りたいので、 分かる方いらっしゃいましたら教えていただけますでしょうか? 宜しく御願い致します。

専門家に質問してみよう