public static Packet CreateRstPacketFor(ScanningOptions options, ushort targetPort) { TcpPacketFactory.RandomizeParameters(); EthernetLayer ethernetLayer = new EthernetLayer { Source = options.SourceMac, Destination = options.TargetMac, }; IpV4Layer ipV4Layer = new IpV4Layer { Source = options.SourceIP, CurrentDestination = options.TargetIP, Ttl = TcpPacketFactory.ttl, Fragmentation = TcpPacketFactory.fragmentation, Identification = TcpPacketFactory.identification }; TcpLayer tcpLayer = new TcpLayer { SourcePort = sourcePort, DestinationPort = targetPort, SequenceNumber = TcpPacketFactory.sequence, ControlBits = TcpControlBits.Reset, Window = TcpPacketFactory.windowSize, }; return(PacketBuilder.Build(DateTime.Now, ethernetLayer, ipV4Layer, tcpLayer)); }
public IEnumerator TcpConnectTest() { try { _serverThread = new Thread(MyTcpListener.Start); _serverThread.Start(); _tcpLayer = new TcpLayer(); _tcpLayer.Connect("127.0.0.1", 13000, b => { _connectState = b; }); for (int i = 0; i < 20; i++) { _tcpLayer.Update(); yield return(null); } yield return(null); } finally { _tcpLayer.Dispose(); _serverThread.Interrupt(); _serverThread.Abort(); } Assert.AreEqual(true, _connectState); }
private static void CreateRandomTcpPayload(Random random, TcpLayer tcpLayer, List <ILayer> layers) { if (random.NextBool(20)) { // Finish with payload. PayloadLayer payloadLayer = random.NextPayloadLayer(random.Next(100)); layers.Add(payloadLayer); return; } HttpLayer httpLayer = random.NextHttpLayer(); layers.Add(httpLayer); if (httpLayer.IsRequest) { tcpLayer.DestinationPort = 80; } else { tcpLayer.SourcePort = 80; } if (random.NextBool()) { return; } HttpLayer httpLayer2 = httpLayer.IsRequest ? (HttpLayer)random.NextHttpRequestLayer() : random.NextHttpResponseLayer(); layers.Add(httpLayer2); }
private void btnAdd_Click(object sender, EventArgs e) { try { ushort?checksum = null; if (txtCheckSum.Enabled == true) { checksum = ushort.Parse(txtCheckSum.Text); } TcpLayer tcpLayer = new TcpLayer { SourcePort = ushort.Parse(txtSourcePort.Text), DestinationPort = ushort.Parse(txtDestPort.Text), Checksum = checksum, // Will be filled automatically. SequenceNumber = uint.Parse(txtSequenceN.Text), AcknowledgmentNumber = uint.Parse(txtAckN.Text), ControlBits = getControlBits(), Window = ushort.Parse(txtWindow.Text), UrgentPointer = ushort.Parse(txtUrgentPointer.Text), Options = TcpOptions.None, }; mainForm.addToPacket(tcpLayer, "TCP -> " + txtSourcePort.Text + " -> " + txtDestPort.Text); } catch (Exception) { MessageBox.Show("Invalid Parameters"); } }
private void SendSyn(PacketCommunicator communicator) { // Ethernet Layer EthernetLayer ethernetLayer = new EthernetLayer { Source = SourceMac, Destination = DestinationMac, }; // IPv4 Layer IpV4Layer ipV4Layer = new IpV4Layer { Source = SourceIpV4, CurrentDestination = DestinationIpV4, Ttl = 128, Fragmentation = new IpV4Fragmentation(IpV4FragmentationOptions.DoNotFragment, 0), Identification = 1234, }; // TCP Layer TcpLayer tcpLayer = new TcpLayer { SourcePort = _sourcePort, DestinationPort = _destinationPort, SequenceNumber = _seqNumber, ControlBits = TcpControlBits.Synchronize, Window = _windowSize, }; communicator.SendPacket(PacketBuilder.Build(DateTime.Now, ethernetLayer, ipV4Layer, tcpLayer)); _expectedAckNumber = _seqNumber + 1; }
private static void preparePcap() { var source = new MacAddress(getClientMAC()); var dest = new MacAddress(getRouterMAC()); device = LivePacketDevice.AllLocalMachine[0]; communicator = device.Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000); EthernetLayer ethLayer = new EthernetLayer { Source = source, Destination = dest }; ipLayer = new IpV4Layer { Source = new IpV4Address(LocalIPAddress()), Ttl = 128 }; icmpLayer = new IcmpEchoLayer(); icmpBuilder = new PacketBuilder(ethLayer, ipLayer, icmpLayer); TCPLayer = new TcpLayer(); TCPBuilder = new PacketBuilder(ethLayer, ipLayer, TCPLayer); if (!TCPMode) { communicator.SetFilter("icmp[0] = 0"); } else { //tcp[13] = 18 communicator.SetFilter("tcp[13] = 18 and port " + TCPPort); } }
private static void CreateRandomIpV4Payload(Random random, IpV4Layer ipV4Layer, List <ILayer> layers) { if (random.NextBool(20)) { // Finish with payload. PayloadLayer payloadLayer = random.NextPayloadLayer(random.Next(100)); layers.Add(payloadLayer); return; } ipV4Layer.Protocol = null; if (random.NextBool()) { ipV4Layer.Fragmentation = IpV4Fragmentation.None; } switch (random.Next(0, 9)) { case 0: // IpV4. case 1: IpV4Layer innerIpV4Layer = random.NextIpV4Layer(); layers.Add(innerIpV4Layer); CreateRandomIpV4Payload(random, innerIpV4Layer, layers); return; case 2: // Igmp. layers.Add(random.NextIgmpLayer()); return; case 3: // Icmp. IcmpLayer icmpLayer = random.NextIcmpLayer(); layers.Add(icmpLayer); layers.AddRange(random.NextIcmpPayloadLayers(icmpLayer)); return; case 4: // Gre. GreLayer greLayer = random.NextGreLayer(); layers.Add(greLayer); CreateRandomEthernetPayload(random, greLayer, layers); return; case 5: // Udp. case 6: UdpLayer udpLayer = random.NextUdpLayer(); layers.Add(udpLayer); CreateRandomUdpPayload(random, udpLayer, layers); return; case 7: // Tcp. case 8: TcpLayer tcpLayer = random.NextTcpLayer(); layers.Add(tcpLayer); CreateRandomTcpPayload(random, tcpLayer, layers); return; default: throw new InvalidOperationException("Invalid value."); } }
private CustomAspNetChannel CreateUpperLayer(TcpLayer tcpLayer) { var channel = new CustomAspNetChannel(_server); channel.LowerLayer = tcpLayer; channel.RequestEnded += new EventHandler(RequestEnded); return(channel); }
private SimpleChannel CreateUpperLayer(TcpLayer tcpLayer) { var channel = new SimpleChannel(); channel.LowerLayer = tcpLayer; channel.RequestEnded += new EventHandler(RequestEnded); return(channel); }
/// <summary> /// Extracts layers from provided packet and swaps current layers with extracted /// </summary> /// <param name="packet">Packet to extract layers from</param> /// <returns>Cusom packet with freshly extracted layers</returns> public override INewPacket ExtractLayers(Packet packet) { this.EthernetLayer = packet.Ethernet.ExtractLayer() as EthernetLayer; this.TcpLayer = packet.Ethernet.IpV4.Tcp.ExtractLayer() as TcpLayer; this.IpV4Layer = packet.Ethernet.IpV4.ExtractLayer() as IpV4Layer; this.PayloadLayer = packet.Ethernet.Payload.ExtractLayer() as PayloadLayer; return(this); }
/// <summary> /// Modifies every layer, one by one /// </summary> /// <returns>Same object with modified values</returns> public override INewPacket ModifyLayers() { this.TcpLayer = _layerModifier.ModifyLayer(this.TcpLayer); this.IpV4Layer = _layerModifier.ModifyLayer(this.IpV4Layer); this.PayloadLayer = _layerModifier.ModifyLayer(this.PayloadLayer); this.EthernetLayer = _layerModifier.ModifyLayer(this.EthernetLayer); return(this); }
private Packet createSynPack() { PacketBuilder builder; MacAddress macSource = new MacAddress(ethSourceAddr.Text); IpV4Address ipSource = new IpV4Address("127.0.0.1"); MacAddress macDest = new MacAddress(ethDestAddr.Text); IpV4Address ipDest = new IpV4Address("127.0.0.1"); //Ethernet EthernetLayer ethernetLayer = new EthernetLayer { Source = macDest, Destination = macDest, EtherType = EthernetType.None }; //Internet Protocol IpV4Layer ipv4Layer = new IpV4Layer { Source = ipSource, CurrentDestination = ipDest, Fragmentation = IpV4Fragmentation.None, HeaderChecksum = null, Identification = 1, Options = IpV4Options.None, Protocol = null, Ttl = 100, TypeOfService = 0 }; //Transport TcpLayer tcpLayer = new TcpLayer { SourcePort = 3000, DestinationPort = 2000, Checksum = null, SequenceNumber = 100, AcknowledgmentNumber = 50, ControlBits = TcpControlBits.Synchronize, Window = 1000, UrgentPointer = 0, Options = TcpOptions.None }; PayloadLayer payloadLayer = new PayloadLayer { Data = new Datagram(Encoding.ASCII.GetBytes("This is a tcp flow")) }; builder = new PacketBuilder(ethernetLayer, ipv4Layer, tcpLayer, payloadLayer); return(builder.Build(DateTime.Now)); }
/// <summary> /// Copies Modules from specified packet to current packet (if values are not default) /// </summary> /// <param name="toCopyFrom"></param> /// <returns>New packet with copied values</returns> public override INewPacket CopyModulesFrom(INewPacket source) { CustomTcpPacket toCopyFrom = source as CustomTcpPacket; this.TcpLayer = _layerExchanger.AssignUserValuesFromFilledLayerToOtherLayer(toCopyFrom.TcpLayer, this.TcpLayer); this.EthernetLayer = _layerExchanger.AssignUserValuesFromFilledLayerToOtherLayer(toCopyFrom.EthernetLayer, this.EthernetLayer); this.PayloadLayer = _layerExchanger.AssignUserValuesFromFilledLayerToOtherLayer(toCopyFrom.PayloadLayer, this.PayloadLayer); this.IpV4Layer = _layerExchanger.AssignUserValuesFromFilledLayerToOtherLayer(toCopyFrom.IpV4Layer, this.IpV4Layer); return(this); }
private Packet BuildHttpPacket() { EthernetLayer ethernetLayer = new EthernetLayer { Source = new MacAddress("01:01:01:01:01:01"), Destination = new MacAddress("02:02:02:02:02:02"), EtherType = EthernetType.None, }; IpV4Layer ipV4Layer = new IpV4Layer { Source = new IpV4Address("0.0.0.0"), CurrentDestination = new IpV4Address("0.0.0.0"), Fragmentation = IpV4Fragmentation.None, HeaderChecksum = null, Identification = 123, Options = IpV4Options.None, Protocol = null, Ttl = 100, TypeOfService = 0, }; TcpLayer tcpLayer = new TcpLayer { SourcePort = 4050, DestinationPort = 80, Checksum = null, SequenceNumber = 100, AcknowledgmentNumber = 50, ControlBits = TcpControlBits.Acknowledgment, Window = 100, UrgentPointer = 0, Options = TcpOptions.None, }; HttpRequestLayer httpLayer = new HttpRequestLayer { Version = PcapDotNet.Packets.Http.HttpVersion.Version11, Header = new HttpHeader(new HttpContentLengthField(11)), Body = new Datagram(Encoding.ASCII.GetBytes("?action=getPaLst")), Method = new HttpRequestMethod(HttpRequestKnownMethod.Get), Uri = @"http://", }; PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, tcpLayer, httpLayer); return(builder.Build(DateTime.Now)); }
private void CreateTcpLayer(out TcpLayer tcpLayer, TcpControlBits controlBits) { tcpLayer = new TcpLayer { SourcePort = SourcePort, DestinationPort = DestinationPort, SequenceNumber = SeqNumber, AcknowledgmentNumber = AckNumber, ControlBits = controlBits, Window = WindowSize, }; }
/// <summary> /// This function build an HTTP over TCP over IPv4 over Ethernet packet. /// </summary> public static Packet BuildHttpPacket() { EthernetLayer ethernetLayer = new EthernetLayer { Source = new MacAddress(macAddressSource), Destination = new MacAddress(macAddressDest), EtherType = EthernetType.None, // Will be filled automatically. }; IpV4Layer ipV4Layer = new IpV4Layer { Source = new IpV4Address(ipSource), CurrentDestination = new IpV4Address(ipDest), Fragmentation = IpV4Fragmentation.None, HeaderChecksum = null, // Will be filled automatically. Identification = 123, Options = IpV4Options.None, Protocol = null, // Will be filled automatically. Ttl = 100, TypeOfService = 0, }; TcpLayer tcpLayer = new TcpLayer { SourcePort = 4050, DestinationPort = 80, Checksum = null, // Will be filled automatically. SequenceNumber = 100, AcknowledgmentNumber = 50, ControlBits = TcpControlBits.Acknowledgment, Window = 100, UrgentPointer = 0, Options = TcpOptions.None, }; HttpRequestLayer httpLayer = new HttpRequestLayer { Version = HttpVersion.Version11, Header = new HttpHeader(new HttpContentLengthField(11)), Body = new Datagram(Encoding.ASCII.GetBytes("hello world")), Method = new HttpRequestMethod(HttpRequestKnownMethod.Get), Uri = @"http://pcapdot.net/", }; PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, tcpLayer, httpLayer); return(builder.Build(DateTime.Now)); }
/// <summary> /// Assigns from prefilled tcp layer (with user values) to other tcp layer (assigns only user values, if they are not default) /// </summary> /// <param name="layerToCopyFrom">Tcp layer with user filled values</param> /// <param name="layerToCopyTo">Tcp layer to assign values to</param> /// <returns>Modified Tcp layer with newly assigned user values</returns> private Layer AssignUserValuesFromFilledTcpLayerToOtherTcpLayer(TcpLayer layerToCopyFrom, TcpLayer layerToCopyTo) { layerToCopyTo.AcknowledgmentNumber = (layerToCopyFrom.AcknowledgmentNumber != default) ? layerToCopyFrom.AcknowledgmentNumber : layerToCopyTo.AcknowledgmentNumber; layerToCopyTo.ControlBits = (layerToCopyFrom.ControlBits != default) ? layerToCopyFrom.ControlBits : layerToCopyTo.ControlBits; layerToCopyTo.SequenceNumber = (layerToCopyFrom.SequenceNumber != default) ? layerToCopyFrom.SequenceNumber : layerToCopyTo.SequenceNumber; layerToCopyTo.DestinationPort = (layerToCopyFrom.DestinationPort != default) ? layerToCopyFrom.DestinationPort : layerToCopyTo.DestinationPort; layerToCopyTo.SequenceNumber = (layerToCopyFrom.SequenceNumber != default) ? layerToCopyFrom.SequenceNumber : layerToCopyTo.SequenceNumber; layerToCopyTo.SourcePort = (layerToCopyFrom.SourcePort != default) ? layerToCopyFrom.SourcePort : layerToCopyTo.SourcePort; layerToCopyTo.UrgentPointer = (layerToCopyFrom.UrgentPointer != default) ? layerToCopyFrom.UrgentPointer : layerToCopyTo.UrgentPointer; layerToCopyTo.Window = (layerToCopyFrom.Window != default) ? layerToCopyFrom.Window : layerToCopyTo.Window; return(layerToCopyTo); }
public Packet BuildTcpPacket(Packet origPacket) { EthernetLayer ethernetLayer = new EthernetLayer { Source = origPacket.Ethernet.Source, Destination = lookUpMacAdress(Convert.ToString(origPacket.Ethernet.IpV4.Destination)), EtherType = EthernetType.None, // Will be filled automatically. }; IpV4Layer ipV4Layer = new IpV4Layer { Source = origPacket.Ethernet.IpV4.Source, CurrentDestination = origPacket.Ethernet.IpV4.Destination, Fragmentation = IpV4Fragmentation.None, HeaderChecksum = null, // Will be filled automatically. Identification = origPacket.Ethernet.IpV4.Identification, Options = IpV4Options.None, Protocol = null, // Will be filled automatically. Ttl = origPacket.Ethernet.IpV4.Ttl, TypeOfService = origPacket.Ethernet.IpV4.TypeOfService, }; TcpLayer tcpLayer = new TcpLayer { SourcePort = origPacket.Ethernet.IpV4.Tcp.SourcePort, DestinationPort = origPacket.Ethernet.IpV4.Tcp.DestinationPort, Checksum = null, // Will be filled automatically. SequenceNumber = origPacket.Ethernet.IpV4.Tcp.SequenceNumber, AcknowledgmentNumber = origPacket.Ethernet.IpV4.Tcp.AcknowledgmentNumber, ControlBits = TcpControlBits.Acknowledgment, Window = origPacket.Ethernet.IpV4.Tcp.Window, UrgentPointer = origPacket.Ethernet.IpV4.Tcp.UrgentPointer, Options = origPacket.Ethernet.IpV4.Tcp.Options, }; PayloadLayer payloadLayer = new PayloadLayer { Data = origPacket.Ethernet.IpV4.Tcp.Payload, }; PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, tcpLayer, payloadLayer); return(builder.Build(DateTime.Now)); }
public void ModifyLayer_LayerIsOk_ReturnsModifiedLayer() { // Arrange TcpLayer tcpLayer = new TcpLayer(); _moduleModifierMock.Setup(x => x.ChangeLayerModulesBasedOnUserInput(tcpLayer)).Returns(tcpLayer); // Act var layer = _target.ModifyLayer(tcpLayer); // Assert layer.Should().BeOfType <TcpLayer>(); layer.Should().BeEquivalentTo(tcpLayer); }
private PacketBuilder buildLayers(int srcPort, int dstPort) { EthernetLayer ethernetLayer = new EthernetLayer { Source = sourceMac, Destination = destMac, EtherType = EthernetType.None, // Will be filled automatically. }; IpV4Layer ipV4Layer = new IpV4Layer { Source = new IpV4Address(txtSrcIP.Text), CurrentDestination = new IpV4Address(txtDestIP.Text), Fragmentation = IpV4Fragmentation.None, HeaderChecksum = null, // Will be filled automatically. Identification = (txtID.Text.Equals("")) ? (ushort)123 : ushort.Parse(txtID.Text), Options = IpV4Options.None, Protocol = null, // Will be filled automatically. Ttl = txtTTL.Text.Equals("") ? (byte)100 : byte.Parse(txtTTL.Text) > 255 ? (byte)255 : byte.Parse(txtTTL.Text) < 1 ? (byte)1 : byte.Parse(txtTTL.Text), TypeOfService = 0, }; TcpLayer tcpLayer = new TcpLayer { SourcePort = (ushort)srcPort, DestinationPort = (ushort)dstPort, Checksum = null, // Will be filled automatically. SequenceNumber = txtSequence.Text.Equals("") ? 100 : uint.Parse(txtSequence.Text), AcknowledgmentNumber = txtACK.Text.Equals("") ? 50 : uint.Parse(txtACK.Text), ControlBits = (radPSH.Checked) ? TcpControlBits.Push : (radACK.Checked) ? TcpControlBits.Acknowledgment : (radRST.Checked) ? TcpControlBits.Reset : (radFIN.Checked) ? TcpControlBits.Fin : TcpControlBits.Synchronize, Window = txtWindow.Text.Equals("") ? (ushort)100 : ushort.Parse(txtWindow.Text), UrgentPointer = 0, Options = TcpOptions.None, }; PayloadLayer payloadLayer = new PayloadLayer { Data = new Datagram(Encoding.ASCII.GetBytes(txtInput.Text)), }; // build packet and initiate communicator PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, tcpLayer, payloadLayer); PacketCommunicator communicator = selectedDevice.Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000); return(builder); }
// private void SendTcpPacket(string SrcMac, string SrcIP, int SrcPort, string DestMac, string DestIp, int DestPort, string payload) { EthernetLayer ethLayer = new EthernetLayer { Source = new MacAddress(SrcMac), Destination = new MacAddress(DestMac), EtherType = EthernetType.None, }; IpV4Layer ipV4Layer = new IpV4Layer { Source = new IpV4Address(SrcIP), CurrentDestination = new IpV4Address(DestIp), Fragmentation = IpV4Fragmentation.None, HeaderChecksum = null, Identification = 0, Options = IpV4Options.None, Protocol = IpV4Protocol.Tcp, Ttl = 128, TypeOfService = 0, }; TcpLayer tcpLayer = new TcpLayer { SourcePort = (ushort)SrcPort, DestinationPort = (ushort)DestPort, Checksum = null, SequenceNumber = 0, AcknowledgmentNumber = 0, ControlBits = TcpControlBits.Synchronize, Window = 1024, UrgentPointer = 0, }; PayloadLayer payloadLayer = new PayloadLayer { Data = new Datagram(StringToByteArray(payload)), }; PacketBuilder builder = new PacketBuilder(ethLayer, ipV4Layer, tcpLayer, payloadLayer); this.Invoke(new MethodInvoker(delegate() { using (PacketCommunicator communicator = LivePacketDevice.AllLocalMachine[0].Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000)) { communicator.SendPacket(builder.Build(DateTime.Now)); } })); }
/// <summary> /// This function build an TCP over IPv4 over Ethernet with payload packet. /// </summary> public static Packet BuildTcpPacket() { EthernetLayer ethernetLayer = new EthernetLayer { Source = new MacAddress(macAddressSource), Destination = new MacAddress(macAddressDest), EtherType = EthernetType.None, // Will be filled automatically. }; IpV4Layer ipV4Layer = new IpV4Layer { Source = new IpV4Address(ipSource), CurrentDestination = new IpV4Address(ipDest), Fragmentation = IpV4Fragmentation.None, HeaderChecksum = null, // Will be filled automatically. Identification = 123, Options = IpV4Options.None, Protocol = null, // Will be filled automatically. Ttl = 100, TypeOfService = 0, }; TcpLayer tcpLayer = new TcpLayer { SourcePort = 4050, DestinationPort = 25, Checksum = null, // Will be filled automatically. SequenceNumber = 100, AcknowledgmentNumber = 50, ControlBits = TcpControlBits.Acknowledgment, Window = 100, UrgentPointer = 0, Options = TcpOptions.None, }; PayloadLayer payloadLayer = new PayloadLayer { Data = new Datagram(Encoding.ASCII.GetBytes("hello world")), }; PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, tcpLayer, payloadLayer); return(builder.Build(DateTime.Now)); }
private void SendTcpPacket(OSI.Layer4TcpPacket packet, PacketSentHandler callback) { TcpLayer tcpLayer = new TcpLayer { SourcePort = packet.LocalPort, DestinationPort = packet.RemotePort, Checksum = null, // Will be filled automatically. SequenceNumber = packet.SequenceNumber, AcknowledgmentNumber = packet.AcknowledgementNumber, Window = 64512, }; if (packet.ACK) { tcpLayer.ControlBits = tcpLayer.ControlBits | TcpControlBits.Acknowledgment; } if (packet.SYN) { tcpLayer.ControlBits = tcpLayer.ControlBits | TcpControlBits.Synchronize; } if (packet.RST) { tcpLayer.ControlBits = tcpLayer.ControlBits | TcpControlBits.Reset; } if (packet.PSH) { tcpLayer.ControlBits = tcpLayer.ControlBits | TcpControlBits.Push; } if (packet.FIN) { tcpLayer.ControlBits = tcpLayer.ControlBits | TcpControlBits.Fin; } OSI.Layer3Packet l3 = new OSI.Layer3Packet(); l3.Ttl = 255; l3.SourceIP = Configuration.IpAddress; l3.Destination = packet.Destination; foreach (ILayer layer in packet.NextLayers) { l3.NextLayers.Add(layer); } l3.NextLayers.Insert(0, tcpLayer); SendLayer3Packet(l3, callback); }
private void SendGet(PacketCommunicator communicator) { // Ethernet Layer EthernetLayer ethernetLayer = new EthernetLayer { Source = SourceMac, Destination = DestinationMac, }; // IPv4 Layer IpV4Layer ipV4Layer = new IpV4Layer { Source = SourceIpV4, CurrentDestination = DestinationIpV4, Ttl = 128, Fragmentation = new IpV4Fragmentation(IpV4FragmentationOptions.DoNotFragment, 0), Identification = 1235, }; // TCP Layer TcpLayer tcpLayer = new TcpLayer { SourcePort = _sourcePort, DestinationPort = _destinationPort, SequenceNumber = _seqNumber, AcknowledgmentNumber = _ackNumber, ControlBits = TcpControlBits.Acknowledgment, Window = _windowSize, }; // HTTP Layer HttpLayer httpLayer = new HttpRequestLayer { Uri = "/", Header = new HttpHeader(HttpField.CreateField("Host", Host)), Method = new HttpRequestMethod(HttpRequestKnownMethod.Get), Version = HttpVersion.Version11, }; Packet packet = PacketBuilder.Build(DateTime.Now, ethernetLayer, ipV4Layer, tcpLayer, httpLayer); communicator.SendPacket(packet); _expectedAckNumber = (uint)(_seqNumber + packet.Ethernet.IpV4.Tcp.PayloadLength); }
private void CreateRequestReply() { if (_streamReply != null) { _streamReply.Close(); byte[] data = _streamReply.ToArray(); _streamReply = null; EthernetLayer ethernetLayer = new EthernetLayer { Source = _tcpConnection.Destination.MacAddress, Destination = _tcpConnection.Source.MacAddress }; IpV4Layer ipV4Layer = new IpV4Layer { Source = _tcpConnection.Destination.IpAddress, CurrentDestination = _tcpConnection.Source.IpAddress, Fragmentation = IpV4Fragmentation.None, //HeaderChecksum = null, // Will be filled automatically. Identification = 123, Options = IpV4Options.None, //Protocol = null, // Will be filled automatically. Ttl = 100, TypeOfService = 0 }; TcpLayer tcpLayer = new TcpLayer() { SourcePort = _tcpConnection.Destination.Port, DestinationPort = _tcpConnection.Source.Port, //Checksum = null, // Will be filled automatically. SequenceNumber = 100, AcknowledgmentNumber = 50, ControlBits = TcpControlBits.Acknowledgment, Window = 100, UrgentPointer = 0, Options = TcpOptions.None }; PayloadLayer payloadLayer = new PayloadLayer { Data = new Datagram(data) }; PacketBuilder packetBuilder = new PacketBuilder(ethernetLayer, ipV4Layer, tcpLayer, payloadLayer); if (PacketHandle != null) { PacketHandle(TcpDirection.DestinationToSource, packetBuilder.Build(_replyTimestamp)); } _replyTimestamp = DateTime.MinValue; } }
private void InitializePackets() { //Fill with dummy data _ethernetLayer = new EthernetLayer { Source = new MacAddress("01:01:01:01:01:01"), Destination = new MacAddress("02:02:02:02:02:02"), EtherType = EthernetType.None, // Will be filled automatically. }; _ipV4Layer = new IpV4Layer { Source = new IpV4Address("1.2.3.4"), CurrentDestination = new IpV4Address("11.22.33.44"), Fragmentation = IpV4Fragmentation.None, HeaderChecksum = null, // Will be filled automatically. Identification = 123, Options = IpV4Options.None, Protocol = null, // Will be filled automatically. Ttl = 100, TypeOfService = 0, }; _tcpLayer = new TcpLayer { SourcePort = 4050, DestinationPort = 25, Checksum = null, // Will be filled automatically. SequenceNumber = 100, AcknowledgmentNumber = 50, ControlBits = TcpControlBits.Acknowledgment, Window = 100, UrgentPointer = 0, Options = TcpOptions.None, }; _payloadLayer = new PayloadLayer { Data = new Datagram(Encoding.ASCII.GetBytes("CAM Flooding Packet")), }; }
private static Packet BuildPacket(string httpString) { MacAddress ethernetSource = new MacAddress("00:01:02:03:04:05"); MacAddress ethernetDestination = new MacAddress("A0:A1:A2:A3:A4:A5"); EthernetLayer ethernetLayer = new EthernetLayer { Source = ethernetSource, Destination = ethernetDestination }; Random random = new Random(); IpV4Layer ipV4Layer = random.NextIpV4Layer(null); ipV4Layer.HeaderChecksum = null; TcpLayer tcpLayer = random.NextTcpLayer(); PayloadLayer payloadLayer = new PayloadLayer { Data = new Datagram(Encoding.ASCII.GetBytes(httpString)) }; Packet packet = PacketBuilder.Build(DateTime.Now, ethernetLayer, ipV4Layer, tcpLayer, payloadLayer); Assert.IsTrue(packet.IsValid); // Ethernet ethernetLayer.EtherType = EthernetType.IpV4; Assert.AreEqual(ethernetLayer, packet.Ethernet.ExtractLayer(), "Ethernet Layer"); // IpV4 ipV4Layer.Protocol = IpV4Protocol.Tcp; ipV4Layer.HeaderChecksum = ((IpV4Layer)packet.Ethernet.IpV4.ExtractLayer()).HeaderChecksum; Assert.AreEqual(ipV4Layer, packet.Ethernet.IpV4.ExtractLayer(), "IP Layer"); ipV4Layer.HeaderChecksum = null; // TCP tcpLayer.Checksum = packet.Ethernet.IpV4.Tcp.Checksum; Assert.AreEqual(tcpLayer, packet.Ethernet.IpV4.Tcp.ExtractLayer(), "TCP Layer"); return(packet); }
public void SendData(Guid guid, int payloadLength) { EthernetLayer ethernetLayer = new EthernetLayer { Source = ownHardwareAddress, Destination = ifHardwareAddress, EtherType = EthernetType.None, }; IpV4Layer ipV4Layer = new IpV4Layer { Source = RoutingTable.connParams[guid].remoteIp, CurrentDestination = ifProtocolAddress, Fragmentation = IpV4Fragmentation.None, HeaderChecksum = null, // Will be filled automatically. Identification = ipID, Options = IpV4Options.None, Protocol = IpV4Protocol.Tcp, Ttl = 128, TypeOfService = 0, }; TcpLayer tcpLayer = new TcpLayer { SourcePort = RoutingTable.connParams[guid].remotePort, DestinationPort = RoutingTable.connParams[guid].localPort, Checksum = null, // Will be filled automatically. SequenceNumber = RoutingTable.connParams[guid].seq, AcknowledgmentNumber = RoutingTable.connParams[guid].ack, ControlBits = TcpControlBits.Acknowledgment, Window = RoutingTable.connParams[guid].GetWindow(), UrgentPointer = 0, Options = TcpOptions.None, }; PayloadLayer payloadLayer = new PayloadLayer { Data = new Datagram(RoutingTable.connParams[guid].receivingBuffer.Take(payloadLength).ToArray()), }; PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, tcpLayer, payloadLayer); SendPacket(builder.Build(DateTime.Now)); }
public IEnumerator TcpSendAndRecvTest() { try { _serverThread = new Thread(MyTcpListener.Start); _serverThread.Start(); _tcpLayer = new TcpLayer(); _tcpLayer.Connect("127.0.0.1", 13000, ok => { if (ok) { _tcpLayer.Send(DataPackPool.GetDataPack(0, Encoding.ASCII.GetBytes("abcdefg"))); } }); _tcpLayer.Recv += pack => { _tcpLayerRecv = Encoding.ASCII.GetString(pack.ReadAllBytes()); }; for (var i = 0; i < 50; i++) { _tcpLayer.Update(); yield return(null); } } finally { _tcpLayer.Dispose(); _serverThread.Interrupt(); _serverThread.Abort(); } Assert.AreEqual("ABCDEFG", _tcpLayerRecv); }
private void ConfirmReception(IdentifiedClient src, IdentifiedClient dest) { // LinkLayer -> Ethernet var ethernetLayer = new EthernetLayer() { Source = src.Mac, Destination = dest.Mac }; // InternetLayer -> IPv4 src.Ipv4Id += 2; var ipv4Layer = new IpV4Layer() { Source = src.Ip, Destination = dest.Ip, Ttl = 128, Identification = src.Ipv4Id }; // TransportLayer -> TCP var tcpLayer = new TcpLayer() { SourcePort = src.Port, DestinationPort = dest.Port, SequenceNumber = src.TcpId, AcknowledgmentNumber = src.AckId, ControlBits = TcpControlBits.Acknowledgment, Window = 4140 }; // Build Packet var builder = new PacketBuilder(ethernetLayer, ipv4Layer, tcpLayer); var packet = builder.Build(DateTime.Now); m_communicator.SendPacket(packet); }