Kernel之Tcpdump和Netfilter

tcpdump 的工作原理

  1. tcpdump 捕获通过网络接口的数据包,并以可读的格式显示出来。它可以访问 OSI 模型中的数据链路层(第 2层)及以上的层级,从而捕获并分析数据包的头部和有效载荷。
  2. tcpdump 本身并不直接使用钩子函数,因为它是一个用户空间的工具,依赖于操作系统提供的底层机制来捕获网络数据包。tcpdump 是通过 libpcap 库来实现数据包捕获的,而 libpcap 则是通过操作系统的网络栈接口来获取数据包。

tcpdump 的工作流程

tcpdump 的工作流程可以简化为以下几个步骤:

  1. 初始化:
    tcpdump 调用 libpcap 库来初始化数据包捕获。
    libpcap通过操作系统提供的接口来设置数据包捕获。
  2. 数据包捕获:
    操作系统网络栈在接收到数据包时,会将数据包传递给 libpcap。
    libpcap 将数据包传递给 tcpdump。
  3. 数据包处理:
    tcpdump 根据用户指定的过滤规则和显示选项,对数据包进行处理和输出。

Netfilter 框架

Netfilter 是 Linux 内核中的一个框架,用于对网络数据包进行过滤、修改和重定向。它提供了多个钩子点(hook points),允许用户在不同的网络层插入自定义逻辑。

Netfilter 主要功能

  1. 数据包过滤(如防火墙)。
  2. 网络地址转换(NAT,包括 SNAT 和 DNAT)。
  3. 数据包修改(如修改 TTL、TOS 等字段)。
  4. 数据包日志记录。

Netfilter 钩子点

  1. NF_INET_PRE_ROUTING:
    数据包进入网络栈后,但在路由决策之前。
    适合用于 DNAT(目标地址转换)或数据包标记。
  2. NF_INET_LOCAL_IN:
    数据包目标是本机(即目标地址是本机的 IP 地址)。
    适合用于过滤或修改进入本机的数据包。
  3. NF_INET_FORWARD:
    数据包需要被转发到其他主机(即本机作为路由器)。
    适合用于过滤或修改转发的数据包。
  4. NF_INET_LOCAL_OUT:
    数据包从本机发出。
    适合用于过滤或修改从本机发出的数据包。
  5. NF_INET_POST_ROUTING:
    数据包在路由决策之后,但在发送到网络接口之前。
    适合用于 SNAT(源地址转换)或数据包标记

iptable 和 ebtable是否都属于 netfilter?

iptables 和 ebtables 都是基于 Netfilter 框架的工具,但它们的作用范围和使用场景有所不同

iptables 和 ebtables 区别

在这里插入图片描述

iptables 和 ebtables 关系

  • 共同点:
    两者都基于 Netfilter 框架。
    都使用类似的表(Tables)和链(Chains)结构。
    都支持过滤、NAT 和修改功能。
  • 不同点:
    iptables 主要用于 IPv4 数据包,而 ebtables 主要用于以太网帧。
    iptables 工作在网络层,而 ebtables 工作在数据链路层。

tcpdump是抓哪一层iso层的log

它可以用于捕获不同 ISO模型中的多个层次的数据包,具体取决于过滤条件和抓包配置。

物理层(网卡接收数据包)

数据链路层(Layer 2,以太网帧)

ebtables(修改/过滤以太网帧)→ 数据包被处理并继续传递

tcpdump(抓取链路层数据包的副本,需指定参数如 -e

网络层(Layer 3,IP 数据包)

iptables(修改/过滤 IP 数据包)→ 数据包被处理并继续传递

tcpdump(默认抓取网络层及以上的数据副本)

传输层(TCP/UDP)→ 应用层

说明

  1. 数据链路层(Layer 2):
    ebtables 在这里操作以太网帧(如修改 MAC 地址、VLAN 标签)。
    数据包经过 ebtables 处理后,继续传递到网络层。
    tcpdump 可以通过 -e 参数抓取链路层帧头(需在此时抓取副本)。
  2. 网络层(Layer 3):
    iptables 在这里操作 IP 数据包(如修改 IP 地址、端口号、NAT)。
    数据包经过 iptables 处理后,继续传递到传输层和应用层。
    tcpdump 默认抓取网络层及以上的数据(如 IP、TCP/UDP 头和应用层负载)。
  3. tcpdump 的抓包时机:
    链路层抓包:tcpdump -e 会在数据链路层处理后(即 ebtables 操作后)抓取帧头。
    网络层抓包:tcpdump 默认在网络层处理后(即 iptables 操作后)抓取 IP 层数据。

注意:tcpdump 抓取的是数据包的副本,不会影响实际传输的数据包。

按照ISO层级分
在这里插入图片描述

编写内核模块或使用工具(如 iptables &#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值