1

仲間のプログラマーの皆さん、こんにちは。

これは長い質問になるので、我慢してください。

私は大学でプロジェクトを行っており、私の役割は基本的に無線LANを介したラップトップコンピューター間の通信に焦点を当てています。私が使用している言語は Java です。この通信では、ラップトップを別のラップトップに直接接続する必要はありません。したがって、1 台のコンピューターにアクセス ポイントを作成したと仮定します。他のコンピューターはアクセス ポイントに直接接続して IP アドレスを取得せず、単に IP ソケット経由で接続する必要があります。

したがって、オプションとして残っているのは、MACアドレスを介して接続することです. 私がこれまでに考えたことは、たとえば、私の MAC アドレス、IP アドレスを WLAN アダプターを介してリレーすることです。以前のネットワーキング クラスから、これらの情報を MAC アドレスのブロードキャスト チャネルに送信して、WLAN が開いているすべてのラップトップがそれを取得できるようにすることを考えました。次に、これらの情報をデータベースに保存すると、必要なときにいつでもデータベースから MAC アドレスと IP アドレスを抽出し、送信したい情報をブロードキャスト アドレスではなく特定の MAC アドレスに中継できます (したがって、特定の MAC アドレスのみがそれを取得し、カバレッジ エリア内の他のマシンはそれを取得できませんでした)。

私は、コンピュータ間で通信するこの方法は非常に便利であり、ソケット プログラミングはまったく必要ないだろうと考えました。ちなみに、プログラムではセキュリティは問題にならないので、MACアドレスやIPアドレスなどを直接中継することは問題視されていません。過去 2 週間、この概念について多くの調査を行いましたが、まったく成功しませんでした。私がこれまでに読んだことは、Java はネットワークのレイヤ 3 より下では機能しないということです。ただし、これまでに読んだことから、Java がレイヤー 2 で動作するのに役立つ外部ライブラリがいくつかありますが、どうにかしてそれらを自分のコンピューターで動作させることができませんでした。先生は私に独自の小さなプロトコルを作成するように勧めましたが、これまでのところ、ブロードキャスト メッセージを送信するように wlan アダプターを注文する方法がわかりませんでした。

私の質問は、

(1)ARPなどのJavaで特定のメッセージを特定のMACアドレスに送信するようにwlanアダプタに命令する方法は実際にありますか?

(2) これに役立つ便利な Java ライブラリはありますか? カスタム ARP パケット (送信したい情報を含む) を作成するなど、レイヤー 2 ネットワークで優位に立つ可能性があります。

4

2 に答える 2

0

私はあなたが何をしているのか完全には理解していません。ARP はデフォルトで有効になっており (ifconfig コマンドで無効にできます)、SIOCGARP などの ioctl を使用してカーネルの ARP テーブルを読み書きすることができます。 (もちろん、Java はそれを直接使用することはできません。JNI または JNA や Bridj などのより簡単なネイティブ ライブラリが必要です)。

独自のイーサネット/IP/ARP/その他の低レベルのネットワーク パケットを作成する必要がある場合は、https://code.google.com/p/netutils/を参照してください。

于 2013-04-03T18:05:20.240 に答える
0

レベル 2 ネットワーキングを直接使用するメリットはありません。人々は、IP をうまく機能させるために多大な労力を費やしてきました。レイヤー 2 を使用することの欠点は、root になる必要があることと、移植性がないことです。Javaでも直接可能ではありません。Cで書かれた拡張機能を作成/使用する必要があります.

単一のマシンにメッセージを送信する場合は、UDP パケットをその IP アドレスに送信します。多くのマシン (すべて、または一部のサブグループ) にメッセージを送信する場合は、UDP パケットをマルチキャスト グループに送信し、受信側のマシンをそのグループに参加させます。

于 2013-04-03T18:18:10.370 に答える