0

我正在设计安装在客户端网络上的设备。目前,全世界安装了大约 180 台设备。一个主要问题是稍后访问它们以进行调试。

语境 :

所有设备的工作方式相同。

  • 操作系统是 Linux
  • 默认模式是 DHCP,但有时是静态 IP

目前获取地址的方法是:

使用任何可用的远程桌面软件登录客户端的计算机并搜索:

  • 路由器租约表中的 DHCP 地址(大多数时候客户端不知道他们的凭据)
  • 愤怒的 IP 扫描仪,扫描端口 22(慢)
  • ping 设备的名称(并不总是有效)

期待:

实际上,我知道可以通过在网络上广播而在不知道其 IP 地址的情况下与网络上的设备进行通信,但还没有找到任何示例或起点。我想编写一个能够在网络上广播的小型 Java 程序:

  • 列出每个设备及其 IP
  • 为设备和/或其他功能分配 IP 地址

记住:我想找到没有键盘、屏幕或其他 UI 的设备。如果我从客户端(出于调试目的)收到一个配置为例如 10.1.1.100 的单元并且我的计算机位于 192.168.1.110(在同一交换机上),我希望能够首先知道它的 IP 地址设备,其次,能够发送 SET IP 命令(一旦我能够发送数据,我将管理如何处理它)。

对于设备的服务器部分,我不介意,它可以用 C++ 或脚本完成……这可能需要回答广播和接收请求。

到目前为止,我已经能够创建一个小型 UDP 客户端和服务器。

Java 中的客户端使用DatagramSocket,C 中的服务器使用recvfrom().

此解决方案的问题是我的计算机需要与设备具有相同的网络掩码,例如:

  • 设备有 192.168.2.217
  • 电脑有 192.168.1.110
  • 我的电脑需要 255.255.0.0 作为网络掩码,否则我将无法广播 192.168.255.255。

搜索更多,需要将本地计算机网络掩码更改为meed广播范围似乎是Java的限制......

new DatagramPacket(sendData, sendData.length, InetAddress.getByName("255.255.255.255"), PORT); // not working
new DatagramPacket(sendData, sendData.length, InetAddress.getByName("192.168.255.255"), PORT); // working only if netmask is 255.255.0.0

我认为我需要更深入地研究网络协议才能按照我想要的方式去做,而且我知道这是可能的。

4

0 回答 0