CentOS7虚拟机中tcpdump结合grep指定Google IP无输出的问题排查
CentOS7虚拟机中tcpdump结合grep指定Google IP无输出的问题排查
嗨,我来帮你捋清楚这个问题~你遇到的其实是tcpdump和grep结合时的两个常见小坑,咱们一步步解决:
问题根源1:tcpdump的缓冲机制让输出延迟
默认情况下,当tcpdump把输出通过管道传给grep时,会启用全缓冲模式——它会攒够一大段内容才会传给grep,所以你会感觉命令“卡住”没反应,其实是内容还在tcpdump的缓冲区里没发出来。
解决方法很简单,给tcpdump加上-l参数,开启行缓冲模式,这样每抓到一行包就立刻传给grep:
tcpdump -l -i enp0s3 | grep 142.250.187.196
问题根源2:tcpdump默认做了IP反向解析,输出里看不到原始IP
看你提供的tcpdump输出,显示的是lhr25s33-in-f4.1e100.net而不是你要搜的142.250.187.196——这是因为tcpdump默认会把IP地址反向解析成域名,所以grep搜IP自然匹配不到任何内容。
解决这个问题,只需再加一个-n参数,禁止tcpdump做反向解析,直接显示原始IP:
tcpdump -l -n -i enp0s3 | grep 142.250.187.196
更高效的替代方案:直接用tcpdump过滤规则
其实tcpdump本身就支持强大的过滤语法,完全不用依赖grep,这样抓包效率更高,也更精准。比如你要抓和指定IP相关的ICMP包,可以直接写:
tcpdump -n -i enp0s3 icmp and host 142.250.187.196
另外你担心的“Google不暴露IP”是误解哦,只是tcpdump默认帮你做了域名解析,把IP转换成了Google的服务器域名,所以你看不到原始IP而已~
备注:内容来源于stack exchange,提问作者Lulu
相关产品推荐
相关产品推荐

