我们连接networking中的一些embedded式设备。 现在我正在寻找的是一种查找设备IP并识别它们的方法。 我们使用Windows PC,我即将编写一个应该这样做的C#工具。
我想发送一个udp广播,在确认ie是设备的ip,这将意味着设备需要一个守护进程runnig分配一个ip本身。
在设备上运行服务(如打印机),在PC上查找服务。
我读了一些像apipa,zeroconf,ipv4本地链接,bonjour,dns-sd,mdns,bonjour等的东西; 他们可以自动分配ip和在networking上发布服务。
我的问题是,有人可以推荐我什么对我的任务有好处? – 协议或服务在资源(内存/ CPU使用)上的使用应该较低。
– 有一些标准协议要使用吗?
– DNS是一个好主意,还是仅仅为了find一个设备的IP而重新分配消费资源?
– 当没有DHCP服务器时,也应该工作。
编辑:澄清一点:IPconfiguration是自动的。 要关注的问题是如何告诉PCnetworking中的哪个IP(或者在这个花瓶中只有一个直接连接)属于设备(身份)。
我的问题是,有人可以推荐我什么对我的任务有好处? – 协议或服务在资源(内存/ CPU使用)上的使用应该较低。 – 有一些标准协议要使用吗?
在以太网上检测设备(及其属性,如pipe理IP地址)的标准方法是使用LLDP 。
你可以在这里findlldp守护进程的列表
以太网Vlan中的所有主机将看到LLDP通告,因为它们被发送到多播MAC地址; 这也意味着LLDP通告的范围是一个Vlan。 如果你需要在Vlans上进行设备注册和检测,你需要build立你自己的IP公告协议… UDP对于传输是一个不错的select。
DNS是一个好主意,还是仅仅为了寻找一个设备的IP而重新分配消费?
如果你只是在寻找一个IP地址,而不关心你是否可以判断你的设备是否是你的embedded式系统,你可以使用mDNS ; 但是,由于您无法保证客户LAN中的命名空间冲突,因此这样做风险更大。
如果客户没有DHCP服务器,OP的embedded式系统应该如何获得IPv4地址?
如果DHCP服务器不可用,则RFC 3330为单个链路上的通信分配169.254.0.0/16。 经过反思,这可能是最安全的地址块使用; 然而,你的公司应该鼓励你的客户使用DHCP自己分配地址,而不是在169.254.0.0/16子网中进行某种forms的自动configuration。
如何在169.254.0.0/16内分配单独的IP地址是一个我们无法为您决定的问题…有几种可能性:
nmap实用程序非常擅长确定networking上的哪个IP地址(您select的!)被占用。 如果主机会回复任何validation其存在的请求,那么nmap将显示它。
否则,你可以摆弄ARP。 对于所有主要的操作系统,有几个实用程序可以做到这一点(在Win32上查找该Cain,在Linux上有很多)。 这些实用程序将发送一个ARP广播/“ping”到每个地址,询问是否有设备连接,如果是的话,它是什么IP。