通过网络进行通信,而无需了解设备IP地址

时间:2013-06-07 06:13:54

标签: java c linux ethernet

我正在设计安装在客户端网络上的设备。目前,全世界大约安装了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客户端和服务器。

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

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

  • 设备有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

我想我需要更深入地使用网络协议来按照我想要的方式进行,并且我知道这是可能的。

0 个答案:

没有答案