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 + "/", }; }
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)); }
/// <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)); }
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; }
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); }
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++; }
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"); } }
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); } }
/// <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); }
//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)); }