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; } } } }
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); }