1

问候各位程序员,

这将是一个很长的问题,所以请耐心等待。

我在大学做一个项目,我的部分主要集中在笔记本电脑之间通过无线局域网的通信。我使用的语言是 Java。这种通信不应要求任何笔记本电脑直接连接另一台笔记本电脑。因此,假设我在一台计算机上创建了一个访问点,其他人不应直接连接到它并获取 IP 地址,然后只需通过 IP 套接字进行连接。

因此,剩下的选择是通过 MAC 地址进行连接。到目前为止,我想到的是通过 wlan 适配器中继,例如,我的 MAC 地址、IP 地址。从我以前的网络课程中,我想到将这些信息发送到 MAC 地址的广播通道,以便任何打开 wlan 的笔记本电脑都能得到它。然后,如果我将这些信息保存在数据库中,每当我需要时,我可以从数据库中提取 MAC 地址和 IP 地址,将我想要发送的信息中继到特定的 MAC 地址而不是广播地址(因此只有特定的 MAC 地址可以得到它并且覆盖区域内的其他机器无法得到它)。

我认为,这种在计算机之间进行通信的方式将被证明是非常有用的,我们根本不需要任何套接字编程。顺便说一句,在程序中,安全性不是问题,因此 MAC 地址、IP 地址等的直接中继不被视为问题。在过去的两周里,我对这个概念进行了很多研究,但我一点也不成功。到目前为止,我所读到的是,Java 无法在网络中的第 3 层以下工作。但是,到目前为止,有一些外部库可以帮助 Java 与第 2 层一起工作,但我无法以某种方式使它们在我的计算机中工作。我的老师建议我创建自己的小协议,但到目前为止我不知道如何命令 wlan 适配器发送广播消息。

我的问题是,

(1)实际上有没有一种方法可以命令 wlan 适配器将特定消息发送到 Java 中的特定 MAC 地址,例如 ARP。

(2) 是否有任何有用的 Java 库可以帮助解决这些问题?例如,创建自定义 ARP 数据包(包含我想在其中发送的信息)或类似的东西,这可能会给我在第 2 层网络中的优势。

4

2 回答 2

0

直接使用 2 级网络没有任何好处,人们为使 IP 工作得非常好付出了很多努力。使用第 2 层的一些缺点是您需要是 root 并且它是不可移植的。在 Java 中也不能直接实现,您需要编写/使用用 C 编写的扩展。

如果要向单台机器发送消息,请将 UDP 数据包发送到其 IP 地址。如果您想向多台机器(全部或某些子组)发送消息,则将 UDP 数据包发送到多播组并让接收机器加入该组。

于 2013-04-03T18:18:10.370 回答
0

我不完全明白你在做什么。默认情况下启用 ARP(您可以使用 ifconfig 命令禁用它),您可以使用像 SIOCGARP 之类的 ioctl 读取和写入内核的 ARP 表来读取 ARP 表并在必要时发送 ARP,以及 SIOCSARP 设置 ARP 表条目(当然,Java 不能直接使用它,您需要 JNI 或更简单的本地库,如 JNA 或 Bridj)。

如果您确实需要创建自己的以太网/IP/ARP/其他低级网络数据包,请查看https://code.google.com/p/netutils/

于 2013-04-03T18:05:20.240 回答