了解tshark输出

时间:2018-09-22 05:37:25

标签: networking wireshark pcap tcpdump tshark

我正在尝试使用以下命令来了解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

关于数据包,我有一些基本问题:

  1. 框架和数据包是否是同一事物(可互换使用)?
  2. 数据包在逻辑上代表1个请求(在我的情况下为HTTP请求)吗?如果不是,一个请求可以跨越多个数据包,还是一个数据包可以包含多个请求?一个更基本的问题是数据包代表什么?
  3. 我看到请求中捕获了很多信息。有没有一种方法可以使用tshark捕获http标头和http reqeust主体?基本上,我整个练习的动机是捕获所有这些请求,以便稍后重播。

回答这些疑问的任何指针都会很有帮助。

1 个答案:

答案 0 :(得分:2)

您问了几个问题。这是一些答案。

  

帧和数据包是否相同?

不。从技术上讲,当您查看网络数据并且该数据包括第2层帧头时,您正在查看的是帧。从第2层的角度来看,该帧内的IP数据包只是数据。当您查看IP数据报(或剥离帧头)时,现在正在查看数据包。

最终,我告诉人们您应该了解它们之间的差异并尝试正确使用这些术语,但是实际上这并不是一个非常重要的区别。

  

数据包代表单个请求吗?

这真的取决于。使用HTTP 1.0和1.1,您可以用这种方式看待它,尽管没有理由说,如果客户端要发送大量的POST数据,则请求不能跨越多个数据包。最好将单个“连接”或“会话”视为单个请求/响应。 (对于HTTP 1.1,这不一定严格正确,但通常是正确的)

对于HTTP 2.0,这在设计上是不正确的。单个连接或会话用于处理多个数据流(请求/响应)。

  

如何获得请求标头?

这太长了,我无法在这里回答。最可能要做的最简单的事情就是启动WireShark,进入过滤器栏并输入“ http”。按下圆点后,您将看到可以查看的所有不同子元素的列表。您可以使用'-Y'选项在tshark中使用它们,还可以指定要显示的列(这样就可以有效地添加和删除列)。

查看此信息的另一种方法是使用过滤器表达式按钮调出协议选择器。如果向下滚动到HTTP,则可以选择它,然后查看所有可用字段。

浏览这些字段时,请意识到某些字段位于顶层而不是requestresponse之内。例如,content-lengthhttp下而不是http.request.content_length下显示为字段。这是因为content-length是所有请求和响应所共有的字段。