├── Makefile └── README.md /Makefile: -------------------------------------------------------------------------------- 1 | #obj-m := nf_deaf.o 2 | include $(TOPDIR)/rules.mk 3 | include $(INCLUDE_DIR)/kernel.mk 4 | 5 | PKG_NAME:=nf_deaf 6 | PKG_VERSION:=1.1 7 | PKG_RELEASE:=1 8 | 9 | PKG_SOURCE_PROTO:=git 10 | #PKG_SOURCE_URL:=https://github.com/kob/nf_deaf.git 11 | PKG_SOURCE_URL:=https://github.com/kmb21y66/nf_deaf/ 12 | PKG_SOURCE_DATE:=2025-06-03 # 替换为仓库实际提交日期 13 | PKG_SOURCE_VERSION:=e27078907b26eb21350937d98e9f439a88779f8c # 替换为实际提交的哈希值(例如 `git rev-parse HEAD`) 14 | PKG_MIRROR_HASH:=skip 15 | 16 | include $(INCLUDE_DIR)/package.mk 17 | 18 | define KernelPackage/nf_deaf 19 | SUBMENU:=Netfilter Extensions 20 | TITLE:=nf_deaf kernel module 21 | FILES:=$(PKG_BUILD_DIR)/nf_deaf.ko 22 | AUTOLOAD:=$(call AutoLoad,99,nf_deaf) 23 | DEPENDS:=+kmod-nf-conntrack 24 | endef 25 | 26 | define Build/Prepare 27 | $(call Build/Prepare/Default) 28 | # 可选:应用补丁(若有兼容性问题) 29 | # patch -d $(PKG_BUILD_DIR) -p1 < $(CURDIR)/patches/*.patch 30 | endef 31 | 32 | define Build/Compile 33 | $(MAKE) -C "$(LINUX_DIR)" \ 34 | ARCH="$(LINUX_KARCH)" \ 35 | CROSS_COMPILE="$(TARGET_CROSS)" \ 36 | M="$(PKG_BUILD_DIR)" \ 37 | modules 38 | endef 39 | 40 | $(eval $(call KernelPackage,nf_deaf)) 41 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **一、编译方法 以immortalwrt-mt798x 为例:** 2 | 1. 准备工作 3 | 4 | 1.1 克隆 immortalwrt-mt798x 仓库 5 | git clone https://github.com/hanwckf/immortalwrt-mt798x.git 6 | cd immortalwrt-mt798x 7 | 8 | 1.2 更新 feeds 并安装依赖 9 | 10 | ./scripts/feeds update -a 11 | 12 | ./scripts/feeds install -a 13 | 14 | 1.3 添加 nf_deaf 源码 15 | git clone https://github.com/kob/nf_deaf-openwrt.git package/kernel/nf_deaf 16 | 17 | 2. 配置编译选项 18 | 19 | 2.1 启用 nf_deaf 模块 20 | 运行菜单配置工具: 21 | make menuconfig 22 | 导航到以下路径并启用模块: 23 | Kernel Modules → Netfilter Extensions → <*> kmod-nf-deaf 24 | 25 | 2.2 确认依赖模块已启用 26 | 确保 kmod-nf-conntrack 已启用(路径同上)。 27 | 4. 编译完整固件 28 | make -j$(nproc) V=s 29 | 30 | 5. 仅编译 nf_deaf 模块 31 | make package/kernel/nf_deaf/compile V=s 32 | 编译结果位于bin/targets/<架构>/packages/kmod-nf-deaf_*.ipk 33 | 备注:需要修改伪造请求内容请见https://github.com/kob/nf_deaf 34 | 35 | 36 | **二、使用方法** 37 | 1. 加载内核模块:insmod nf_deaf.ko 38 | 检查是否加载成功: 39 | dmesg | tail # 查看内核日志,确认无错误 40 | lsmod | grep nf_deaf # 确认模块已加载 41 | 2. 配置数据包标记(skb->mark) 42 | 模块通过 skb->mark 的特定位域触发逻辑。需使用 iptables 或 nftables 设置标记。 43 | 示例:标记 TCP 数据包并设置参数 44 | 使用 iptables 设置 mark 值(IPv4) 45 | sudo iptables -t mangle -A POSTROUTING -p tcp -j MARK --set-mark 0xdeaf0000 46 | 位域含义: 47 | 0xdeaf0000 表示: 48 | MARK_MAGIC = 0xdeaf(高16位) 49 | 其他位为默认值(如不修改序列号、无延迟等)。 50 | 自定义参数(按需调整): 51 | 延迟时间:通过 MARK_DELAY(位 9-5)设置,例如 delay=5 → 0xdeaf0000 | (5 << 5) 52 | 重复次数:通过 MARK_REPEAT(位 12-10)设置,例如 repeat=3 → 0xdeaf0000 | (3 << 10) 53 | 破坏校验和:添加 MARK_WR_CHKSUM(位13)→ 0xdeaf0000 | (1 << 13) 54 | 更多组合:根据需求叠加位标志。 55 | 3. 动态修改发送缓冲区(DebugFS) 56 | 模块通过 /sys/kernel/debug/nf_deaf/buf 文件提供缓冲区配置: 57 | 查看当前缓冲区内容 58 | cat /sys/kernel/debug/nf_deaf/buf 59 | 写入自定义内容(例如修改为 "USER testuser\r\n") 60 | echo "USER testuser" | sudo tee /sys/kernel/debug/nf_deaf/buf 61 | 限制:缓冲区最大长度为 256 字节(NF_DEAF_BUF_SIZE)。 62 | 4. 验证功能 63 | 场景:模拟 TCP 数据篡改和延迟 64 | 标记数据包: 65 | sudo iptables -t mangle -A POSTROUTING -p tcp --dport 21 -j MARK --set-mark 0xdeafA020 66 | 0xdeafA020 解析: 67 | MARK_MAGIC = 0xdeaf 68 | MARK_DELAY = 0x14(十进制20 → 延迟20个jiffies,约200ms) 69 | MARK_REPEAT = 0x2(重复2次) 70 | MARK_WR_CHKSUM = 1(破坏校验和) 71 | 发送 FTP 请求: 72 | curl ftp://example.com 73 | 抓包验证: 74 | 使用 tcpdump 或 Wireshark 观察: 75 | 原始包被篡改(序列号、校验和变化)。 76 | 数据包被重复发送。 77 | 延迟生效(时间戳间隔约200ms)。 78 | 5. 卸载模块 79 | sudo rmmod nf_deaf 80 | 清理 iptables 规则: 81 | sudo iptables -t mangle -F 82 | --------------------------------------------------------------------------------