在Linux局域网下唯一定位一台机器的技巧(不需要samba)

最近做智能家居,需要知道智能家居网关(wifi转zigbee,以下简称网关屏)的ip(DNS动态分配)

一开始想的办法是遍历子网内所有机器,每个机器都尝试链接其5005端口,能连上就算找到了,但明显效率太低

还想出个办法是获取路由器上的主机列表,考虑到每个路由器的登陆方式都不尽相同,扩展性差,放弃

最后想着写个广播自身ip的程序,然后上传到网关屏上,上电自动执行,这样客户机就收到了。但没成想网关屏的arm工具链不是gnu的,交叉编译的程序运行不正常,放弃

在调试上面说的广播程序时,想到除了工具链问题外,机器本身对广播的禁止响应也是因素之一?于是在网管屏上ping广播地址

ping 192.168.0.255

结果只有路由器回应了我,客户机并没有回应,难道客户机没收到?搜索ping的相关 资料,原来ping命令发出的广播icmp消息到链路层被放到以太网的广播地址,就是

ff:ff:ff:ff:ff:ff

这个消息在客户机的tcp/ip协议栈向上传递的过程中,默认是被过滤掉的,这就是为什么局域网里广播ping时,只有路由器搭理你的原因

不过这倒给了我一个灵感:如果让网关屏也搭理我,那ping命令返回的主机就只剩下2个,除了NPC路由器外,剩下的一定是网关屏了,直接就找到了!


想要网关屏搭理你也很简单,修改网关屏的内核参数即可。修改方法

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

修改后,从客户机ping广播地址

haipeng@wang:~$ ping -b 192.168.0.255
WARNING: pinging broadcast address
PING 192.168.0.255 (192.168.0.255) 56(84) bytes of data.
64 bytes from 192.168.0.100: icmp_req=1 ttl=64 time=0.953 ms
64 bytes from 192.168.0.1: icmp_req=1 ttl=255 time=1.90 ms (DUP!)
64 bytes from 192.168.0.100: icmp_req=2 ttl=64 time=0.361 ms
64 bytes from 192.168.0.1: icmp_req=2 ttl=255 time=0.531 ms (DUP!)
64 bytes from 192.168.0.100: icmp_req=3 ttl=64 time=0.346 ms
64 bytes from 192.168.0.1: icmp_req=3 ttl=255 time=0.523 ms (DUP!)
64 bytes from 192.168.0.100: icmp_req=4 ttl=64 time=0.350 ms
64 bytes from 192.168.0.1: icmp_req=4 ttl=255 time=0.523 ms (DUP!)
^C
--- 192.168.0.255 ping statistics ---
4 packets transmitted, 4 received, +4 duplicates, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.346/0.685/1.900/0.495 ms
可以看到,路由器(192.168.0.1)和网关屏(192.168.0.100)都给ping命令应答了


另外,修改内核参数的命令最好放到网关屏的rc启动脚本里,这样每次上电都是自动响应广播的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值