标签: mdns

什么是224.0.0.251上的多播?

在我的debian服务器上(挤压)我每隔几秒钟收到一条消息:

9月18日21:28:14 myhost内核:[7903784.720091] AIF:UNPRIV连接尝试:IN = eth0 OUT = MAC = SRC = my_serverip_eth0 DST = 224.0.0.251 LEN = 72 TOS = 0x00 PREC = 0x00 TTL = 255 ID = 0 DF PROTO = UDP SPT = 5353 DPT = 5353 LEN = 52

数据包来自我的服务器(我用my_serverip_eth0替换),似乎被阻止出去没有目的地224.0.0.251.

所以我的服务器内的一些任务是联系224.0.0.251,这是由我的arnos_firewall阻止的.

如何找出谁试图使用它以及它是否有用?

如果我不需要它,我怎么能压制那个消息呢?

dns debian mdns

40
推荐指数
2
解决办法
13万
查看次数

如何使用mDNS将所有子域路由到单个主机?

我有一个开发网络服务器托管为"myhost.local",使用Bonjour/mDNS.服务器正在运行avahi-daemon.

网络服务器也想处理自己的任何子域.例如"cat.myhost.local"和"dog.myhost.local"和"guppy.myhost.local".

鉴于myhost.local位于dhcp的动态ip地址上,是否还有办法将子域的所有请求路由到myhost.local?

我开始认为目前不可能......

http://marc.info/?l=freedesktop-avahi&m=119561596630960&w=2

您可以使用/ etc/avahi/hosts文件执行此操作.或者,您可以
使用avahi-publish-host-name.

不,他不行.因为他想要定义一个别名,而不是一个新的主机名.即他只想注册A RR,没有反向PTR RR.但是如果你在/ etc/avahi/hosts中粘贴了一些内容,那么它会注册两者,如果PTR RR是非唯一的,则检测到冲突,这就是别名的情况.

mdns bonjour zeroconf

22
推荐指数
3
解决办法
9656
查看次数

Android NSD(网络服务发现)是否与iOS中的Bonjour服务兼容?

我将为iOS和Android创建一个无服务器的本地网络应用程序.iOS和Android设备中的应用程序应该找到并相互通信.

我知道有平台内置服务(自从v4.1开始,它在iOS中是Bonjour,在Android中是NSD),此外,开源jmdns软件包也可以直接使用.

我不知道如何选择以及它们的兼容性如何.

我的问题是:

  1. Android NSD(网络服务发现)是否与iOS中的Bonjour兼容?我应该在我的App中使用什么来进行服务发现.
  2. 如果我还为应用程序开发PC版本,是否需要使用第三方库?

android mdns bonjour jmdns ios

22
推荐指数
1
解决办法
1万
查看次数

Windows上的标准mDNS服务

Windows(某些现代风格)是否默认安装和/或运行mDNS服务器?如果是这样,那么如何动态地开始/停止宣传新服务呢?

如果没有标准,那么如何处理试图在该环境中运行多个mDNS服务器的冲突问题?

基本上,我想实现一个可以在Linux,Windows和Mac OS X上运行的服务,并且需要使用mDNS来宣传其zeroconf webserver位置.在Linux上我只使用avahi-publish(或安装配置文件).我猜测答案对于OS X来说是直截了当的.我很难找到Windows的信息.

mdns

20
推荐指数
4
解决办法
6万
查看次数

使用mDNS发现iOS设备名称

我注意到一些更好的网络发现应用程序,如Fing for iOS和iNet for Mac能够发现iOS设备和Mac设备的设备名称,即使它们没有宣传Bonjour服务,如iTunes Wi-Fi Sync.这是怎么做到的?我知道如何进行反向mDNS查询https://serverfault.com/questions/143184/how-do-i-get-the-machine-name-from-an-ip-via-multicast-dns.但是反向mDNS查找(至少由dig命令完成)dig -x the.ip @224.0.0.251 -p 5353)对于没有广播任何Bonjour服务的Mac,它将无效,除非在iOS设备上运行Wi-Fi Sync或其他一些Bonjour服务,否则它无效.我不知道如何获得这个名称,但这些应用程序可靠地得到它.我在iNet发现时使用了Wireshark,我只看到所有返回0个答案的ICMP和NetBios查询.

另请注意,我已经通过广播ping然后解析ARP表来获取设备的IP地址.我想通过获取设备名称并查找字符串"iPhone"或"iPad"来发现以这种方式发现的设备是iOS设备.

另请注意,iNet应用程序网站提供了有关如何撤消IP查找的以下内容.我认为这意味着他们为每个IP执行反向DNS查找和反向mDNS查找.

Reverse IP lookups (host­names) are per­formed as unicast and mul­ti­cast queries for every IP found.- http://www.bananaglue.de/inet/index_e.php

macos networking mdns ios ios7

18
推荐指数
1
解决办法
6437
查看次数

Android - jmdns没有发现设备

我正在尝试实现一个类来发现网络上的服务.我曾尝试使用Android的NSD,它确实发现服务很好,但它只支持16级及以上的API级别,而且我似乎无法检索服务信息中的txtRecord字段(由于某种原因它返回null).原来这是一个已知问题......

所以现在我正在尝试使用jmDNS,它似乎根本找不到服务.这是我的班级(我正在使用AndroidAnnotations框架)MDnsHelper:

@EBean
public class MDnsHelper implements ServiceListener {

public static final String SERVICE_TYPE = "_http._tcp.local";

Activity activity;
private JmDNS jmdns;
private MulticastLock multicastLock;
WifiManager wm;
InetAddress bindingAddress;
boolean isDiscovering;

public void init(Activity activity) {
    this.activity = activity;
    isDiscovering = false;
    wm = (WifiManager) activity.getSystemService(Context.WIFI_SERVICE);
    multicastLock = wm.createMulticastLock(activity.getPackageName());
    multicastLock.setReferenceCounted(false);
}

@Background
public void startDiscovery() {
    if (isDiscovering)
        return;
    System.out.println("starting...");
    multicastLock.acquire();
    try {
        System.out.println("creating jmdns");
        jmdns = JmDNS.create();
        System.out.println("jmdns created");
    } catch (IOException e) {
        e.printStackTrace(); …
Run Code Online (Sandbox Code Playgroud)

android mdns jmdns android-annotations android-nsd

15
推荐指数
1
解决办法
6554
查看次数

Android NSD - 永久挂起/运行 - 特定于设备?

我正在尝试在我公司的专有硬件设备上执行服务发现,该设备拥有自己的WiFi网络,并在该网络上宣传一项bonjour服务.当我连接到那个WiFi网络时,我正在使用NSD来发现该服务并解决它.

代码非常简单,通常效果很好而且很快.除了我有一个相当反复出现的问题(10次尝试中有5次)到目前为止本地化我的三星S8 +.到目前为止无法在S6或Pixel XL上重现.

问题是DiscoveryListener除了onDiscoveryStarted()之外从未做过任何事情,它只是永远运行.如果我杀了应用程序并重新开始,有时候它会继续挂起.

这就像有一个被阻塞的线程或东西,但是在日志中没有有用的信息(我能找到),而且我还没有发现任何东西可以锁定,因为我可以做些什么来从中恢复.

我添加了一个超时,它将在30秒后停止监听器,但通常在我重试之后它仍然无效.

服务发现过程包含在LiveData中,LiveData在活动时启动.

    const val SERVICE_TYPE_FOO = "_foo._tcp."

    private val serviceDiscoveryListener = ServiceDiscoveryListener()

    override fun onActive() {
        super.onActive()
        stopRunnable = StopDiscoveryRunnable()
        nsdManager.discoverServices(
            SERVICE_TYPE_FOO,
            NsdManager.PROTOCOL_DNS_SD,
            serviceDiscoveryListener
        )
        handler.postDelayed(stopRunnable, SERVICE_DISCOVERY_TIMEOUT_MS)
    }

private lateinit var stopRunnable: Runnable

private inner class StopDiscoveryRunnable : Runnable {
    override fun run() {
        try {
            nsdManager.stopServiceDiscovery(serviceDiscoveryListener)
            Timber.w("service discovery timed out")
            postValue(ServiceDiscoveryState.Error)
        } catch (e: Throwable) {
            // no-op
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

听众很简单......

private inner class ServiceDiscoveryListener : NsdManager.DiscoveryListener {
    override fun onServiceFound(serviceInfo: NsdServiceInfo?) …
Run Code Online (Sandbox Code Playgroud)

android mdns bonjour dns-sd nsd

15
推荐指数
0
解决办法
494
查看次数

mDNS究竟如何解析地址?

一旦通过DNS-SD发现服务,该主机的地址究竟如何得到解决,是否需要更多的时间/开销?

另外,如果我使用JmDNS或Bonjour有回调两个serviceFoundserviceResolved.如果我在设备发布某种服务的IP地址只是感兴趣,有没有获得比通过两个要去的地址更快/更有效的方式serviceFoundserviceResolved

谢谢

mdns bonjour jmdns dns-sd

12
推荐指数
1
解决办法
2万
查看次数

我可以使用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让这个主机发现以前的服务主机吗?

linux networking mdns service-discovery avahi

10
推荐指数
2
解决办法
6166
查看次数

Raspberry PI mdns getaddrinfo 3008错误

我有这个示例Node.js脚本:

var mdns = require('mdns');

var browser = mdns.createBrowser(mdns.tcp('http'));
browser.on('error', function (error) {
    console.log("error");
    console.log(error);
});
browser.on('serviceUp', function (service) {
    console.log("serviceUp");
    console.log(service);
});
browser.start();
Run Code Online (Sandbox Code Playgroud)

在我的Mac上它工作正常,找到了两个服务.如果我在运行Raspbean的Raspberry PI 2上运行完全相同的脚本(连接到同一网络),我得到这个输出:

pi@raspberrypi ~ $ node mdns.js 
*** WARNING *** The program 'node' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node>
*** WARNING *** The program 'node' called 'DNSServiceRegister()' which …
Run Code Online (Sandbox Code Playgroud)

mdns node.js raspberry-pi raspbian raspberry-pi2

10
推荐指数
2
解决办法
1886
查看次数