示例#1
0
        public HTTPSendPacket(string MACsrc, string MACdst, string IPsrc, string IPdst,
            string IpId, string TTL,
            string PORTsrc, string SQN, string ACK, string WIN, string Data, string Domain)
        {
            GetBase(MACsrc, MACdst, IPsrc, IPdst, IpId, TTL);

            tcpLayer = new TcpLayer
            {
                SourcePort = StringToUShort(PORTsrc),
                DestinationPort = 80,
                Checksum = null, // Will be filled automatically.
                SequenceNumber = StringToUShort(SQN),
                AcknowledgmentNumber = StringToUShort(ACK),
                ControlBits = TcpControlBits.Acknowledgment,
                Window = StringToUShort(WIN),
                UrgentPointer = 0,
                Options = TcpOptions.None,
            };

            httpLayer = new HttpRequestLayer
            {
                Version = HttpVersion.Version11,
                Header = new HttpHeader(new HttpContentLengthField(11)),
                Body = new Datagram(Encoding.ASCII.GetBytes(Data)),
                Method = new HttpRequestMethod(HttpRequestKnownMethod.Get),
                Uri = @"http://" + Domain + "/",
            };
        }
示例#2
0
文件: Utils.cs 项目: hungud/kiddos
        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));
        }
示例#3
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));
        }
示例#4
0
 public static HttpRequestLayer NextHttpRequestLayer(this Random random)
 {
     HttpRequestLayer httpRequestLayer = new HttpRequestLayer();
     if (random.NextBool(10))
     {
         httpRequestLayer.Method = random.NextHttpRequestMethod();
         httpRequestLayer.Uri = httpRequestLayer.Method == null ? null : random.NextHttpUri();
         httpRequestLayer.Version = httpRequestLayer.Uri == null || random.NextBool(10)  ? null : random.NextHttpVersion();
         httpRequestLayer.Header = httpRequestLayer.Version == null ? null : random.NextHttpHeader();
         httpRequestLayer.Body = httpRequestLayer.Header == null ? null : random.NextHttpBody(true, null, httpRequestLayer.Header);
     }
     return httpRequestLayer;
 }
示例#5
0
        public static HttpRequestLayer NextHttpRequestLayer(this Random random)
        {
            HttpRequestLayer httpRequestLayer = new HttpRequestLayer();

            if (random.NextBool(10))
            {
                httpRequestLayer.Method  = random.NextHttpRequestMethod();
                httpRequestLayer.Uri     = httpRequestLayer.Method == null ? null : random.NextHttpUri();
                httpRequestLayer.Version = httpRequestLayer.Uri == null || random.NextBool(10)  ? null : random.NextHttpVersion();
                httpRequestLayer.Header  = httpRequestLayer.Version == null ? null : random.NextHttpHeader();
                httpRequestLayer.Body    = httpRequestLayer.Header == null ? null : random.NextHttpBody(true, null, httpRequestLayer.Header);
            }
            return(httpRequestLayer);
        }
        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);
        }
示例#7
0
        public void SendSlowReadCompleteGet(PacketCommunicator communicator)
        {
            //// Ethernet Layer
            //var ethernetLayer = new EthernetLayer
            //{
            //    Source = SourceMac,
            //    Destination = DestinationMac,
            //};
            //
            //// IPv4 Layer
            //var ipV4Layer = new IpV4Layer
            //{
            //    Source = SourceIpV4,
            //    CurrentDestination = DestinationIpV4,
            //    Ttl = 128,
            //    Fragmentation = new IpV4Fragmentation(IpV4FragmentationOptions.DoNotFragment, 0),
            //    Identification = _identificatioNumber,
            //};
            CreateEthAndIpv4Layer(out var ethernetLayer, out var ipV4Layer);

            // TCP Layer
            //var tcpLayer = new TcpLayer
            //{
            //    SourcePort = SourcePort,
            //    DestinationPort = DestinationPort,
            //    SequenceNumber = SeqNumber,
            //    AcknowledgmentNumber = AckNumber,
            //    ControlBits = TcpControlBits.Acknowledgment,
            //    Window = WindowSize,
            //};
            CreateTcpLayer(out var tcpLayer, TcpControlBits.Acknowledgment);
            HttpRequestLayer httpRequestLayer = new HttpRequestLayer
            {
                Uri     = SlowReadUrl,
                Method  = new HttpRequestMethod(HttpRequestKnownMethod.Get),
                Version = HttpVersion.Version11,
                Header  = new HttpHeader(HttpField.CreateField("Host", Host))
            };

            var packet = PacketBuilder.Build(DateTime.Now, ethernetLayer, ipV4Layer, tcpLayer, httpRequestLayer);

            communicator.SendPacket(packet);
            SeqNumber += (uint)packet.Ethernet.IpV4.Tcp.Http.Length;
            _identificatioNumber++;
        }
示例#8
0
 private void btnAddDataLink_Click(object sender, EventArgs e)
 {
     try
     {
         HttpRequestLayer httpLayer =
             new HttpRequestLayer
         {
             Version = cmbVersion.SelectedIndex == 0 ? HttpVersion.Version10 : HttpVersion.Version11,
             Header  = new HttpHeader(new HttpContentLengthField((uint)txtBody.Text.Length)),
             Body    = new Datagram(Encoding.ASCII.GetBytes(txtBody.Text)),
             Method  = new HttpRequestMethod((HttpRequestKnownMethod)Enum.Parse(typeof(HttpRequestKnownMethod), cmbMethod.SelectedItem.ToString())),
             Uri     = @txtBody.Text,
         };
         mainForm.addToPacket(httpLayer, "HTTP -> " + cmbMethod.SelectedItem.ToString() + " -> " + txtURI.Text);
     }
     catch (Exception)
     {
         MessageBox.Show("Invalid Parameters");
     }
 }
示例#9
0
        public void RandomHttpTest()
        {
            int seed = new Random().Next();

            Console.WriteLine("Seed: " + seed);
            Random random = new Random(seed);

            for (int i = 0; i != 200; ++i)
            {
                EthernetLayer ethernetLayer = random.NextEthernetLayer(EthernetType.None);
                IpV4Layer     ipV4Layer     = random.NextIpV4Layer(null);
                ipV4Layer.HeaderChecksum = null;
                Layer    ipLayer  = random.NextBool() ? (Layer)ipV4Layer : random.NextIpV6Layer(true);
                TcpLayer tcpLayer = random.NextTcpLayer();
                tcpLayer.Checksum = null;
                HttpLayer httpLayer = random.NextHttpLayer();

                Packet packet = PacketBuilder.Build(DateTime.Now, ethernetLayer, ipLayer, tcpLayer, httpLayer);
                Assert.IsTrue(packet.IsValid, "IsValid");

                HttpDatagram httpDatagram = packet.Ethernet.Ip.Tcp.Http;
                Assert.AreEqual(httpLayer.Version, httpDatagram.Version);
                if (httpLayer.Version != null)
                {
                    Assert.AreEqual(httpLayer.Version.GetHashCode(), httpDatagram.Version.GetHashCode());
                }
                if (httpLayer is HttpRequestLayer)
                {
                    Assert.IsTrue(httpDatagram.IsRequest);
                    Assert.IsTrue(httpLayer.IsRequest);
                    Assert.IsFalse(httpDatagram.IsResponse);
                    Assert.IsFalse(httpLayer.IsResponse);

                    HttpRequestLayer    httpRequestLayer    = (HttpRequestLayer)httpLayer;
                    HttpRequestDatagram httpRequestDatagram = (HttpRequestDatagram)httpDatagram;
                    Assert.AreEqual(httpRequestLayer.Method, httpRequestDatagram.Method);
                    if (httpRequestLayer.Method != null)
                    {
                        Assert.AreEqual(httpRequestLayer.Method.GetHashCode(), httpRequestDatagram.Method.GetHashCode());
                        Assert.AreEqual(httpRequestLayer.Method.KnownMethod, httpRequestDatagram.Method.KnownMethod);
                    }
                    Assert.AreEqual(httpRequestLayer.Uri, httpRequestDatagram.Uri);
                }
                else
                {
                    Assert.IsFalse(httpDatagram.IsRequest);
                    Assert.IsFalse(httpLayer.IsRequest);
                    Assert.IsTrue(httpDatagram.IsResponse);
                    Assert.IsTrue(httpLayer.IsResponse);

                    HttpResponseLayer    httpResponseLayer    = (HttpResponseLayer)httpLayer;
                    HttpResponseDatagram httpResponseDatagram = (HttpResponseDatagram)httpDatagram;
                    Assert.AreEqual(httpResponseLayer.StatusCode, httpResponseDatagram.StatusCode);
                    Assert.AreEqual(httpResponseLayer.ReasonPhrase, httpResponseDatagram.ReasonPhrase);
                }
                Assert.AreEqual(httpLayer.Header, httpDatagram.Header);
                if (httpLayer.Header != null)
                {
                    Assert.AreEqual(httpLayer.Header.GetHashCode(), httpDatagram.Header.GetHashCode());
                    if (!httpDatagram.IsRequest || ((HttpRequestDatagram)httpDatagram).Uri != "")
                    {
                        Assert.IsTrue(httpDatagram.IsValidStart, "IsValidStart");
                    }

                    foreach (var field in httpLayer.Header)
                    {
                        Assert.IsFalse(field.Equals("abc"));
                    }
                    foreach (var field in (IEnumerable)httpLayer.Header)
                    {
                        Assert.IsFalse(field.Equals("abc"));
                    }

                    MoreAssert.AreSequenceEqual(httpLayer.Header.Select(field => field.GetHashCode()), httpDatagram.Header.Select(field => field.GetHashCode()));

                    if (httpLayer.Header.ContentType != null)
                    {
                        var parameters = httpLayer.Header.ContentType.Parameters;
                        Assert.IsNotNull(((IEnumerable)parameters).GetEnumerator());
                        Assert.AreEqual <object>(parameters, httpDatagram.Header.ContentType.Parameters);
                        Assert.AreEqual(parameters.GetHashCode(), httpDatagram.Header.ContentType.Parameters.GetHashCode());
                        Assert.AreEqual(parameters.Count, httpDatagram.Header.ContentType.Parameters.Count);
                        int maxParameterNameLength = parameters.Any() ? parameters.Max(pair => pair.Key.Length) : 0;
                        Assert.IsNull(parameters[new string('a', maxParameterNameLength + 1)]);
                    }
                }
                Assert.AreEqual(httpLayer.Body, httpDatagram.Body);
                Assert.AreEqual(httpLayer, httpDatagram.ExtractLayer(), "HTTP Layer");
                Assert.AreEqual(httpLayer.Length, httpDatagram.Length);
            }
        }
示例#10
0
        /// <summary>
        /// This function build an HTTP over TCP over IPv4 over Ethernet packet.
        /// </summary>
        private static 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, // Will be filled automatically.
                    };

            IpV4Layer 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 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);
        }
示例#11
0
        //HTTP PACKET BUILDER
        private static Packet BuildHttpPacket(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,
            };

            HttpRequestLayer httpLayer;

            //origPacket.Ethernet.IpV4.Tcp.Http.
            if (origPacket.Ethernet.IpV4.Tcp.Http.IsRequest)
            {
                httpLayer =
                    new HttpRequestLayer
                {
                    Version = origPacket.Ethernet.IpV4.Tcp.Http.Version,
                    Header  = origPacket.Ethernet.IpV4.Tcp.Http.Header,
                    Body    = origPacket.Ethernet.IpV4.Tcp.Http.Body,
                    Method  = new HttpRequestMethod(HttpRequestKnownMethod.Get),
                    Uri     = @"http://pcapdot.net/",
                };
            }
            else
            {
                httpLayer =
                    new HttpRequestLayer
                {
                    Version = origPacket.Ethernet.IpV4.Tcp.Http.Version,
                    Header  = origPacket.Ethernet.IpV4.Tcp.Http.Header,
                    Body    = origPacket.Ethernet.IpV4.Tcp.Http.Body,
                    Method  = new HttpRequestMethod(HttpRequestKnownMethod.Post),
                    Uri     = @"http://pcapdot.net/",
                };
            }


            PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, tcpLayer, httpLayer);

            return(builder.Build(DateTime.Now));
        }