Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        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;
        }
Esempio n. 6
0
        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);
            }
Esempio n. 9
0
            private SimpleChannel CreateUpperLayer(TcpLayer tcpLayer)
            {
                var channel = new SimpleChannel();

                channel.LowerLayer    = tcpLayer;
                channel.RequestEnded += new EventHandler(RequestEnded);
                return(channel);
            }
Esempio n. 10
0
        /// <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);
        }
Esempio n. 11
0
        /// <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);
        }
Esempio n. 12
0
        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));
        }
Esempio n. 13
0
        /// <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);
        }
Esempio n. 14
0
        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));
        }
Esempio n. 15
0
 private void CreateTcpLayer(out TcpLayer tcpLayer, TcpControlBits controlBits)
 {
     tcpLayer = new TcpLayer
     {
         SourcePort           = SourcePort,
         DestinationPort      = DestinationPort,
         SequenceNumber       = SeqNumber,
         AcknowledgmentNumber = AckNumber,
         ControlBits          = controlBits,
         Window = WindowSize,
     };
 }
Esempio n. 16
0
        /// <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));
        }
Esempio n. 17
0
        /// <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);
        }
Esempio n. 18
0
        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));
        }
Esempio n. 19
0
        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);
        }
Esempio n. 21
0
        //

        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));
                }
            }));
        }
Esempio n. 22
0
        /// <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));
        }
Esempio n. 23
0
        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);
        }
Esempio n. 25
0
 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;
     }
 }
Esempio n. 26
0
        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")),
            };
        }
Esempio n. 27
0
        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);
        }
Esempio n. 28
0
            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));
            }
Esempio n. 29
0
        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);
        }
Esempio n. 30
0
        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);
        }