Tan*_*jan 5 android mdns multicast ipv4 ipv6
我正在尝试使用多播 DNS 从“.local”解析 IPv4 和 IpV6,我尝试了https://github.com/posicks/mdnsjava但它无法解析所需的 ipv4/ipv6。或者,我找到了一个适合我的应用程序,但不知道它是如何工作的。
应用程序链接: https://play.google.com/store/apps/details? id=com.dokoden.dotlocalfinder
另外,我尝试使用Linux
“终端 -
用于解析 ipv4 的命令”用于
avahi-resolve-host-name abc.local -4
解析 ipv6 的命令来解析
“.local” avahi-resolve-host-name abc.local -6
,并且已成功解析。
我在 Android 中尝试了相同的命令来解析“.local”,但得到Cannot run program “avahi-resolve-host-name”: error=13, Permission returned
我正在 Android 中尝试这段代码 -
Process process = Runtime.getRuntime().exec("avahi-resolve-host-name abc.local -4");
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
Log.d("OutPut",in.readLine());
Run Code Online (Sandbox Code Playgroud)
最后,我成功了。
我使用mdnsjava依赖项解析了 Ipv4 和 Ipv6
implementation "xyz.gianlu.mdnsjava:mdnsjava:2.2.1"
Run Code Online (Sandbox Code Playgroud)
为了解析 Ipv4,我使用这个代码片段
for (Record record : new Lookup(localName, Type.A, DClass.IN).lookupRecords()) {
if (record.getType() == Type.A) {
((ARecord) record).getAddress().getHostAddress();
}
}
Run Code Online (Sandbox Code Playgroud)
在编写此代码片段之前,您必须使用以下命令将 MuticastLock 放在连接的 Wifi 上
WifiManager.MulticastLock multicastLoc = wifiManager.createMulticastLock("mDnsLock");
multicastLoc.setReferenceCounted(true);
multicastLoc.acquire();
Run Code Online (Sandbox Code Playgroud)
并在获取ip后释放multicastLock。
对于 Ipv6,我仅在此处使用相同的 Ipv4 代码片段,记录类型应Type.AAAA
代替Type.A
此代码适用于 Android 10。
归档时间: |
|
查看次数: |
2982 次 |
最近记录: |