如何在 pcap.net 中创建 HttpResponseDatagram 和 HttpResponseLayer

Posted

技术标签:

【中文标题】如何在 pcap.net 中创建 HttpResponseDatagram 和 HttpResponseLayer【英文标题】:How can I create HttpResponseDatagram and HttpResponseLayer in pcap.net 【发布时间】:2017-10-16 03:10:51 【问题描述】:

我无法在 pcap.net 中创建这些对象

IpV4Datagram ip = packet.Ethernet.IpV4;
        TcpDatagram tcp = ip.Tcp;
        HttpDatagram http = tcp.Http;
     //   HttpResponseDatagram resdat=http.;  How can i create them?
     //   HttpResponseLayer resp;
if (tcp.Http.Body != null && http.IsResponse)
            body = resp.Body.ToString();

我正在尝试从 tcp 数据包中获取 HTTP 响应正文。如果有其他方法可以做到这一点,有人可以帮忙吗?

【问题讨论】:

您在 packet 级别工作有什么原因吗?大多数网站运行的数据包大小在 1460 字节范围内,而典型页面的内容是该大小的许多倍。 我正在制作一个 tcp 监听器,我监听所有的数据包。这不是数据包计数的问题。 【参考方案1】:

在Pcap.Net User Guide 中有a section about sending packets。 在该部分中,有一个关于如何创建HttpRequestLayer 的示例,创建HttpResponseLayer 非常相似。

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

HttpResponseDatagram 是通过解析一个 HTTP 数据包来创建的。 例如,通过做

packet.Ethernet.IpV4.Tcp.Http

没有简单的方法可以在不解析数据包的情况下创建Datagram

【讨论】:

以上是关于如何在 pcap.net 中创建 HttpResponseDatagram 和 HttpResponseLayer的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 PCap.Net 数据包数据?

c#在pcap.net中提供包源

.net 数据包捕获:pcap.net 与 Sharppcap

为啥使用 PCap.NET 发送的数据包没有填写 TCP 选项?

pcap.net ReceivePacket 无法正常工作

Pcap.net vs Sharppcap