Tag: icmp

WinRT中的ICMP Ping – 有可能吗?

如何在WinRT Modern UI应用程序中执行ICMP ping? 目前在WinRT中没有实现Ping(请参阅此处的相关问题),以及Silverlight中以前的策略是: 使用WCF服务 调用Javascript然后调用ActiveX组件 放弃( 这里 ) Vasily 在这里使用http来“ping”特定端口上的Web服务器,使用StreamSocket支持使用TCP套接字进行网络通信。 也许Windows.Networking.Socket是我必须使用的最高级API,如果我想为WinRT编写自己的ICMP库。 此实现使用System.Net.Sockets来生成ICMP echo请求 – 在标准.NET中 此 WinRT示例使用Windows.Networking.Sockets.DatagramSocket类创建UDP套接字。 我认为我需要的是原始套接字来做ICMP。 这甚至可以在WinRT沙箱中进行ICMP ping吗?

如何使用特定网络接口(或特定源IP地址)进行Ping?

根据这个链接: 使用System.Net.NetworkInformation,有没有办法将ping绑定到特定的接口? ICMP不能绑定到网络接口(与基于套接字的东西不同): ICMP不是基于套接字的。 ping将根据路由表发送到适当的端口。 https://stackoverflow.com/editing-help 但我看不出任何正确的方法来获取有关“pinger”的信息。 至少,在shell命令中,我可以指定源IP地址,但不能在我使用Ping类时。 我尝试以编程方式执行一些traceroutes以获取Ping路由中涉及的IP地址,但我没有得到网络接口的IP地址(我想它来自我无法将TTL设置为0的事实)。 有关如何确定哪个网络接口用于某个ping的任何想法? (或指定用于ping的网络接口的方法)。

在C#中侦听ICMP数据包

我有一个SIP应用程序,需要发送UDP数据包来设置SIP呼叫。 SIP具有应对传递失败的超时机制。 我希望能够做的另一件事是检测UDP套接字是否已关闭,以便等待SIP使用的32s重新传输间隔。 我所指的情况是,尝试发送到UDP套接字导致远程主机生成ICMP目标无法访问的数据包。 如果我尝试将UDP数据包发送到正在运行的主机但该端口没有监听,我可以看到ICMP消息通过数据包跟踪器返回,但问题是如何从我的C#代码访问该数据包? 我正在玩原始套接字,但尚未能够获得我的程序接收的ICMP数据包。 即使ICMP消息到达我的PC,下面的示例也从未收到数据包。 Socket icmpListener = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); icmpListener.Bind(new IPEndPoint(IPAddress.Any, 0)); byte[] buffer = new byte[4096]; EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); int bytesRead = icmpListener.ReceiveFrom(buffer, ref remoteEndPoint); logger.Debug(“ICMPListener received ” + bytesRead + ” from ” + remoteEndPoint.ToString()); 下面是一个wireshark跟踪,显示ICMP响应进入我的PC,尝试从我知道它没有收听的端口上发送UDP数据包从10.0.0.100(我的PC)到10.0.0.138(我的路由器)。 我的问题是如何利用这些ICMP数据包来实现UDP发送失败而不是仅仅等待应用程序在任意一段时间后超时?