- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试编写一个小程序,将 mDNS CNAME 别名添加到我的 Linux 设备,以便可以通过多个“something.local”访问它。域名。
此程序的预期功能与 avahi-aliases Python script 相同,但为了避免依赖 Python,我尝试用 C++ 来实现它。
我的代码(目前)基于 Avahi 源代码分发中包含的 client-publish-service.c 示例。当我不加改动地运行该示例时,它按预期工作:特别是,我看到“MegaPrinter”出现在我的 Mac 等设备上的 Bonjour 浏览器中。
我的下一步是修改示例代码以添加 CNAME 记录而不是添加服务。所以我 #ifdef 取消了 avahi_entry_group_add_service() 调用并将其放入:
const int TTL = 60;
char rdata[] = "\0msli-10135114\0local"; // "msli10135114.local." is the device's normal FQDN, which I want to make aliases to
rdata[0] = 13;
rdata[14] = 5;
printf("rdata=[%s] _moduleName=[%s]\n", rdata, _moduleName);
printf("add_record: %s\n", avahi_strerror(avahi_entry_group_add_record (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, (AvahiPublishFlags)0, "TestX", 0x01, 0x10, 120, "\5booya", 6)));
if ((ret = avahi_entry_group_add_record(
group, //AvahiEntryGroup *group,
AVAHI_IF_UNSPEC, //AvahiIfIndex interface,
AVAHI_PROTO_UNSPEC, //AvahiProtocol protocol,
(AvahiPublishFlags)0, //AvahiPublishFlags flags,
_moduleName, //const char *name,
AVAHI_DNS_CLASS_IN, //uint16_t clazz,
AVAHI_DNS_TYPE_CNAME, //uint16_t type,
TTL, //uint32_t ttl,
rdata, //const void *rdata,
sizeof(rdata) //size_t size
)) < 0)
{
if (ret == AVAHI_ERR_COLLISION) goto collision;
fprintf(stderr, "Failed to add module record: %s\n", avahi_strerror(ret));
goto fail;
}
.... 但它不起作用;特别是,运行例程只会给我这个输出:
msli-10135114local] _moduleName=[Wild-Tracks-1]
add_record: Not supported
Failed to add module record: Not supported
奇怪的是,不仅我自己对 avahi_entry_group_add_record() 的调用失败并返回代码 AVAHI_ERR_NOT_SUPPORTED,而且我的一次性测试调用(在 printf("add_record") 内)也失败并返回相同的错误代码。但是这个调用是从 Avahi 附带的 avahi-client/client-test.c 文件中逐字复制的,所以它看起来应该是一个有效的调用。
谁能提出为什么这些调用可能会失败,或者我在这里做错了什么?
如果有帮助,完整的测试源代码是here .
最佳答案
我终于弄明白了……问题是 avahi_entry_group_add_record 的 (AvahiPublishFlags) 参数需要包含 AVAHI_PUBLISH_USE_MULTICAST 位,而不仅仅是零。奇怪的是,我用作示例的 Python 脚本不包含该位。
无论如何,源代码的工作版本是here ,以防万一有人感兴趣。
关于c++ - 为什么此 Avahi 客户端代码无法将 CNAME 别名添加到我的 Linux 机器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3963902/
偶尔,我注意到我无法检测到我在 Ubuntu 上通过 avahi (bonjour) 发布的服务。例如,avahi-browse -a 不显示发布的服务,浏览器不解析发布的 .local 主机名。在服
上下文:我已经在域根上设置了一个用于 GIS 测试和 dokuwiki 的虚拟机服务器。我想在子域上提供 gis Web 应用程序,这样 dokuwiki url 重命名就不会发生冲突(而且感觉更干净
我有一个 avahi(zeroconf、dnssd、bonjour)服务。我希望该服务能够在有新数据时通知客户端,以便客户端可以连接并查询更新的信息。 服务应该发布什么类型的消息,以及如何使用 ava
我正在运行一个基于ubuntu:14.04的容器,我需要能够在其中使用avahi-browse。然而: (.env)root@8faa2c44e53e:/opt/cluster-manager# av
已关注 this example当我获取所有元素并将它们返回到列表中时,我想停止服务。 停止无限循环就是调用gobject.MainLoop().quit(),但是不知道何时何地调用。谢谢 最佳答案
我读过 example code但我似乎找不到线程轮询的退出条件。 有什么线索吗? 最佳答案 看起来线程循环会一直运行,只要你不调用: avahi_threaded_poll_stop(threade
我正在尝试编写一个程序来输出可以通过 avahi 通过网络提供的数据。我看过的文档似乎说我必须使用 dbus 注册服务,然后将其连接到 avahi,但是执行此操作的文档非常少。有谁知道它的好文档?我一
背景 我正在为 Haskell 开发一个跨平台的 Zeroconf/Bonjour/DNS-SD 库,我认为我最好的选择是针对 dns_sd.h应用程序接口(interface)。在Linux下,这个
Avahi 通常用于服务发现。我想让服务可从不同的子网发现,我可以使用 avahi 来实现吗? 例如,服务主机ip为“192.168.1.100”,掩码为“255.255.255.0”,所以它在192
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我正在尝试启动 avahi-daemon 但它响应错误 Failed to create runtime directory /opt/var/run/avahi-daemon/ 该目录确实存在。 即
我正在通过其他运行 windows-xp 的机器创建 JmDNS 服务 JmDNS dns = JmDNS.create("localhost"); dns.regesterService("_sre
我正在使用带有 avahi 命令行工具(版本 0.6.31)的 Fedora 18 我使用 avahi-resolve-host-name 来发现我子网上单元的 IP 地址,用于开发期间的测试目的。我
我正在尝试使用 python 开发客户端/服务器解决方案,服务器必须使用 Avahi 广播服务可用性。我正在使用以下代码发布服务: import avahi import dbus __all__ =
我正在编写一个 C++ 库,除其他外,它需要: 使用 AVAHI 在网络中搜索特定服务 使用 AVAHI 将自身发布为服务 我一直在寻找现有的选择。我发现 POCO C++ 的创建者提供了一个 DNS
我在获取链接本地地址(ipv4ll)时遇到问题。我按照以下步骤来实现这一目标。 首先,设置正确的路由以使用链接本地寻址。 $ route add default dev eth0 metric 99
我们有 hadoop 集群,hadoop 版本 - 2.6.X & ambari 版本 - 2.5.0.X avahi-daemon 服务应该在 hadoop 集群机器上作为(master/worke
在过去的几天里,我一直在努力将 avahi 构建到静态或共享库中以用于现有的 Android NDK 项目。 我们在 App 和 Play 商店中有一些游戏,我的任务是让多人游戏在 Android 版
我想通过HTTP查询avahi-daemon的mdns数据库。有办法做到这一点吗? 最佳答案 在花了一些时间研究源代码并且没有偶然发现上述功能之后,我相信当前的 Avahi (0.6.23) 没有实现
背景: 我正在尝试在不需要 DHCP 服务器的情况下与 IP 摄像机通信。这是相机获取 IP 地址的方式: 基本的 DHCP 程序(发现等) 如果上述方法失败,相机的后备地址为 192.168.0.9
我是一名优秀的程序员,十分优秀!