使用MDN在C#中查找本地设备的ip地址

使用MDN在C#中查找本地设备的ip地址,c#,ip-address,mdns,C#,Ip Address,Mdns,我有3个摄像头,它们的MAC和IP地址我都不知道,我想连接到它们 我已经用UTP电缆将它们连接到我的计算机。现在我要做的是找到他们的IP地址以便建立连接。在摄像头的API中,它声明您可以使用TCP/IP从摄像头获取视频流,并使用MDN查找其IP地址 如何在c#中找到IP地址 (注意:不需要路由器,且“arp-a”命令不起作用)在某些设备上,MAC地址打印在标签上,可能在背面。 据我所知,它们至少需要在arp缓存中存在一次。但此缓存仅存储5(?)个条目,因此您可能必须刷新它,或在连接设备或运行配置

我有3个摄像头,它们的MAC和IP地址我都不知道,我想连接到它们

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

如何在c#中找到IP地址


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

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

发送此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);
}
public void sendDiscoveryQuery(字符串本地\u dhcp\u ip\u地址)
{
//用于发现IP地址的基于UDP的多播mDNS数据包
System.Net.Sockets.Socket Socket=新的System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork、System.Net.Sockets.SocketType.Dgram、System.Net.Sockets.ProtocolType.Udp);
绑定(新的IPEndPoint(IPAddress.Parse(local_dhcp_ip_address),52634));
IPEndPoint端点=新的IPEndPoint(IPAddress.Parse(“224.0.0.251”),5353);
列表字节=新列表();
bytes.AddRange(新字节[]{0x0,0x0});//事务id(已忽略)
bytes.AddRange(新字节[]{0x1,0x0});//标准查询
AddRange(新字节[]{0x0,0x1});//问题
bytes.AddRange(新字节[]{0x0,0x0});//应答RRs
bytes.AddRange(新字节[]{0x0,0x0});//权限RRs
bytes.AddRange(新字节[]{0x0,0x0});//其他RRs
AddRange(新字节[]{0x05,0x5f,0x68,0x74,0x74,0x70,0x04,0x5f,0x74,0x63,0x70,0x05,0x6c,0x6f,0x63,0x61,0x6c,0x00,0x00,0x0c,0x00,0x01});//\u http.\u tcp.local:type PTR,class IN,“QM”问题
SendTo(bytes.ToArray(),端点);
}
“本地ip地址”是计算机nic的ip地址。下面是此交互的wireshark跟踪。该设备直接响应您的计算机


此时,ARP-a应该可以工作。您也可以使用。

听起来您需要一个C#中的mDNS教程。我对这项技术不太熟悉,但看起来是一个很有希望的开始。它们是什么样的相机?您如何在不需要路由器的情况下通过UTP电缆将它们全部连接到您的计算机?您好,谢谢您的帮助。他们使用某种服务使用MDN来查找ip,我将摄像头接口连接到我的应用程序,我也必须连接摄像头。无需路由器,只需连接摄像头Zeroconf服务查找摄像头即可。