代码之家  ›  专栏  ›  技术社区  ›  Shane

Java-创建“BroadCaster”

  •  4
  • Shane  · 技术社区  · 9 年前

    我注意到路由器如何发送 区域内的广播数据包 ,以允许无线网络连接,从而允许网络访问。 我的问题是我们如何在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广播可以实现的端口广播不同,我们如何在 地区 就像路由器可以做的那样。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Community Dai    7 年前

    如果您是指原始以太网广播,则不能从纯Java实现。 (顺便问一下,你的问题是否与此重复: How can I read or get the information of the beacon frame that sent by the Access point in WLAN, by java or Android? )

    对于原始套接字,一种直接的方法(如果您知道将在什么平台上执行)是直接使用本机代码执行,并使用与Java系统其他部分的适当接口。

    一个更复杂的选项是将本机代码包装在java.net.Socket的子类中,这为代码的其余部分提供了一个标准接口,但这可能很棘手,具体取决于您希望实现多少Socket接口,以及您可以在多大程度上依赖于用于寻址的约定以及调用代码是否正确。

    第三种选择是将现有库用于原始以太网,请参见例如。 答案

    有关打开原始套接字的特权的简要讨论。, send/receiving raw ethernet frames

    使现代化 :有关以太网(编程)的更多详细信息请参阅评论中的问题。

    首先,维基百科关于以太网框架的文章很好地介绍了该协议: http://en.wikipedia.org/wiki/Ethernet_frame .

    关于编程,枯燥的答案是阅读SOCK_RAW,从套接字(2)的手册页开始。创建一个原始套接字后,基本上创建一个帧(作为字节数组),并使用write(2)或sendto(2)发送它,使用read(1)或recvfrom(2)进行读取。在创建以太网帧时,请使用维基百科文章来获取正确的格式。

    对于Python编程,我得到的“原始以太网Python”的前3个谷歌结果是

    这似乎是一个合理的起点。

    对于更全面的文章, http://www.binarytides.com/python-packet-sniffer-code-linux/ 也许值得一读。

    推荐文章