Ping ICMP in WinRT – È ansible?

Come eseguire un ping ICMP in un’applicazione UI moderna WinRT?

Ping non è attualmente implementato in WinRT (vedi domanda correlata qui ) e le strategie precedenti in Silverlight sono:

  • Utilizzare un servizio WCF
  • Chiama Javascript che chiama un componente ActiveX
  • Rinunciare ( qui )

Qui Vasily utilizza http per “eseguire il ping” di un server web su una porta specifica utilizzando StreamSocket che supporta la comunicazione di rete utilizzando un socket TCP.

Forse Windows.Networking.Socket s è l’API di più alto livello che devo usare se voglio scrivere la mia libreria ICMP per WinRT ..

Questa implementazione utilizza System.Net.Sockets per effettuare una richiesta echo ICMP – in .NET standard

Questo esempio WinRT utilizza la class Windows.Networking.Sockets.DatagramSocket per creare un socket UDP. Penso che quello di cui ho bisogno siano i socket grezzi per fare ICMP.

Questo è persino ansible nella sandbox WinRT sul ping ICMP?

Qualcosa di simile a:

try { using (var tcpClient = new StreamSocket()) { await tcpClient.ConnectAsync( new Windows.Networking.HostName(HostName), PortNumber, SocketProtectionLevel.PlainSocket); var localIp = tcpClient.Information.LocalAddress.DisplayName; var remoteIp = tcpClient.Information.RemoteAddress.DisplayName; ConnectionAttemptInformation = String.Format("Success, remote server contacted at IP address {0}", remoteIp); tcpClient.Dispose(); } } catch (Exception ex) { if (ex.HResult == -2147013895) { ConnectionAttemptInformation = "Error: No such host is known"; } else if (ex.HResult == -2147014836) { ConnectionAttemptInformation = "Error: Timeout when connecting (check hostname and port)"; } else { ConnectionAttemptInformation = "Error: Exception returned from network stack: " + ex.Message; } } finally { ConnectionInProgress = false; } 

fonte completa qui: github