我在arm上构建了一个根文件系统.它应该运行dbus-daemon和avahi-daemon,但是当我尝试运行时avahi-daemon
$ dbus-daemon --system
$ avahi-daemon
Run Code Online (Sandbox Code Playgroud)
我收到这条消息:
Found user 'avahi' (UID 4) and group 'avahi' (GID 4).
Successfully dropped root privileges.
avahi-daemon 0.6.28 starting up.
WARNING: No NSS support for mDNS detected, consider installing nss-mdns!
dbus_bus_request_name(): Connection ":1.0" is not allowed to own the service "org.freedesktop.Avahi" due to security policies in the configuration file
WARNING: Failed to contact D-Bus daemon.
avahi-daemon 0.6.28 exiting.
Run Code Online (Sandbox Code Playgroud)
怎么了?是关于dbus配置吗?
我正在尝试使用python开发客户端/服务器解决方案,服务器必须使用Avahi广播服务可用性.我使用以下代码发布服务:
import avahi
import dbus
__all__ = ["ZeroconfService"]
class ZeroconfService:
"""A simple class to publish a network service with zeroconf using
avahi.
"""
def __init__(self, name, port, stype="_http._tcp",
domain="", host="", text=""):
self.name = name
self.stype = stype
self.domain = domain
self.host = host
self.port = port
self.text = text
def publish(self):
bus = dbus.SystemBus()
server = dbus.Interface(
bus.get_object(
avahi.DBUS_NAME,
avahi.DBUS_PATH_SERVER),
avahi.DBUS_INTERFACE_SERVER)
g = dbus.Interface(
bus.get_object(avahi.DBUS_NAME,
server.EntryGroupNew()),
avahi.DBUS_INTERFACE_ENTRY_GROUP)
g.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC,dbus.UInt32(0),
self.name, self.stype, self.domain, self.host,
dbus.UInt16(self.port), self.text)
g.Commit()
self.group = g
def …Run Code Online (Sandbox Code Playgroud) 我试图检测我的iPhone是否与我的Raspberry Pi在同一网络中.我想在家里执行脚本,我的iPhone在我的局域网中注册.
似乎当手机处于待机状态时,甚至找不到iphone同步端口(6207/tcp)."/ usr/bin/nmap -n -sT -p62078 [我的手机的本地IP]"显示没有主机.我想知道还有什么我可以扫描的.显然,手机处于在线状态并准备接受正面通话(通过3G停用的数据).我可以用我在Raspberry Pi上使用的avahi来完成某些事情,或者还有其他方法.
Avahi通常用于服务发现.我想从不同的子网中发现一个服务,我可以使用avahi来实现这个目标吗?
例如,服务主机ip为"192.168.1.100",掩码为"255.255.255.0",因此它位于192.168.1.X子网中.另一个主机IP是"192.168.2.100",掩码为"255.255.255.0".我可以使用avahi让这个主机发现以前的服务主机吗?
我使用Fedora 18和avahi命令行工具(版本0.6.31)
我使用avahi-resolve-host-name来发现我子网上单元的IP地址,以便在开发过程中进行测试.我使用Wireshark监控请求和响应.在一次成功的请求和响应之后,Wireshark上没有进一步的请求,但该工具仍然返回一个IP地址.计算机/ avahi守护进程/其他东西是否有可能"缓存"结果?
问题:我希望通过每次调用avahi-resolve-host-name发送请求数据包.这可能吗?
原因:可以说我得到'误报'.我尝试解决'test1.local',我得到了一个结果IP,但该单元不再位于此IP.我希望每次都发送请求,这样我就可以避免看到IP地址不正确的单位.
我正在尝试创建一个基于ubuntu 17.04的Docker容器,该容器可以浏览我的网络(在docker网络外部)上的mDNS并在mDNS上向我的网络(在docker网络外部)做广告。
我希望能够在macOS主机(在开发过程中)和Linux(Debian)主机上运行此docker容器进行生产。
https://github.com/ianblenke/docker-avahi似乎已经为Linux主机解决了这一问题(利用avahi守护程序并将/ var / run / dbus卷映射到主机)。在Macbook上进行开发时,我想使用mDNSResponder。
如何创建一个可以在本地网络上做广告和浏览的容器,该容器也可以在我的macOS笔记本电脑和Linux服务器上运行?
这是我到目前为止所拥有的。
Docker文件
FROM ubuntu:17.04
WORKDIR /app
RUN apt-get update && apt-get install -yq avahi-daemon avahi-utils libnss-mdns \
&& apt-get -qq -y autoclean \
&& apt-get -qq -y autoremove \
&& apt-get -qq -y clean
RUN update-rc.d avahi-daemon enable
COPY docker/etc/nsswitch.conf /etc/nsswitch.conf
COPY docker/etc/avahi-daemon.conf /etc/avahi/avahi-daemon.conf
COPY docker/start.sh /app
CMD ["/bin/bash","start.sh"]
Run Code Online (Sandbox Code Playgroud)
start.sh
#!/bin/bash
service avahi-daemon restart
service avahi-daemon status
avahi-browse -a
Run Code Online (Sandbox Code Playgroud)
nsswitch.conf
hosts: files mdns_minimal [NOTFOUND=return] dns
avahi-daemon.conf
...
enable-dbus=no
... …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个程序来输出可以通过网络与avahi提供的数据.我看过的文档似乎说我必须用dbus注册服务然后将它连接到avahi,但是执行此操作的文档非常稀疏.有谁知道它的好文档?我一直在看这些:
python-dbus:http: //dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html#exporting-objects
python-avahi:http://www.amk.ca/diary/2007/04/rough_notes_python_and_dbus.html
我真的不熟悉avahi的工作方式,所以任何指针都会有所帮助.
我正在寻求改进mDNS的Go库:https://github.com/davecheney/mdns/
我和作者谈过,他简单地说"我把它弄到了适合我的地步",这很好,完全符合开源的精神.
他提到Avahi,Bonjour和dns-sd发现工具的一些互操作性问题没有找到他导出的服务.
我想了解Avahi在使用端口进行简单服务时发布的记录,以及简单的名称.
我曾预料到适当的版本:
dig @localhost .local -t AXFR
Run Code Online (Sandbox Code Playgroud)
可能让Avahi导出它的区域,但它对我不起作用(提示"你做错了"!) - 我想了解典型Avahi服务导出的最小记录,并自动检查Lee-Hambleys-Macbook.local从笔记本上的Apple实现中导出,我可以改进对mDNS的Go lang支持.
当其他人正在使用Avahi/Bonjour/mDNS时,他们使用什么工具来挖掘并检查事情是否按预期工作?
#avahi的善良人士非常友好地给我以下提示:
killall -USR1 avahi-daemon
Run Code Online (Sandbox Code Playgroud)
这导致avahi-daemon将其区域文件转储到syslog.
但理想情况下,我想知道如何最好地查询服务器,tcpdump看起来也很有希望,但它仍然只显示得到查找的记录,而不是完全转储区域中的所有内容:
sudo tcpdump dst port 53
Password:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:43:28.883763 IP 192.168.178.41.50916 > resolver2.opendns.com.domain: 50479+ A? e3191.c.akamaiedge.net. (40)
09:43:29.046201 IP 192.168.178.41.61989 > resolver2.opendns.com.domain: 55378+ PTR? 251.0.0.224.in-addr.arpa. (42)
09:43:29.123784 IP …Run Code Online (Sandbox Code Playgroud) 我正在运行一个基于 ubuntu:14.04 的容器,我需要能够在其中使用avahi-browse。然而:
(.env)root@8faa2c44e53e:/opt/cluster-manager# avahi-browse -a
Failed to create client object: Daemon not running
(.env)root@8faa2c44e53e:/opt/cluster-manager# service avahi-daemon status
Avahi mDNS/DNS-SD Daemon is running
Run Code Online (Sandbox Code Playgroud)
我遇到的实际问题是pybonjour错误;pybonjour.BonjourError: (-65537, 'unknown')但我读过这与 avahi-daemon 的问题有关。
所以; 如何从容器连接到 avahi-daemon?
PS 我必须在 avahi-daemon.conf 填充中关闭 dbus 才能启动它,否则 avahi-daemon 将无法启动,出现如下 dbus 错误:
(.env)root@8faa2c44e53e:/opt/cluster-manager# avahi-daemon
Found user 'avahi' (UID 103) and group 'avahi' (GID 107).
Successfully dropped root privileges.
avahi-daemon 0.6.31 starting up.
dbus_bus_get_private(): Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
WARNING: …
因此,我想proxy_pass在我的服务器上由 Avahi 控制的 .local 区域中对 vagrant 机器进行动态化。我有一个 nginx 虚拟主机配置:
server {
listen 80;
server_name ~^(?<subdomain>.+)\.example\.com$;
location / {
resolver 127.0.0.1 valid=30s;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://$subdomain-example.local;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
Run Code Online (Sandbox Code Playgroud)
Nginx 在 /var/log/nginx/error.log 中返回了一个错误:
2016/09/26 18:03:34 [error] 24401#24401:
*1 no resolver defined to resolve test-example.local,
client: 192.168.1.101,
server: ~^(?<subdomain>.+)\.example\.com$,
request: "GET / HTTP/1.1",
host: "test.example.com"
Run Code Online (Sandbox Code Playgroud)
但是,例如,如果我手动设置$subdomain为“测试”,它就可以工作并按照我真正想要的方式传递到 test-example.local 机器。 …