public void SetSamplingMethodFirstAfterIntervalTest() { const int NumPackets = 10; Packet expectedPacket = _random.NextEthernetPacket(100); using (PacketCommunicator communicator = OpenOfflineDevice(NumPackets, expectedPacket, TimeSpan.FromSeconds(1))) { communicator.SetSamplingMethod(new SamplingMethodFirstAfterInterval(TimeSpan.FromSeconds(2))); PacketCommunicatorReceiveResult result; Packet packet; for (int i = 0; i != 5; ++i) { result = communicator.ReceivePacket(out packet); Assert.AreEqual(PacketCommunicatorReceiveResult.Ok, result); Assert.AreEqual(expectedPacket, packet); DateTime expectedTimestamp = expectedPacket.Timestamp.AddSeconds(i * 2); MoreAssert.IsInRange(expectedTimestamp.AddSeconds(-0.01), expectedTimestamp.AddSeconds(0.01), packet.Timestamp); } result = communicator.ReceivePacket(out packet); Assert.AreEqual(PacketCommunicatorReceiveResult.Eof, result); Assert.IsNull(packet); } }
public void SetSamplingMethodFirstAfterIntervalNegativeTimespanErrorTest() { using (PacketCommunicator communicator = OpenLiveDevice()) { communicator.SetSamplingMethod(new SamplingMethodFirstAfterInterval(TimeSpan.FromSeconds(-1))); } }
public void SetSamplingMethodFirstAfterIntervalBigTimespanErrorTest() { using (PacketCommunicator communicator = OpenLiveDevice()) { communicator.SetSamplingMethod(new SamplingMethodFirstAfterInterval(TimeSpan.FromDays(25))); } }
public void SetSamplingMethodFirstAfterIntervalNegativeMsErrorTest() { using (PacketCommunicator communicator = OpenLiveDevice()) { communicator.SetSamplingMethod(new SamplingMethodFirstAfterInterval(-1)); } }
public void SetSamplingMethodOneEveryNErrorTest() { using (PacketCommunicator communicator = OpenLiveDevice()) { communicator.SetSamplingMethod(new SamplingMethodOneEveryCount(0)); } }
public void SetSamplingMethodOneEveryNTest() { const string SourceMac = "11:22:33:44:55:66"; const string DestinationMac = "77:88:99:AA:BB:CC"; using (PacketCommunicator communicator = OpenLiveDevice()) { communicator.SetFilter("ether src " + SourceMac + " and ether dst " + DestinationMac); communicator.SetSamplingMethod(new SamplingMethodOneEveryCount(5)); for (int i = 0; i != 20; ++i) { Packet expectedPacket = _random.NextEthernetPacket(60 * (i + 1), SourceMac, DestinationMac); communicator.SendPacket(expectedPacket); } Packet packet; PacketCommunicatorReceiveResult result; for (int i = 0; i != 4; ++i) { result = communicator.ReceivePacket(out packet); Assert.AreEqual(PacketCommunicatorReceiveResult.Ok, result); Assert.AreEqual(60 * 5 * (i + 1), packet.Length); } result = communicator.ReceivePacket(out packet); Assert.AreEqual(PacketCommunicatorReceiveResult.Timeout, result); Assert.IsNull(packet); } }
public void SetNullSamplingMethodTest() { using (PacketCommunicator communicator = OpenLiveDevice()) { communicator.SetSamplingMethod(null); } Assert.Fail(); }
public void SetSamplingMethodFirstAfterIntervalTest() { Random random = new Random(); MacAddress sourceMac = random.NextMacAddress(); MacAddress destinationMac = random.NextMacAddress(); using (PacketCommunicator communicator = OpenLiveDevice()) { communicator.SetFilter("ether src " + sourceMac + " and ether dst " + destinationMac); communicator.SetSamplingMethod(new SamplingMethodFirstAfterInterval(TimeSpan.FromSeconds(1))); int numPacketsGot; communicator.ReceiveSomePackets(out numPacketsGot, 100, p => { }); Packet[] packetsToSend = new Packet[11]; packetsToSend[0] = _random.NextEthernetPacket(60, sourceMac, destinationMac); for (int i = 0; i != 10; ++i) { packetsToSend[i + 1] = _random.NextEthernetPacket(60 * (i + 2), sourceMac, destinationMac); } List <Packet> packets = new List <Packet>(6); Thread thread = new Thread(() => packets.AddRange(communicator.ReceivePackets(6))); thread.Start(); communicator.SendPacket(packetsToSend[0]); Thread.Sleep(TimeSpan.FromSeconds(0.7)); for (int i = 0; i != 10; ++i) { communicator.SendPacket(packetsToSend[i + 1]); Thread.Sleep(TimeSpan.FromSeconds(0.55)); } if (!thread.Join(TimeSpan.FromSeconds(10))) { thread.Abort(); } Assert.AreEqual(6, packets.Count, packets.Select(p => (p.Timestamp - packets[0].Timestamp).TotalSeconds + "(" + p.Length + ")").SequenceToString(", ")); Packet packet; for (int i = 0; i != 6; ++i) { Assert.AreEqual(60 * (i * 2 + 1), packets[i].Length, i.ToString()); } PacketCommunicatorReceiveResult result = communicator.ReceivePacket(out packet); Assert.AreEqual(PacketCommunicatorReceiveResult.Timeout, result); Assert.IsNull(packet); } }
public void SetSamplingMethodOneEveryNTest() { Packet expectedPacket = _random.NextEthernetPacket(100); using (PacketCommunicator communicator = OpenOfflineDevice(101, expectedPacket)) { communicator.SetSamplingMethod(new SamplingMethodOneEveryCount(10)); PacketCommunicatorReceiveResult result; Packet packet; for (int i = 0; i != 10; ++i) { result = communicator.ReceivePacket(out packet); Assert.AreEqual(PacketCommunicatorReceiveResult.Ok, result); Assert.AreEqual(expectedPacket, packet); } result = communicator.ReceivePacket(out packet); Assert.AreEqual(PacketCommunicatorReceiveResult.Eof, result); Assert.IsNull(packet); } }
public static PacketCommunicator OpenLiveDevice() { NetworkInterface networkInterface = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault( ni => !ni.IsReceiveOnly && ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet && ni.OperationalStatus == OperationalStatus.Up); LivePacketDevice device = networkInterface.GetLivePacketDevice(); MoreAssert.IsMatch(@"Network adapter '.*' on local host", device.Description); Assert.AreEqual(DeviceAttributes.None, device.Attributes); Assert.AreNotEqual(MacAddress.Zero, device.GetMacAddress()); Assert.AreNotEqual(string.Empty, device.GetPnpDeviceId()); MoreAssert.IsBiggerOrEqual(1, device.Addresses.Count); foreach (DeviceAddress address in device.Addresses) { if (address.Address.Family == SocketAddressFamily.Internet) { MoreAssert.IsMatch("Address: " + SocketAddressFamily.Internet + @" [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ " + "Netmask: " + SocketAddressFamily.Internet + @" 255\.[0-9]+\.[0-9]+\.[0-9]+ " + "Broadcast: " + SocketAddressFamily.Internet + @" 255.255.255.255", address.ToString()); } else { Assert.AreEqual(SocketAddressFamily.Internet6, address.Address.Family); MoreAssert.IsMatch("Address: " + SocketAddressFamily.Internet6 + @" (?:[0-9A-F]{4}:){7}[0-9A-F]{4} " + "Netmask: " + SocketAddressFamily.Unspecified + @" " + IpV6Address.Zero + " " + "Broadcast: " + SocketAddressFamily.Unspecified + @" " + IpV6Address.Zero, address.ToString()); } } PacketCommunicator communicator = device.Open(); try { MoreAssert.AreSequenceEqual(new[] { DataLinkKind.Ethernet, DataLinkKind.Docsis }.Select(kind => new PcapDataLink(kind)), communicator.SupportedDataLinks); PacketTotalStatistics totalStatistics = communicator.TotalStatistics; Assert.AreEqual <object>(totalStatistics, totalStatistics); Assert.AreNotEqual(null, totalStatistics); Assert.AreEqual(totalStatistics.GetHashCode(), totalStatistics.GetHashCode()); Assert.IsTrue(totalStatistics.Equals(totalStatistics)); Assert.IsFalse(totalStatistics.Equals(null)); Assert.AreNotEqual(null, totalStatistics); Assert.AreNotEqual(totalStatistics, 2); MoreAssert.IsSmallerOrEqual <uint>(1, totalStatistics.PacketsCaptured, "PacketsCaptured"); Assert.AreEqual <uint>(0, totalStatistics.PacketsDroppedByDriver, "PacketsDroppedByDriver"); Assert.AreEqual <uint>(0, totalStatistics.PacketsDroppedByInterface, "PacketsDroppedByInterface"); MoreAssert.IsSmallerOrEqual <uint>(1, totalStatistics.PacketsReceived, "PacketsReceived"); Assert.IsNotNull(totalStatistics.ToString()); communicator.SetKernelBufferSize(2 * 1024 * 1024); // 2 MB instead of 1 communicator.SetKernelMinimumBytesToCopy(10); // 10 bytes minimum to copy communicator.SetSamplingMethod(new SamplingMethodNone()); Assert.AreEqual(DataLinkKind.Ethernet, communicator.DataLink.Kind); communicator.DataLink = communicator.DataLink; Assert.AreEqual("EN10MB (Ethernet)", communicator.DataLink.ToString()); Assert.AreEqual(communicator.DataLink, new PcapDataLink(communicator.DataLink.Name)); Assert.IsTrue(communicator.IsFileSystemByteOrder); Assert.AreEqual(PacketCommunicatorMode.Capture, communicator.Mode); Assert.IsFalse(communicator.NonBlocking); Assert.AreEqual(PacketDevice.DefaultSnapshotLength, communicator.SnapshotLength); return(communicator); } catch (Exception) { communicator.Dispose(); throw; } }