0

我正在尝试基于子类型进行服务发现。

例如,我正在运行 avahi-publish -s --domain=local --subtype="_ann._sub._http._tcp" "serviceName" "_http._tcp" 5353 "text Record"。

现在我正在查询子类型 ex:AT+MDNSSD=_ann,_sub,_http,_tcp,local。

但是来自 avahi-publish 的响应不包含子类型。我收到名称为“serviceNaem._http._tcp.local”的响应消息。

任何人都可以告诉我如何使用 avahi-publish 注册服务,以便我可以在资源记录中获得“serviceName._ann._sub._http._tcp.local”的响应。

4

2 回答 2

1

您可以使用<subtype></subtype>服务文件中的元素注册子类型(请参阅avahi.service 手册页 https://linux.die.net/man/5/avahi.service)。

以下示例适用于我:

<service>
    <type>_http._tcp</type>
    <subtype>_ann._sub._http._tcp</subtype>
    <name>MyService</name>
    <port>12345</port>
<service>
于 2017-05-08T14:18:46.360 回答
0

avahi-browse 没有明确列出子类型。但是,如果您知道要查找的内容,则可以对其进行过滤:

[localhost]$ avahi-publish -s --subtype=_ann._sub._http._tcp  serviceName _http._tcp 5353 &
[1] 3012

[localhost]$ avahi-browse -t _http._tcp
+ eth0 IPv4 serviceName                                   Web Site             local
[localhost]$ avahi-browse -t _ann._sub._http._tcp
+ eth0 IPv4 serviceName                                   Web Site             local

[localhost]$ kill 3012

如果您不发布子类型,则对其进行过滤将不会返回任何内容:

[localhost]$ avahi-publish -s serviceName _http._tcp 5353 &
[1] 3026

[localhost]$ avahi-browse -t _http._tcp
+ eth0 IPv4 serviceName                                   Web Site             local
[localhost]$ avahi-browse -t _ann._sub._http._tcp

[localhost]$ kill 3026

如果您使用 [wire|t]shark 查看流量,过滤端口 5353,您会看到您的子类型在 DNS 查询中作为 PTR 记录返回。

于 2014-01-03T23:02:41.823 回答