Tcpdump它依赖的是libpcap库,libpcap使用的是一种称为设备层的包接口技术。使用这种技术,应用程序可以直接读写内核驱动层面的数据,而不经过完整的Linux网络协议栈.
tcpdump和iptables的关系
如果一种输入的网络通信被iptables给禁止了,那么tcpdump开可以抓取到吗?
答案是肯定的,tcpdump直接从网络驱动层面抓取输入的数据,不经过任何linux网络协议栈。iptables依赖的模块工作在linux网络协议栈中,因此,iptables的入栈策略不会影响tcpdump抓取。但iptables的出栈策略会影响数据包发送到网络层面,因此,它的出栈策略会影响tcpdump的抓取。
总结关系如下:
tcpdump可以抓取到被iptables在INPUT链上DROP掉的数据包
tcpdump不能抓取到被iptables在OUTPUT链上DROP掉的数据包
tcpdump常用的5个参数
-i 指定需要抓包的网卡 如果未指定的话,tcpdump会根据搜索到的系统中状态为UP的最小数字的网卡确定,一般情况下为eth0,使用-i参数通过指定需要抓包的网卡,可以有效的减少抓取到的数据包的数量,增加抓包的针对性,便于后续分分析工作。
-nnn 禁用tcpdump展示时把IP,端口等转换为域名,端口对应的知名服务名称,这样看起来更加清晰
-s 指定抓包的包大小 使用-s 0 指定数据包大小为262 144字节,可以使得抓到的数据包不被截断,完整反映数据包的内容
-c 指定抓包的数量
-w 指定抓包文件保存到文件,以便后续使用工具分析