实在闲的没事干,想鼓捣一下几年前没有彻底搞明白的dnsmasq,几年前我认为vs985手机里的dnsmasq编译选项里缺少了东西,所以dhcp-match选项功能不正常,大概是这样,具体情况记不清了。
我现在用的v300l 刷的是crdroid,dnsmasq是2.51版本,终端模拟器里执行dnsmasq -x /sdcard/a/pid -C /sdcard/a/dns -dR,开始没有-d选项,用命令bg 1%切换到后台,显示stop,到现在也没有搞明白为什么stop。
因为搞不明白的东西太多了,所以不能什么都搞明白,把这个dnsmasq搞明白就用了两天时间。前几天安卓otg模拟u盘正常,模拟usb-cdrom怎么都不行,百度,再不行谷歌,也鼓捣了很长时间放弃了,我感觉很多东西都是无解。很多看似简单的东西,其实都费尽了九牛二虎之力才搞懂。6527,6538学习机处理器,如何显示超过显存容量的字符,很多年前一直琢磨不透,也看了不少资料一直无解。去年闲的没事干终于琢磨明白了,很多年的难题,一朝破解,太痛快,但是……也没有什么实际价值。20年前高中一道物理题,说半波整流的用电器的功率是不经整流的功率的四分之一,我百思不得解,10几年前我闲的没事干问我一个同学,他说电流是原来的一半,电压也是原来的一半了。后来我一直都认为他说的是正解,去年闲的没事干,百度搜,有人说是不整流功率的二分之一。我又实际用功率表测了一下。终于明白20年前的教材是错的。
上边命令参数里的配置文件dns里边是:
no-hosts
dhcp-range=192.168.123.10,192.168.123.88,12h
#pxe-prompt="ddd"
#pxe-service=X86PC,"ff",hhh
#pxe-service=X86-64_EFI,"f4f",hhh
#pxe-service=X86PC,"f888f",hhh
dhcp-match=set:Hhhh,option:client-arch,0
dhcp-match=set:Kkk,0
#dhcp-vendorclass=set:bbb,PXEClient:Arch:00000
dhcp-match=set:kk,93,2
dhcp-boot=tag:kk,fddf
dhcp-boot=tag:Hhhh,ffff
dhcp-boot=tag:Kkk,fd5df
dhcp-boot=tag:bbb,fd6df
#pxe-service=X86PC,"f888f",hhh
用虚拟机vbox的pxe测试 总是不能match,总是执行最后的tag:bbb 。 显示tag:bbb no such file , 从这个提示看出它把“tag:bbb”看成了一个文件名,是不是这个版本也不支持match,运行dnsmasq命令显示编译时参数no-scripts 是不是这个选项造成的 。 还有一个线索 , “pxe-service=X86PC,"ff",hhh” 这个菜单命令 可以匹配“x86pc”说明这个版本有匹配功能,或者有没有可能是把菜单发到客户端 然后客户端匹配后显示的。
然后我用刷openwrt的路由器测试dnsmasq命令 也不正常。
然后我用虚拟机里的tinycore linux测试 开始没有上边文件的最下边一行 我想各种办法 把“no-host”注释掉 向末尾添加行 后来一个”tag:!kk“ 匹配成功 然后去掉最下边行 也没问题 去掉注释没问题,最后也没搞清开始为什么不正常。“dhcp-range”这一行在安卓上是必须的 , 如果缺少这行没有任何提示 , 不工作。
然后我又用openwrt测试也正常,再用安卓还是死活不行。闲的没事干,百度,谷歌,谷歌,百度。
我对把“tag:bbb”看成文件名 感觉思路越来越清晰 肯定是安卓的版本跟linux的语法不同
我都想自己重新编译 ,可是我知道难度有多大。我还下载了apk的pxe应用,打算从apk里提取dnsmasq,有的是用的系统里的dnsmasq ,有的是用udhcpd,有的是用java编写的。都没有match功能。
最后我谷歌搜索”android dhcp-match“ 找到了源代码 https://android.googlesource.com/platform/external/dnsmasq/+/refs/tags/android-11.0.0_r43源代码里有说明文档 配置文件的语法跟Linux是不同的。安卓版本没有tag这个符号,用net代替. 也不用set。
这就是我经历的坎坷波折!
几天之后,我又在dnsmasq的官方使用手册发现底部写着:“这个系统是从更早的、更有限的系统演变而来的,为了向后兼容,可以使用“net:”代替“tag:”,并且可以省略“set:”。(除了在 --dhcp-host 中, 可以使用“net:”代替“set:”。)出于同样的原因,可以使用“#”代替“!” 表示不是。”