Java - 创建 "BroadCaster"

Java - Creating "BroadCaster"

我注意到路由器如何在一个区域内发送广播数据包,以允许无线网络连接,从而允许网络访问。 我的问题是我们如何在 java 中实现这样的东西?我知道我该怎么做 "UDP Broadcast",但这并不是我想要做的具体广播类型。

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广播那样在端口上广播。

如果你指的是原始以太网广播,你不能从纯 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 接口实现,以及你能负担多少依赖于寻址约定和调用代码是正确的。

第三种选择是使用现有的原始以太网库,例如参见

的答案
  • Java library for Raw Ethernet

  • How to send Ethernet-Frames in Java without TCP/IP Stack

有关打开原始套接字的权限的简要讨论,请参阅例如, send/receiving raw ethernet frames

更新:有关以太网(编程)的更多详细信息回复:评论中的问题。

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

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

对于 Python 中的编程,我得到的 "raw ethernet python" 的前 3 google 个结果是

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

要获得更全面的文章, http://www.binarytides.com/python-packet-sniffer-code-linux/ 可能值得一读。