private static void device_PcapOnPacketArrival(object sender, PcapCaptureEventArgs e) { if (e.Packet is EthernetPacket) { EthernetPacket eth = ((EthernetPacket)e.Packet); Console.WriteLine("Original Eth packet: " + eth.ToColoredString(false)); //Manipulate ethernet parameters eth.SourceHwAddress = PhysicalAddress.Parse("00-11-22-33-44-55"); eth.DestinationHwAddress = PhysicalAddress.Parse("00-99-88-77-66-55"); if (e.Packet is IPPacket) { IPPacket ip = ((IPPacket)e.Packet); Console.WriteLine("Original IP packet: " + ip.ToColoredString(false)); //manipulate IP parameters ip.SourceAddress = System.Net.IPAddress.Parse("1.2.3.4"); ip.DestinationAddress = System.Net.IPAddress.Parse("44.33.22.11"); ip.TimeToLive = 11; //Recalculate the IP checksum ip.ComputeIPChecksum(); if (ip is TCPPacket) { TCPPacket tcp = ((TCPPacket)ip); Console.WriteLine("Original TCP packet: " + tcp.ToColoredString(false)); //manipulate TCP parameters tcp.SourcePort = 9999; tcp.DestinationPort = 8888; tcp.Syn = !tcp.Syn; tcp.Fin = !tcp.Fin; tcp.Ack = !tcp.Ack; tcp.WindowSize = 500; tcp.AcknowledgmentNumber = 800; tcp.SequenceNumber = 800; //Recalculate the TCP checksum tcp.ComputeTCPChecksum(); } if (ip is UDPPacket) { UDPPacket udp = ((UDPPacket)ip); Console.WriteLine("Original UDP packet: " + udp.ToColoredString(false)); //manipulate UDP parameters udp.SourcePort = 9999; udp.DestinationPort = 8888; //Recalculate the UDP checksum udp.ComputeUDPChecksum(); } } Console.WriteLine("Manipulated Eth packet: " + eth.ToColoredString(false)); } }