如果需要将数据包捕获然后通过其他程序(如wireshark)分析,可以使用选项-w file将数据写入文件,同时还需要使用选项-s 0指定能够捕获的数据包大小为65535字节,以避免数据包被截断而无法被分析。
真实环境中,流经网卡的数据包量是巨大的。可以使用表达式来对数据包进行过滤,对于每个数据包,都要经过表达式的过滤,只有表达式的值为true时,才会输出。
expression中可以包含一到多个关键字指定的条件,可以使用and(或&&)、or(或||)、not(或!)和括号()表示各个关键字间的逻辑关系,可以用>、<表示比较,还可以进行计算。其中关键字包括:
type类型关键字,如host、net、port和portrange,分别表示主机、网段、端口号、端口段。
direction方向关键字,如src、dst分别表示源和目的。
proto协议关键字,如fddi、arp、ip、tcp、udp等分别表示各种网络协议。
由于篇幅所限,下面的例子中将只描述选项和表达式所起到的作用,不再解释输出内容:
tcpdump -i ens33 dst host 10.0.1.251 #监视所有从端口ens33发送到主机10.0.1.251的数据包,主机也可以是主机名 tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80 #监听端口eth0,抓取不是来自或去到主机211.161.223.70和211.161.223.71并且目标端口为80的包 tcpdump tcp port 23 host 210.27.48.1 #获取主机210.27.48.1接收或发出的telnet包tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) and src net (183.60.190 or 122.13.220)' -s0 -i eth0 -w ipdump #抓取源或目的端口是80,且源网络是(183.60.190.0/24 或者 122.13.220.0/24),并且含有数据,而不是SYN,FIN以及ACK-only等不含数据的TCP数据包写入文件ipdump #注意这里表达式使用单引号引起来以避免其中的特殊字符被shell解析而造成语法错误 tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and ! src and dst net 10.0.0' #只打印TCP的开始和结束包(SYN和FIN标记),并且源和目标网段均不是10.0.0.0/24 tcpdump 'gateway 10.0.1.1 and ip[2:2] > 576' #表示抓取发送至网关10.0.1.1并且大于576字节的IP数据包
网络相关命令内容较多,希望能够帮到你。










