【问题标题】:Find ip addresses of local devices in C# using mDNS使用 mDNS 在 C# 中查找本地设备的 IP 地址
【发布时间】:2012-04-29 06:13:55
【问题描述】:

我有 3 台摄像机,我不知道其 MAC 和 IP 地址,我想连接它们。

我已使用 UTP 电缆将它们连接到我的计算机。现在我要做的是找到他们的 IP 地址以建立连接。在摄像头的 API 中,声明您可以使用 TCP/IP 从摄像头获取视频流,并使用 mDNS 查找其 IP 地址。

如何在 c# 中找到 IP 地址?

(注意:不需要路由器,“arp -a”命令不起作用)

【问题讨论】:

  • 听起来你需要一个 C# 中的 mDNS 教程。我对这项技术不太熟悉,但stackoverflow.com/a/210520/58074 看起来是个不错的开始。
  • 它们是什么类型的相机?如何在不需要路由器的情况下通过 UTP 电缆将它们全部连接到您的计算机?
  • 嗨,欧维,感谢您的帮助。他们使用某种服务使用 mdns 来查找 ip,我将相机接口附加到我的应用程序,我也必须连接到相机。无需路由器,只需连接摄像头 Zeroconf 服务发现即可找到摄像头。

标签: c# ip-address mdns


【解决方案1】:

发送此 mDNS 数据包似乎适用于我的具有 Raspberry Pi 的应用程序。我认为 IP/端口是 ZeroConf/Bonjour 特有的,它似乎被广泛使用,因此它可能适用于那些相机。

public void sendDiscoveryQuery(string local_dhcp_ip_address)
{
    // multicast UDP-based mDNS-packet for discovering IP addresses

    System.Net.Sockets.Socket socket = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, System.Net.Sockets.ProtocolType.Udp);

    socket.Bind(new IPEndPoint(IPAddress.Parse(local_dhcp_ip_address), 52634));
    IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("224.0.0.251"), 5353);

    List<byte> bytes = new List<byte>();

    bytes.AddRange(new byte[] { 0x0, 0x0 });  // transaction id (ignored)
    bytes.AddRange(new byte[] { 0x1, 0x0 });  // standard query
    bytes.AddRange(new byte[] { 0x0, 0x1 });  // questions
    bytes.AddRange(new byte[] { 0x0, 0x0 });  // answer RRs
    bytes.AddRange(new byte[] { 0x0, 0x0 });  // authority RRs
    bytes.AddRange(new byte[] { 0x0, 0x0 });  // additional RRs
    bytes.AddRange(new byte[] { 0x05, 0x5f, 0x68, 0x74, 0x74, 0x70, 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01 });  // _http._tcp.local: type PTR, class IN, "QM" question

    socket.SendTo(bytes.ToArray(), endpoint);
}

“local_dhcp_ip_address”是您计算机网卡的 IP 地址。下面是此交互的wireshark 跟踪。设备直接响应您的计算机。

此时 ARP -a 应该可以工作了。你也可以使用GetIpNetTable

【讨论】:

    【解决方案2】:

    在某些设备上,MAC 地址印在标签上,可能印在背面。 据我了解,它们至少需要在 arp 缓存中一次。但此缓存仅存储 5 个 (?) 条目,因此您可能需要在连接设备或运行配置工具之前刷新或清除它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-01
      • 2018-01-05
      • 2011-09-01
      • 2018-05-19
      • 1970-01-01
      • 2014-05-25
      • 2010-09-15
      相关资源
      最近更新 更多