我有3台摄像机,它们的MAC和IP地址对我来说是未知的,我想要连接到它们。
我用UTP电缆把它们连接到我的电脑上了。现在,我要做的是找到它们的IP地址,以便建立连接。在摄像头的API中,它指出您可以使用TCP/IP从摄像头获取视频流,并使用mDNS查找其IP地址。
如何在c#中查找IP地址?
(注意:没有路由器需要,"arp -a“命令不起作用)
发布于 2019-07-16 05:01:48
发送这个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‘是您计算机的nic的ip地址。下面是此交互的wireshark跟踪。该设备直接响应您的计算机。

此时ARP -a应该可以工作了。您也可以使用GetIpNetTable。
发布于 2012-04-29 15:42:34
在一些设备上,MAC地址打印在标签上,可能在背面。就我的理解而言,它们至少需要在arp缓存中出现一次。但是这个缓存只存储5 (?)条目,因此您可能需要刷新它,或者在连接设备或运行配置工具之前清除它。
https://stackoverflow.com/questions/10370142
复制相似问题