public static CustomPingReply Parse(EndPoint endPoint, IcmpPackage icmpResponse, long time) { return(new CustomPingReply { Address = ((IPEndPoint)endPoint).Address, Status = icmpResponse?.Type == IcmpType.EchoResponse ? IPStatus.Success : IPStatus.Unknown, ElapsedTime = time }); }
public CustomPingReply Send(string host) { var destination = new IPEndPoint(GetAddressByHost(host), 0); var icmpPackage = new IcmpPackage { Type = IcmpType.EchoRequest, Payload = Guid.NewGuid().ToString("N") }; var package = icmpPackage.Build(); _timer.Restart(); _socket.SendTo(package, destination); var buffer = new byte[package.Length * 2]; try { int receivedByteCount; while (true) { EndPoint endPoint = new IPEndPoint(IPAddress.Any, 0); receivedByteCount = _socket.ReceiveFrom(buffer, ref endPoint); if (destination.Address.Equals(((IPEndPoint)endPoint).Address)) { break; } } _timer.Stop(); return(CustomPingReply.Parse(destination, IcmpPackage.RestorePackage(buffer.Take(receivedByteCount).ToArray()), _timer.ElapsedMilliseconds)); } catch (SocketException) { _timer.Stop(); return(CustomPingReply.Parse(destination, null, _timer.ElapsedMilliseconds)); } }
public Dictionary <int, List <TracertPingReply> > Send(string host, int hopsCount) { var destination = new IPEndPoint(GetAddressByHost(host), 0); var icmpPackage = new IcmpPackage { Type = IcmpType.EchoRequest, Payload = Guid.NewGuid().ToString("N") }; var package = icmpPackage.Build(); _timer.Restart(); var traceRouteDict = new Dictionary <int, List <TracertPingReply> >(); var timer = new Stopwatch(); for (var i = 1; i <= hopsCount; i++) { _timer.Restart(); traceRouteDict.Add(i, new List <TracertPingReply>()); var buffer = new byte[package.Length * 2]; try { short ttl = 1; int receivedByteCount; while (ttl < 100) { _socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, ttl); ttl++; _socket.SendTo(package, destination); EndPoint endPoint = new IPEndPoint(IPAddress.Any, 0); try { receivedByteCount = _socket.ReceiveFrom(buffer, ref endPoint); } catch (Exception except) { } //if(((IPEndPoint)endPoint).Address.ToString() != "0.0.0.0" ) //{ //} traceRouteDict[i].Add(new TracertPingReply() { Address = ((IPEndPoint)endPoint).Address, Time = _timer.ElapsedMilliseconds }); if (destination.Address.Equals(((IPEndPoint)endPoint).Address)) { break; } } _timer.Stop(); } catch (SocketException exc) { _timer.Stop(); } traceRouteDict[i].Add(new TracertPingReply { Time = timer.ElapsedMilliseconds, Address = destination.Address }); } return(traceRouteDict); }