我对tcpdump相当陌生。 我从来没有使用它,除非是非常琐碎的任务。
最近,我被要求完成以下工作。
我有:一个networking接口连接到交换机的服务器。 该交换机上的所有stream量都将镜像到此服务器。 我需要:将所有这些stream量存储到PCAP格式文件。 该文件应该包括
在白天stream量将达到〜100MByte / s,对于我的工作,丢包是不可容忍的(它必须连续 24小时)。
无论如何,如上所述,我并不需要一切。
题:
谢谢。
我最好的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参数的“正确”值。