Exemple #1
0
 public void Ping(Common.IPv4Address ip, PingSettings settings, PingResultHandler callback)
 {
     for (int i = 0; i < (int)Math.Max(settings.Repeat, 1); i++)
     {
         try
         {
             SendIcmpRequestPacket(ip, settings.Ttl, settings.Bytes, 456, settings.Timeout, callback);
         }
         catch (ARP.IpResolutionFailed arp)
         {
             callback(new PingResult(PingResultType.DestinationHostUnreachable)
             {
                 RespondingHost = _client.Configuration.IpAddress
             });
         }
         System.Threading.Thread.Sleep(settings.Delay);
     }
 }
Exemple #2
0
        private void SendIcmpRequestPacket(Common.IPv4Address ip, byte ttl, ushort bytes, int seqNum, int timeout, PingResultHandler callback)
        {
            OSI.Layer3Packet packet = new OSI.Layer3Packet();
            packet.Destination = ip.AsString;
            packet.SourceIP    = _client.Configuration.IpAddress;
            packet.Ttl         = ttl;

            var data = new byte[bytes];

            _random.NextBytes(data);

            var shor = new byte[2];

            _random.NextBytes(shor);
            ushort id = BitConverter.ToUInt16(shor, 0);

            // Save ping
            if (CurrentPings.ContainsKey(id))
            {
                CurrentPings[id] = new PingRequest(callback);
            }
            else
            {
                PingRequest req = new PingRequest(callback);
                req.Bytes = bytes;
                CurrentPings.Add(id, req);
            }

            PcapDotNet.Packets.Icmp.IcmpEchoLayer icmpLayer =
                new PcapDotNet.Packets.Icmp.IcmpEchoLayer
            {
                Checksum       = null,
                Identifier     = id,
                SequenceNumber = (ushort)(seqNum),
            };
            PcapDotNet.Packets.PayloadLayer extra = new PcapDotNet.Packets.PayloadLayer()
            {
                Data = new PcapDotNet.Packets.Datagram(data)
            };

            packet.NextLayers.Add(icmpLayer);
            packet.NextLayers.Add(extra);



            SendPacket(packet, () =>
            {
                CurrentPings[id].TimeStamp = DateTime.Now;
            });

            DateTime now = DateTime.Now;

            while ((DateTime.Now - now).TotalMilliseconds < timeout)
            {
                if (CurrentPings[id].ReplyReceived)
                {
                    break;
                }
                System.Threading.Thread.Sleep(100);
            }

            if (!CurrentPings[id].ReplyReceived)
            {
                CurrentPings[id].Callback(new PingResult(PingResultType.RequestTimedOut));
            }
            CurrentPings.Remove(id);
        }
Exemple #3
0
 public void Ping(string host, PingSettings settings, PingResultHandler callback)
 {
     Common.IPv4Address ip = _client.Dns.ResolveHost(host).IPs[0];
     Ping(ip, settings, callback);
 }
Exemple #4
0
 public void Ping(Common.IPv4Address ip, PingResultHandler callback)
 {
     SendIcmpRequestPacket(ip, 225, 32, 123, 3, callback);
 }