命令:
tcpdump not tcp port 22
tcpdump ! tcp port 22
4. 括号
括号需要使用在引号内,或转意使用。否则会报错。
例:抓取非22端口,且主机为192.168.1.112 和 192.168.1.113的TCP数据包。
命令:
tcpdump not tcp port 22 and host 192.168.1.112or192.168.1.113
tcpdump "not tcp port 22 and host (192.168.1.112 or 192.168.1.113)"
tcpdump not tcp port 22 and host "(192.168.1.112 or 192.168.1.113)"
六、其他实例
1. 打印所有进入或离开sundown的数据包.tcpdump host sundown
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 dst host hostname
5. 获取主机210.27.48.1接收或发出的telnet包
23为telnet的端口
tcpdump tcp port 23 and host 210.27.48.1
6. 监视本机的udp 123 端口
123 为ntp的服务端口
tcpdump udp port 123
7. 使用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)进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。
六、查看数据包完整内容
tcpdump默认不显示数据包的详细内容。
方法一:
使用-A参数能以ASCII码显示数据包。
例:只抓取1个数据包,并显示其内容。
命令:
tcpdump -c 1 -A
方法二:
使用-X参数能16进制数与ASCII码共同显示数据包。
例:只抓取1个数据包,并显示其内容。
命令:
tcpdump -c 1 -X
七、tcpdump 与wireshark
Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具,现在也有Linux版本。
通过Tcpdump抓取的数据包分析比较麻烦,要想很方便的分析数据包, 我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包。
保存数据包为wireshark能识别的文件:
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
参数含义tcpip 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)分析