tcpdump命令实例

默认启动

  1. tcpdump

直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

指定网络接口的数据包

tcpdump -i eth1

PS:如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。

指定主机的数据包

1、所有210.27.48.1 的主机收到的和发出的所有的数据包

tcpdump host 210.27.48.1

2、主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信

tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

3、获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包

tcpdump ip host 210.27.48.1 and ! 210.27.48.2

4、主机hostname发送的所有数据

tcpdump -i eth0 src host hostname

5、所有送到主机hostname的数据包

tcpdump -i eth0 dst host hostname

指定主机和端口的数据包

1、获取主机210.27.48.1接收或发出的telnet包

tcpdump tcp port 23 and host 210.27.48.1

2、对本机的udp 123 端口进行监视 123 为ntp的服务端口

tcpdump udp port 123

tcpdump 与wireshark

Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具。但在Linux下很难找到一个好用的图形化抓包工具。
还好有Tcpdump。我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包。

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
  • tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
  • -i eth1 : 只抓经过接口eth1的包
  • -t : 不显示时间戳
  • -s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
  • -c 100 : 只抓取100个数据包
  • dst port ! 22 : 不抓取目标端口是22的数据包
  • src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
  • -w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

使用tcpdump抓取HTTP包

tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

0x4745 为”GET”前两个字母”GE”,0x4854 为”HTTP”前两个字母”HT”。

tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序(如Wireshark)进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

节选自:https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html