我正在尝试使用以下命令来了解tshark
捕获的网络数据的输出
sudo tshark -i any ‘tcp port 80’ -V -c 800 -R ‘http contains <filter__rgument>' > <desired_file_location>
因此,我在输出中得到了一些数据包,每个数据包都以这样的一行开头:
Frame 5: 1843 bytes on wire (14744 bits), 1843 bytes captured (14744 bits) on interface 0
关于数据包,我有一些基本问题:
回答这些疑问的任何指针都会很有帮助。
答案 0 :(得分:2)
您问了几个问题。这是一些答案。
帧和数据包是否相同?
不。从技术上讲,当您查看网络数据并且该数据包括第2层帧头时,您正在查看的是帧。从第2层的角度来看,该帧内的IP数据包只是数据。当您查看IP数据报(或剥离帧头)时,现在正在查看数据包。
最终,我告诉人们您应该了解它们之间的差异并尝试正确使用这些术语,但是实际上这并不是一个非常重要的区别。
数据包代表单个请求吗?
这真的取决于。使用HTTP 1.0和1.1,您可以用这种方式看待它,尽管没有理由说,如果客户端要发送大量的POST数据,则请求不能跨越多个数据包。最好将单个“连接”或“会话”视为单个请求/响应。 (对于HTTP 1.1,这不一定严格正确,但通常是正确的)
对于HTTP 2.0,这在设计上是不正确的。单个连接或会话用于处理多个数据流(请求/响应)。
如何获得请求标头?
这太长了,我无法在这里回答。最可能要做的最简单的事情就是启动WireShark,进入过滤器栏并输入“ http”。按下圆点后,您将看到可以查看的所有不同子元素的列表。您可以使用'-Y'选项在tshark中使用它们,还可以指定要显示的列(这样就可以有效地添加和删除列)。
查看此信息的另一种方法是使用过滤器表达式按钮调出协议选择器。如果向下滚动到HTTP,则可以选择它,然后查看所有可用字段。
浏览这些字段时,请意识到某些字段位于顶层而不是request
或response
之内。例如,content-length
在http
下而不是http.request.content_length
下显示为字段。这是因为content-length
是所有请求和响应所共有的字段。