从 pcap 重构 HTTP 浏览
Reconstruct HTTP browsing from pcap
我目前正在尝试仅使用 pcap 自动重建 HTTP 浏览(基本上这意味着将 HTTP 回复与下一个 HTTP 请求相匹配)。大多数时候,它工作正常,但有时某个 url,u,出现在多个 HTTP 回复的数据中。
例如,如果 u1 和 u2 在其回复数据中包含 u,并且如果对 u 的请求发生在对 u2 的请求之后,我如何确定对 u 的请求是由 u1 还是 u2 引起的?注意u1和u2之间没有向u请求。
我可以使用任何网络层中的某些字段来进行此匹配吗?
谢谢!
HTTP 在 TCP 之上运行,即 connection-oriented。您可以访问用于 HTTP 请求的连接的 IP header(客户端 IP/port -> 服务器 IP/Port)。
HTTP 是一个 command/response 协议,每个请求有 1 个响应。
因此,只需在同一 TCP 连接(服务器 IP/Port -> 客户端 IP/Port)上的 HTTP 请求之后立即查找 HTTP 响应。
HTTP 是 state-less,请求之间可以关闭连接而不影响整体浏览模型(关闭连接是 HTTP 0.9 中的必需行为,是 HTTP 1.0 中的默认行为,并且不是默认行为HTTP 1.1+ 中的行为),因此 HTTP 响应有可能触发对新连接的后续请求,因此您需要准备好处理它。 HTTP 请求中的 Connection
header 将告诉您客户端是否要求连接保持打开状态。 HTTP 响应中的 Connection
header 会告诉您服务器在发送响应后是否真的关闭了连接。但是,即使服务器保持连接打开,也不能保证 客户端实际上会为以后对同一服务器的请求重用同一连接(尽管它很可能会重用,除非超时已过)在请求之间)。
我目前正在尝试仅使用 pcap 自动重建 HTTP 浏览(基本上这意味着将 HTTP 回复与下一个 HTTP 请求相匹配)。大多数时候,它工作正常,但有时某个 url,u,出现在多个 HTTP 回复的数据中。
例如,如果 u1 和 u2 在其回复数据中包含 u,并且如果对 u 的请求发生在对 u2 的请求之后,我如何确定对 u 的请求是由 u1 还是 u2 引起的?注意u1和u2之间没有向u请求。
我可以使用任何网络层中的某些字段来进行此匹配吗?
谢谢!
HTTP 在 TCP 之上运行,即 connection-oriented。您可以访问用于 HTTP 请求的连接的 IP header(客户端 IP/port -> 服务器 IP/Port)。
HTTP 是一个 command/response 协议,每个请求有 1 个响应。
因此,只需在同一 TCP 连接(服务器 IP/Port -> 客户端 IP/Port)上的 HTTP 请求之后立即查找 HTTP 响应。
HTTP 是 state-less,请求之间可以关闭连接而不影响整体浏览模型(关闭连接是 HTTP 0.9 中的必需行为,是 HTTP 1.0 中的默认行为,并且不是默认行为HTTP 1.1+ 中的行为),因此 HTTP 响应有可能触发对新连接的后续请求,因此您需要准备好处理它。 HTTP 请求中的 Connection
header 将告诉您客户端是否要求连接保持打开状态。 HTTP 响应中的 Connection
header 会告诉您服务器在发送响应后是否真的关闭了连接。但是,即使服务器保持连接打开,也不能保证 客户端实际上会为以后对同一服务器的请求重用同一连接(尽管它很可能会重用,除非超时已过)在请求之间)。