1、指定要抓取的网卡
tcpdump -i eth0 (-i 即interface)
2、指定要抓取的协议
tcpdump -i eth0 icmp 抓取网卡eth0上的icmp包
虚拟机:(169.254.128.0)
用主机ping虚拟机
3、指定主机,抓取流入或流出169.254.0.1的包
tcpdump -i eth0 icmp and host 169.254.0.1 (169.254.0.1是主机网卡的IP)
先用虚拟机Ping baidu.com
一直没有抓到包,因为baidu.com的服务器ip不是指定的IP
用虚拟机Ping宿主机(Windows)
3-1 指定源主机,抓取由hostname发出的包
tcpdump -i eth0 src host hostname
tcpdump -i eth0 icmp and src host hostname 结合icmp
3-2 指定目的主机,抓取发往hostname的包
tcpdump -i eth0 icmp and dst hostname
4、抓取指定端口
tcpdump -i eth0 tcp port 22 (ssh端口为22)
tcpdump -i eth0 udp port number 抓指定udp端口
选项:
-n选项:不解析域名,而是直接显示IP
-nn选项:不解析域名,也不解析端口,直接显示IP的端口号。
比如上图,把22号端口解析为ssh
使用-nn
可以看到没有把22号端口解析为ssh,而是直接显示的端口号
-v 选项:显示详细信息
不用-v选项显示的信息
使用-v
可以看到更详细的信息(IP包头的ttl等字段)
-X 选项:用hex和ascii来显示报文的内容
-XX:比-X多显示以太网头
可以看到多了14个字节(以太网头部的长度)
-A:只用ascii打印报文内容,不显示hex部分
把抓到的包写到文件中,
tcpdump -i eth0 icmp -w cap_icmp_2.pcap
写到文件时,是不会在屏幕上显示的,稍等一会Ctrl+C中止。(icmp包)
可以看到已经保存了,可以使用WinSCP把文件拖到Windows中,用wireshark打开。
使用-r选项读出文件中保存的包
在学习tcpdump的时候,tcpdump命令会挂起,好像此时只能接收其他主机发过来的包,而不能主动向外发送数据包。
解决方法:
1、使用secureCRT 登陆虚拟机,一个发包,一个抓包
2、Linux中使用Ctrl+Alt+F1 - F6 切换虚拟控制台
比如,在当前控制台打开tcpdump监听,Ctrl+Alt+F2切换到一个新的控制台,在这个控制台中发送数据包(ping baidu.com),然后Ctrl+Alt+F1返回到tcpdump的控制台中查看抓取包的情况。