昨天在服务器上用tcpdump抓包学习了两个新知识。
太长不看:
1、镜像口的流量使用tcpdump抓包时,尝试使用vlan参数。
2、不指定网卡,而使用tcpdump -ni any的时候,可能会无法使用vlan参数,需要指定具体网卡。
具体的情况:
首先,我这台服务器有三个网卡,其中两个网卡接了交换机的镜像流量,一个网卡是服务器的ip用于登录。
然后,从61.xx.xx.xx ping 114.xx.xx.xx,尝试在服务器上抓包,结果发现只有request,为什么没有reply?
[root@localhost maltrail]# tcpdump -ni any host 114.xx.xx.xx and icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
11:47:51.009867 IP 61.xx.xx.xx > 114.xx.xx.xx: ICMP echo request, id 26894, seq 6024, length 40
11:47:52.011804 IP 61.xx.xx.xx > 114.xx.xx.xx: ICMP echo request, id 36239, seq 6025, length 40
11:47:53.010777 IP 61.xx.xx.xx > 114.xx.xx.xx: ICMP echo request, id 32766, seq 6026, length 40
11:47:54.010792 IP 61.xx.xx.xx > 114.xx.xx.xx: ICMP echo request, id 29980, seq 6027, length 40
最初以为是交换机镜像口配错了,反复向交换机同学确认,交换机镜像口确实是both镜像。
随后一恼,尝试不使用filter,而使用grep来过滤
[root@localhost maltrail]# tcpdump -ni any | grep "IP 114\.xx\.xx\.xx" | grep ICMP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
11:52:13.037124 IP 114.xx.xx.xx > 61.xx.xx.xx: ICMP echo reply, id 60936, seq 6028, length 40
11:52:14.047035 IP 114.xx.xx.xx > 61.xx.xx.xx: ICMP echo reply, id 63291, seq 6029, length 40
11:52:15.047064 IP 114.xx.xx.xx > 61.xx.xx.xx: ICMP echo reply, id 58938, seq 6030, length 40
11:52:16.047052 IP 114.xx.xx.xx > 61.xx.xx.xx: ICMP echo reply, id 58723, seq 6031, length 40
卧槽?! 有reply了,但没有request了……这是什么诡异情况……总之先向交换机同学道歉,抱歉,我错了……
随后尝试将两种方式抓的包写入到pcap文件中,用wireshark分析,一对比马上就发现问题了。总结如下三种情况
1、在使用filter的情况下,抓的包没有下面的vlan信息,只能抓到request请求
2、不使用filter的时候,则会有下述的vlan信息,但只能抓到reply的应答,而且需要对输出内容额外再做过滤。
3、使用filter,同时使用vlan参数,包中有vlan信息,但只能抓到reply的应答。
根据自身的业务情况决定使用具体哪种方式。
使用tcpdump -ni any 时,再使用vlan参数,由于any中包含管理ip的网卡,因此会报错,指定具体的eth0或者eth1就不会报了。
tcpdump: no VLAN support for data link type xxx