在某些方面,tcpdump命令看起来像是一个非常基本的工具,用于从网络获取包(更准确地说是“帧”)并允许您检查它们。即便如此,
通过使用这个方便的嗅探器,您可以深入了解网络上正在发生的事情,而且它的选项比您可能预期的多得多。
“tcpdump”这个名字没有任何意义。您可能会在大多数Linux系统上发现tcpdump命令,它是一个基本的“嗅探器”。也就是说,它从您的本地网络中提取数据包,让您进行检查
他们以不同的方式。可能不太明显的是,tcpdump会自动将自己放入其中
混杂模式。也就是说,它改变了你的网络接口卡上的设置,以这样一种方式,它发送所有到达它的帧——而不仅仅是那些打算给你的
系统-打开处理。这就是为什么它有能力成为一个真正的“嗅探者”。它使您能够查看系统通过“线路”(物理的或非物理的)的所有流量
连接到。
如果希望在不进入混杂模式的情况下运行tcpdump,则必须使用-p选项故意关闭该特性。所以,虽然看起来有点违反直觉,-p的意思是
“关闭乱交”,而不是“打开它”。
如果你输入tcpdump,并得到响应“没有找到合适的驱动程序”,您可能不是root用户。对不起,除非作为根用户,否则不能运行tcpdump。你可以用sudo,但是你
需要是根。
如果你输入tcpdump你的屏幕开始充满像这样的行,在你有时间输入control-c之前,你可能会有几千行。否则,
它将继续填满你的屏幕,直到你做到。即使在相对安静的网络领域,也有很多事情在发生。
17:15:59.507360 IP xyz- boon-1.particles.com.ssh > 10.20.30.115.54669: p3162503 580:3162503776(196) ack 830458431 win 80ack 196 win 251 17:15:59.507738 IP xyz- boon-1.particles.com.30942 > xyz-dc-1.particles.com.dom ain: 64469+ PTR?115.230.2.10.in-addr.arpa。arp who-has 10.2.248.27 tell 10.2.248.25 17:15:59 523468 IP xyz- dc1.particles.com.domain > xyz- boon-1.particles.com.309 42: 64469 NXDomain 0/0/0
开始使用tcpdump的一种较温和的开始策略可能是只获取少量包。要做到这一点,你可以使用-c (count)选项来指定你想收集多少帧:
# tcpdump -c 2 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytesp3706680 062:3706680258(196) ack 474521172 win 71 13:40:11.368501 IP 10.20.30.115.58774 > xyz- boon-1.particles.com.ssh:。Ack 196 win 255 2包捕获5包收到过滤器0包丢失的内核
每一行的第一部分是时间戳。那些13:40:11.507360字符串。13:40:11部分应该相当明显——小时、分钟和秒。剩下的部分可以看到很小的部分
的秒。
然后我们看到源(>的左边)和目的地(>的右边)系统以及一些包内容。
更好的是,您可以将这些数据包写入一个文件,以便您可以在闲暇时仔细阅读它们。在下面的命令中,我们捕获了10个包并将它们填充到文件/tmp/c10中。这将吸引
出现的前十个包。使用-w (write)选项。
# tcpdump -c 10 -w /tmp/c10 tcpdump: listening on eth0, link type EN10MB (Ethernet), capture size 96 bytes 10 packets captured 12 packets received by filter 0 packets dropped by kernel
完成此操作后,您将使用另一个tcpdump命令来检查收集并保存在文件中的包。
# tcpdump -r /tmp/c10
使用-r (read)选项的这个命令将列出前面收集的所有包。
可以使用-i (interface)选项切换要使用的接口。
# tcpdump -c 10 -w /tmp/c10 -i bond0 tcpdump: listening on bond0, link-type EN10MB (Ethernet), capture size 96 bytes 10 packets capturing 10 packets received by filter 0 packets dropped by kernel . # tcpdump: listening on bond0, link-type EN10MB (Ethernet), capture size 96 bytes 10 packets received by filter 0 packets dropped by kernel
可以使用-D选项列出tcpdump可以从哪些接口收集数据包。
# tcpdump -Deth0 2。bond0 3。eth1 4。在所有接口上捕获的伪设备
当然,查看所有的网络流量或在几分之一秒内通过您连接的所有网络流量可能不会让您感兴趣
很长时间。很快,您就会想要开始寻找特定的内容,这些内容可以帮助您进行故障排除,也可以让您了解哪些系统正在进行通信
你所依附的网络部分或者他们正在做什么。
tcpdump允许您为将要收集的包指定源或目的地(或两者都指定)。只要记住,如果你说源是10.20.30.40和
目标是10.20.30.50,您将不会看到10.20.30.50响应10.20.30.40,因为角色随后将被颠倒。
您还可以使用“host”这个词来查看特定系统的所有信息。
# tcpdump host boson.particles.org -w /tmp/boson$$
您也可以使用类似的命令指定源端口或目的端口。在下面的示例中,我们使用tcpdump收集指向本地web服务器的流量。
# tcpdump -i bond0 dst port 80 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on bond0, link-type EN10MB (Ethernet), capture size 96 bytes 14:38:13.301801 IP nagios.particles.com.59344 > www.particles.org.http:S 3558234 391:3558234391(0) win 584014:38:13.301900 IP nagios.particles.com.59344 > www.particles.org.http:。Ack 231 4423727 win 46
您还可以选择如何显示收集到的包。在下面的示例中,我们将以十六进制和ASCII格式显示一个收集的数据包。
1 # tcpdump - bond0 - c - xx tcpdump:详细输出镇压,使用- v或完整协议解码监听bond0 vv,链接类型EN10MB(以太网),捕获大小96字节17:38:31.570524 IP xyz -玻色子- 1. - particles.com.ssh > 10.20.30.115.54669: P 3162608 328:3162608524(196) 80赢830478067 0 x0000:消0000 0c07 ac01 782b cb5f a949 0800 4510 ......x+. _i .…0x0010: 00ec 3cc6 4000 4006 0025 0a01 029b 0a02 ..<.@.@..%...... .0x0020: e673 0016 d58d bc81 92c8 3180 16f3 5018 .s........1…0x0030: 0050 33c4 0000 8775 514e a605 e7f7 505c .P3....uQN....P\ 0x0040: f6e6 559e 3bc7 2317 f28d 9a29 8798 cf04 .. u;.#....)....0x0050: b4a7 36f0 30e9 89d1 1da0 0860 3bb7 cfed .6.0...... ';…
无论何时,当您在对一个涉及似乎存在连接问题的系统的问题进行故障排除时,您都可以考虑使用tcpdump来了解是哪种类型的连接问题
流量正在通过你的网络。手册页可能只显示一串选项,例如-AdDeflLnNOpqRStuUvxX,甚至是其中每个字母的简单翻译
String不会告诉你你想知道的一切。