public void ResolveDestinationMacFor(ScanningOptions options, CancellationToken ct)
        {
            using (PacketCommunicator communicator = options.Device.Open(65535, PacketDeviceOpenAttributes.None, 100))
            {
                Packet request = ArpPacketFactory.CreateRequestFor(options);
                communicator.SetFilter("arp and src " + options.TargetIP + " and dst " + options.SourceIP);
                communicator.SendPacket(request);

                while (true)
                {
                    if (ct.IsCancellationRequested)
                    {
                        return;
                    }

                    Packet responce;
                    PacketCommunicatorReceiveResult result = communicator.ReceivePacket(out responce);
                    switch (result)
                    {
                    case PacketCommunicatorReceiveResult.Timeout:
                        communicator.SendPacket(request);
                        continue;

                    case PacketCommunicatorReceiveResult.Ok:
                        options.TargetMac = ParseSenderMacFrom(responce);
                        return;
                    }
                }
            }
        }
Пример #2
0
        public void Scan(ScanningOptions options)
        {
            if (this.IsBusy)
            {
                throw new InvalidOperationException("The scanner is busy now.");
            }

            options.CorrectPorts();
            bool valid = this.validator.Validate(options);

            if (valid)
            {
                this.options = options;
            }
            else
            {
                throw new ArgumentException("Options are incorrect!", "options");
            }

            this.scanResults.Clear();
            Console.WriteLine("Scanning...");
            this.IsBusy = true;
            this.SetupAndRunTasks();
        }
 public void ResolveDestinationMacFor(ScanningOptions options)
 {
     this.ResolveDestinationMacFor(options, CancellationToken.None);
 }