tcpdump是如何工作的?
tcpdump工作在设备层,是通过虚拟协议的方式工作的。通过调用packet_create将抓包函数以协议的形式挂到ptype_all上。
当收包的时候,驱动中实现的igb_poll函数最终会调用到_netif_receive_skb_core,这个函数会在将包发送到协议栈函数(ip_recv、arp_recv等)之前,将包先发送到ptype_all抓包点。tcpdump就是基于这些抓包点来工作的。
iptables/netfilter是在哪一层实现的?
netfilter主要是在IP、ARP等层实现的
收包:
tcpdump工作在网络设备层,将包发送到IP层以前就能处理,netfilter工作在IP、ARP层,所以iptable封禁规则不影响tcpdump的抓包。
发包:
发包的时候,netfilter在协议层就被过滤掉了,所以tcpdump什么也看不到