2016-05-10 11 views
1

UDPパケットをネットワークMACアドレスに送信する方法はありますか? DatagramSocketでもDatagramPacketでもこれを行う仕組みがあるようです。AndroidアプリからMACアドレスにUDPパケットを送信するにはどうすればいいですか?

+1

これらはありません。なぜあなたはこれが必要だと思いますか? – EJP

+0

@EJP私の理解では、DHCPクライアントは、ブロードキャストフラグを0に設定してIPアドレスを取得する前に、DHCPサーバからユニキャスト応答を要求することがあります。DHCPサーバは、DISCOVERメッセージで伝達されたMACアドレスに応答を送信することになっています。これについてあなたの説明を聞くのが大好きです。 – Hong

答えて

1

レイヤードネットワークスタックのため、最初の応答は、MACアドレスにUDPメッセージを送信できないことです。私の声明は、UDPデータグラムフィールドにMACアドレスを設定する手段がないことを意味します。 UDPデータグラムをIPアドレスとポートに送信できます。このIPアドレスは、ユニキャスト、マルチキャスト、またはブロードキャストにすることができます。

特定のMACアドレスにUDPデータグラムを送信する場合は、より複雑なソリューションを実装する必要があります(DHCPはより複雑なソリューションの例です)。

  • このNICからデータグラムを受信せずにMACアドレスにデータグラムを送信し、そのMACアドレスを知っている必要がある場合は、最初にレイヤ2を送信する必要がありますフレームをそのMACアドレスに割り当てます(レイヤ2プロトコルではMACアドレスを設定できます)。そのMACアドレスフレームをリッスンするプロトコルを実装し、対応するIPアドレスを返す応答を返すことができます。 RARPは、MACアドレスが与えられたIPを取得するプロトコルです。
  • マルチキャストグループを使用するプロトコルを実装できます。お使いのPCから、ターゲットとするMACアドレスを含むマルチキャストメッセージを送信します。そのマルチキャストグループに加入しているすべてのノード(ノード内のアプリケーション)は、そのメッセージを受信します。ターゲットMACアドレスを持つものが応答することができます。応答すると、そのIPアドレスを持ち、ユニキャストUDPデータグラムを送信できます。
+0

説明してくれてありがとう。私はMACアドレスにUDPパケットを送信する生のソケットについて読んだ。私はそれがAndroid用のJavaで行うことは不可能だと思います。 – Hong

1

短い答えはノーです。ネットワークstackは、ハードウェアアドレスがOSのメディアレイヤでアドレス可能であるように設定され、トランスポートレイヤがアプリケーションに公開されている定義済みのインターフェイスのみを使用します。低レベルのOSを利用する必要があります。あなたがJava内でこの呼び出しをしようとしているように見えますが、これを達成することはほとんどできません。

関連する問題