public static void Main(string[] args) { ushort tcpSourcePort = 123; ushort tcpDestinationPort = 321; var tcpPacket = new TcpPacket(tcpSourcePort, tcpDestinationPort); var ipSourceAddress = System.Net.IPAddress.Parse("192.168.1.1"); var ipDestinationAddress = System.Net.IPAddress.Parse("192.168.1.2"); var ipPacket = new IPv4Packet(ipSourceAddress, ipDestinationAddress); var sourceHwAddress = "90-90-90-90-90-90"; var ethernetSourceHwAddress = System.Net.NetworkInformation.PhysicalAddress.Parse(sourceHwAddress); var destinationHwAddress = "80-80-80-80-80-80"; var ethernetDestinationHwAddress = System.Net.NetworkInformation.PhysicalAddress.Parse(destinationHwAddress); // NOTE: using EthernetPacketType.None to illustrate that the ethernet // protocol type is updated based on the packet payload that is // assigned to that particular ethernet packet var ethernetPacket = new EthernetPacket(ethernetSourceHwAddress, ethernetDestinationHwAddress, EthernetPacketType.None); // Now stitch all of the packets together ipPacket.PayloadPacket = tcpPacket; ethernetPacket.PayloadPacket = ipPacket; // and print out the packet to see that it looks just like we wanted it to Console.WriteLine(ethernetPacket.ToString()); }
public void ParsingPacket() { var dev = new CaptureFileReaderDevice("../../CaptureFiles/test_stream.pcap"); dev.Open(); RawCapture p; p = dev.GetNextPacket(); var e = new EthernetPacket(new ByteArraySegment(p.Data)); Console.WriteLine("ethernet.ToString() {0}", e.ToString()); Assert.AreEqual(PhysicalAddress.Parse("00-13-10-03-71-47"), e.SourceHwAddress); Assert.AreEqual(PhysicalAddress.Parse("00-E0-4C-E5-73-AD"), e.DestinationHwAddress); Assert.AreEqual(EthernetPacketType.IpV4, e.Type); dev.Close(); }
public void EthernetConstructorFromMacAddresses() { var srcHwAddressBytes = new Byte[EthernetFields.MacAddressLength]; for(int i = 0; i < srcHwAddressBytes.Length; i++) { srcHwAddressBytes[i] = (byte)i; } var dstHwAddressBytes = new Byte[EthernetFields.MacAddressLength]; for(int i = 0; i < dstHwAddressBytes.Length; i++) { dstHwAddressBytes[i] = (byte)(dstHwAddressBytes.Length - i); } var srcHwAddress = new PhysicalAddress(srcHwAddressBytes); var dstHwAddress = new PhysicalAddress(dstHwAddressBytes); var ethernetPacket = new EthernetPacket(srcHwAddress, dstHwAddress, EthernetPacketType.None); int expectedLength = 14; Assert.AreEqual(expectedLength, ethernetPacket.Bytes.Length); //TODO: improve this here Console.WriteLine("ethernetPacket.ToString() {0}", ethernetPacket.ToString()); }
public int sendPacket() { byte[] bytes = new byte[4096]; ByteArraySegment bas = new ByteArraySegment(bytes); ushort srcPort = 23444; ushort dstPort = 12345; PacketDotNet.UdpPacket udpPacket = new UdpPacket(srcPort, dstPort); string cmdString = "xxxxyyyyHello world!"; byte[] sendBuffer = Encoding.ASCII.GetBytes(cmdString); udpPacket.PayloadData = sendBuffer; ICMPv4Packet icmpPacket = new ICMPv4Packet(new ByteArraySegment(sendBuffer)); // sanity check: //bas.BytesLength = 10; //Console.WriteLine("bas - Offset = " + bas.Offset + " len= " + bas.Length); IPAddress ipSrcAddr = System.Net.IPAddress.Parse("192.168.0.186"); // laptop IPAddress ipDestAddr = System.Net.IPAddress.Parse("192.168.0.185"); // my linux box IpPacket ipPacket = new IPv4Packet(ipSrcAddr, ipDestAddr); ipPacket.PayloadPacket = udpPacket; icmpPacket.TypeCode = ICMPv4TypeCodes.Unassigned1; icmpPacket.Sequence = 1; Console.WriteLine("icmpPacket - TypeCode = " + icmpPacket.TypeCode + " Sequence= " + icmpPacket.Sequence); Console.WriteLine("icmpPacket : " + icmpPacket.PrintHex()); icmpPacket.UpdateCalculatedValues(); Console.WriteLine("icmpPacket : " + icmpPacket.PrintHex()); //ushort etype = 0xFF00; //EthernetPacketType RAW ? System.Net.NetworkInformation.PhysicalAddress ethSrcAddr = System.Net.NetworkInformation.PhysicalAddress.Parse("02-1E-EC-8F-7F-E1"); System.Net.NetworkInformation.PhysicalAddress ethDstAddr = System.Net.NetworkInformation.PhysicalAddress.Parse("48-5B-39-ED-96-36"); EthernetPacket ethernetPacket = new EthernetPacket(ethSrcAddr, ethDstAddr, EthernetPacketType.IpV4); // I thought "None" for type would fill in type automatically; but it remained zero on the wire and was flagged "Malformed" ethernetPacket.PayloadPacket = icmpPacket; Console.WriteLine("ethernetPacket : " + ethernetPacket.PrintHex()); ethernetPacket.Type = EthernetPacketType.IpV4; Console.WriteLine("ethernetPacket : " + ethernetPacket.PrintHex()); //ipPacket.PayloadPacket = udpPacket; //ethernetPacket.PayloadPacket = gmpPacket; //ipPacket; ethernetPacket.UpdateCalculatedValues(); Console.WriteLine(ethernetPacket.ToString()); ipPacket.UpdateCalculatedValues(); //udpPacket.UpdateUDPChecksum(); // Experiment with raw ip packet? ipPacket.Protocol = IPProtocolType.RAW; // Why isn't ValidChecksum true? //Console.WriteLine("After updating calculated values, ValidUDPChecksum = " + udpPacket.ValidUDPChecksum + " ValidChecksum = " + udpPacket.ValidChecksum); //Console.WriteLine(ethernetPacket.ToString()); device.Open(DeviceMode.Normal, 15000); // 15 sec timeout //ushort checksum = csum(ipPacket.BytesHighPerformance, ipPacket.P); device.SendPacket(ethernetPacket); return 0; }