tcpdump如何使用它来捕获所有stream量标题

我对tcpdump相当陌生。 我从来没有使用它,除非是非常琐碎的任务。

最近,我被要求完成以下工作。

我有:一个networking接口连接到交换机的服务器。 该交换机上的所有stream量都将镜像到此服务器。 我需要:将所有这些stream量存储到PCAP格式文件。 该文件应该包括

  1. 只有传出或传入stream量感兴趣。 仅在子网内传输的stream量不是必需的,如果可能的话不应logging。
  2. 所有的多播和广播stream量都不感兴趣,如果可能的话应该忽略
  3. 我只需要以太网 – > IPv4 – > TCP,UDP和ICMP。 其他人不感兴趣,如果可能的话应该被忽略
  4. 我不需要邮件正文。 头(以太网,IP和TCP / UDP / ICMP)就足够了。 所以如果可能的话,身体不应该被logging

在白天stream量将达到〜100MByte / s,对于我的工作,丢包是不可容忍的(它必须连续 24小时)。
无论如何,如上所述,我并不需要一切。

题:

  1. 我该怎么做?
  2. 我应该怎样处理,以便所有数据都能顺利收集而不会丢失(几乎)。

谢谢。

我最好的select是使用像这样的东西:

tcpdump -ieth0 -s96 -w traffic.dump 'ip or icmp or tcp or udp' 

其中“棘手”部分将是为“-s”(snaplen)参数select正确的值(snaplen是tcpdump将捕获的数据包的最大长度)。

从tcpdump手册页:

Snarf从每个数据包中读取数据字节,而不是默认的68(使用NIT,最小值实际上是96)。 对于IP,ICMP,TCP和UDP,68字节是足够的,但可能会截断来自名称服务器和NFS数据包的协议信息(参见下文)。 在“`| proto]”的输出中指示由于快照有限而截断的数据包,其中proto是发生截断的协议级别的名称。 请注意,采用较大的快照既增加了处理数据包所需的时间,也有效地减less了数据包缓冲的数量。 这可能会导致数据包丢失。 您应该将snaplen限制为捕获您感兴趣的协议信息的最小号码。

在这个例子中,我使用96来“几乎”确定我将捕获100%的ethernet + ip +(icmp || udp || tcp)标头值。

如果你的stream量有IP或TCP选项(即时间戳),你也想捕获这个信息,那么你将不得不玩snaplen参数(即增加/减less它)。

如果你的数据包的头部长度小于snaplen,你也可以捕获部分有效载荷。

最后,要读取捕获的stream量,我会使用类似于:

 tcpdump -e -nn -vv -r traffic.dump 

其中重要的部分是使用“-e”选项,以便您可以打印以太网头。

这个页面给你一个在不同情况下ethernet / tcp / udp头文件大小的想法,并且可以帮助你得到snaplen参数的“正确”值。