4

ルーターがエリア内でブロードキャストパケットを送信して、ワイヤレスネットワーク接続を許可し、ネットワークアクセスを許可する方法に気付きました。私の質問は、Javaでこのようなものをどのように実装できるでしょうか? 「UDPブロードキャスト」の方法は知っていますが、それは特に私がやりたいタイプのブロードキャストではありません。

import java.net.*;

class Broadcast{ //Example of UDP Broadcast Server
     public static void main(String[] args){
          DatagramSocket broadcastserver = new DatagramSocket(80);
          broadcastserver.setBroadcast(true);
          ...
          ...

結論として、UDP ブロードキャストのようにポートでブロードキャストする代わりに、ルーターのようにエリア内でブロードキャストするにはどうすればよいでしょうか。

4

1 に答える 1

2

生のイーサネットブロードキャストを意味する場合、純粋なJavaからはできません。(ところで、あなたの質問はこれの複製ですか:WLANのアクセスポイント、JavaまたはAndroidによって送信されたビーコンフレームの情報を読み取るまたは取得するにはどうすればよいですか?

raw ソケットの場合、(実行するプラットフォームがわかっている場合) 簡単な方法は、残りの Java システムへの適切なインターフェイスを使用して、ネイティブ コードで直接実行することです。

より複雑なオプションは、ネイティブ コードをサブクラスで java.net.Socket にラップすることです。これにより、コードの残りの部分に対する標準インターフェイスが提供されますが、実装する Socket インターフェイスの量と実装方法によっては注意が必要な場合があります。アドレッシングの規則に依存する余裕があり、呼び出しコードが正しいことを確認します。

3 番目のオプションは、生のイーサネットに既存のライブラリを使用することです。たとえば、次の回答を参照してください。

raw ソケットを開くための特権の簡単な説明については、たとえば、 raw イーサネット フレームの送信/受信を参照してください。

更新: イーサネット (プログラミング) に関する詳細: コメントで質問。

まず、イーサネット フレームに関するウィキペディアの記事 ( http://en.wikipedia.org/wiki/Ethernet_frame ) は、プロトコルの優れた紹介です。

プログラミングに関しては、socket(2) の man ページから始めて、SOCK_RAW について読むのが退屈な答えです。raw ソケットを作成した後、基本的にフレームを (バイト配列として) 作成し、write(2) または sendto(2) のいずれかを使用して送信し、read(2) または recvfrom(2) で読み取ります。ウィキペディアの記事を使用して、イーサネット フレームを作成するときに適切な形式を取得してください。

Python でのプログラミングの場合、「raw ethernet python」の上位 3 つの Google 検索結果は次のとおりです。

それは合理的な出発点のようです。

もう少し包括的な記事については、 http: //www.binarytides.com/python-packet-sniffer-code-linux/ を読む価値があります。

于 2015-03-31T09:44:19.447 に答える