SharpPcap 可以用来在 C# 中找到我的网络中的 ip 摄像机吗
Posted
技术标签:
【中文标题】SharpPcap 可以用来在 C# 中找到我的网络中的 ip 摄像机吗【英文标题】:Can SharpPcap be used to find ip cameras in my network in C# 【发布时间】:2016-08-14 08:49:42 【问题描述】:我的目标是通过 C# 代码列出给定网络中的所有网络摄像机。
我可以使用 GetIpNetTable(C# 代码)here 列出我网络上的所有 IP 地址。
sharppcap 可以在这方面提供帮助吗?
请注意,我对网络完全陌生,所以请耐心等待。
或者有没有其他方法可以给定一个 IP 地址,我可以先验证它是否是一个 ip cam,然后获取它的详细信息。请注意,网络摄像机可以是任何品牌。
【问题讨论】:
【参考方案1】:IP 摄像机使用onvif 标准。据此,您可以通过使用 UDP 协议向端口 3702 上的广播 IP 地址发送 xml soap 消息来列出网络上的所有 IP 摄像机。
因此,如果您在单级网络上,那么您的广播地址将为 192.168.1.255。请google一下广播地址,因为我不是网络人,无法更好地解释。
所以这是你需要做的。
-
创建 UdpClient 并在端口 3702 上连接到 IP 192.168.1.255
创建 SOAP 消息以请求网络摄像机提供其 IP 地址
使用您的 UdpClient 发送此 soap 消息。
等待回复
收到响应后,将该字节数据转换为字符串
此字符串包含您需要的 IP 地址。
阅读onvif specs,看看你能做什么。或read this
我正在粘贴代码供您参考。
private static async Task<List<string>> GetSoapResponsesFromCamerasAsync()
var result = new List<string>();
using ( var client = new UdpClient() )
var ipEndpoint = new IPEndPoint( IPAddress.Parse( "192.168.1.255" ), 3702 );
client.EnableBroadcast = true;
try
var soapMessage = GetBytes( CreateSoapRequest() );
var timeout = DateTime.Now.AddSeconds( TimeoutInSeconds );
await client.SendAsync( soapMessage, soapMessage.Length, ipEndpoint );
while ( timeout > DateTime.Now )
if ( client.Available > 0 )
var receiveResult = await client.ReceiveAsync();
var text = GetText( receiveResult.Buffer );
result.Add( text );
else
await Task.Delay( 10 );
catch ( Exception exception )
Console.WriteLine( exception.Message );
return result;
private static string CreateSoapRequest()
Guid messageId = Guid.NewGuid();
const string soap = @"
<?xml version=""1.0"" encoding=""UTF-8""?>
<e:Envelope xmlns:e=""http://www.w3.org/2003/05/soap-envelope""
xmlns:w=""http://schemas.xmlsoap.org/ws/2004/08/addressing""
xmlns:d=""http://schemas.xmlsoap.org/ws/2005/04/discovery""
xmlns:dn=""http://www.onvif.org/ver10/device/wsdl"">
<e:Header>
<w:MessageID>uuid:0</w:MessageID>
<w:To e:mustUnderstand=""true"">urn:schemas-xmlsoap-org:ws:2005:04:discovery</w:To>
<w:Action a:mustUnderstand=""true"">http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</w:Action>
</e:Header>
<e:Body>
<d:Probe>
<d:Types>dn:Device</d:Types>
</d:Probe>
</e:Body>
</e:Envelope>
";
var result = string.Format( soap, messageId );
return result;
private static byte[] GetBytes( string text )
return Encoding.ASCII.GetBytes( text );
private static string GetText( byte[] bytes )
return Encoding.ASCII.GetString( bytes, 0, bytes.Length );
private string GetAddress( string soapMessage )
var xmlNamespaceManager = new XmlNamespaceManager( new NameTable() );
xmlNamespaceManager.AddNamespace( "g", "http://schemas.xmlsoap.org/ws/2005/04/discovery" );
var element = XElement.Parse( soapMessage ).XPathSelectElement( "//g:XAddrs[1]", xmlNamespaceManager );
return element?.Value ?? string.Empty;
【讨论】:
我将 List以上是关于SharpPcap 可以用来在 C# 中找到我的网络中的 ip 摄像机吗的主要内容,如果未能解决你的问题,请参考以下文章
如何从 C# 授予 Windows 10 中 Pcap 库的权限?