现在有一个需求,使用netfilter框架,在NF_IP_FORWARD点做钩子。
把钩到的包从指定的物理接口发出去,这个怎么实现?哪个大侠能举个例子,谢谢

1、偿试修改skb_buff->dev,死机
2、偿试修改skb_buff->mac_header,死机

在NF_IP_FORWARD点,已经决定了路由,也就说决定了从哪个物理网口出了。要想实现从指定的物理接口出来,需要重新修改路由。
类似的代码:

skb_dst_drop(skb);
skb_dst_set(skb, &newroute->dst);
NF_HOOK(NFPROTO_IPV4, NF_INET_LOCAL_OUT, skb, NULL, skb_dst(skb)->dev, dst_output);

return NF_STOLEN

不论输入报文处理还是输出报文处理,如果命中,则累积该路由缓存条目的引用计数及全局命中统计,并且把路由缓存条目的核心内容赋给报文skb的_skb_dst字段(skb_dst_set函数),这个核心内容是rtable下的dst_entry,rtable包含了应该匹配的项如源目IP、tos、入接口、策略mark等等匹配信息,dst_entry则包含了对应的出接口、邻居节点(确定邻居是为了确定MAC地址)、下一步的处理函数(如对于输入报文,发给本机为ip_local_deliver,转发为ip_forward)、跃点等结果信息,另外一些重要结果如下一跳IP、路由类型等在rtable中存储

skb_dst_set - struct dst_entry dst 路由子系统使用。相关推荐

  1. struct dst_entry *dst

    /usr/src/linux-2.6.19/include/net/dst.h 最终生成的IP数据报的 路由称为目的入口(dst_entry),目的入口反映了相邻的外部主机在本地主机内部的一种&quo ...

  2. LINUX 路由子系统流程分析

    title: LINUX 路由子系统流程分析 date: 2020-11-28 categories: Linux tags: Linux Routing-Subsystem 上次分析了Linux协议 ...

  3. tcp/ip 协议栈Linux内核源码分析八 路由子系统分析三 路由表

    内核版本:3.4.39 Linux路由子系统代码量虽说不是很多,但是难度还是有的,最近在分析路由子系统这一块,对它的框架有了基本的了解,如果要想掌握的话估计还得再花点时间阅读代码,先把框架记录下来.路 ...

  4. tcp/ip 协议栈Linux内核源码分析七 路由子系统分析二 策略路由

    内核版本:3.4.39 策略路由就是根据配置策略查找路由表,早期的Linux版本是不支持策略路由的,默认的查找策略就是先查找local路由表,找不到再继续查找main表,当支持策略路由功能时,内核最多 ...

  5. tcp/ip 协议栈Linux内核源码分析六 路由子系统分析一路由缓存

    内核版本:3.4.39 收到报文或者发送报文的时候都需要查找路由表,频繁的路由表查找操作时需要耗费一部分CPU的,Linux提供了路由缓存来减少路由表的查询,路由缓存由hash表组织而成,路由缓存的初 ...

  6. 路由子系统——Scope

    Scope Scope类似作用域的概念.路由和IP地址可以指定Scope,用来告诉内核它们在那些情况下是有意义的,是可以被使用的. Scope分为两种:路由的Scope 和 IP地址的Scope 路由 ...

  7. sk_buff结构分析

    前言: 以下是根据<深入理解Linux网络技术内幕>对sk_buff的相关总结,由于是刚刚看这本书(太厚了),不免在前期出现错误,随着对此书的深入我会在修改前面的错误,也希望各位牛人给予指 ...

  8. socket 源码解析之创建

    数据结构 /*** struct socket - general BSD socket* @state: socket state (%SS_CONNECTED, etc)* @flags: soc ...

  9. 利用nf_conntrack机制存储路由,省去每包路由查找

    IP是无连接的,因此IP路由是每包一路由的,数据包通过查找路由表获取路由,这是现代操作协议协议栈IP路由的默认处理方式.但是如果协议栈具有流识别能力,是不是可以基于流来路由呢?答案无疑是肯定的. 设计 ...

最新文章

  1. LeetCode简单题之检查某单词是否等于两单词之和
  2. Apache下实现禁止目录浏览
  3. node.js升级后原来的Ionic项目跑不起来了解决方法
  4. 在Java语言里 ==和equals的区别
  5. [XSY] 计数(DP,NTT,分治)
  6. struct类型重定义 不同的基类型_C++构造数据类型
  7. aws php mysql,AWS快速搭建nginx+php+mysql
  8. 【es】 check-rollover-ready read index [alinas-lcc] is not the wtiter index for alians [index-xx]
  9. async/await处理异步
  10. SQLServer中一个多用户自动生成编号的过程
  11. 如何实现百万TPS?详解JMQ4的存储设计
  12. PHP7.1安装memcaehd扩展
  13. MyBatis中拦截器(Interceptor)实现原理分析
  14. 《数据挖掘导论》学习 | 第十章 异常检测
  15. 计算机办公自动化应用课程,1-《计算机应用基础(办公自动化)》课程标准.doc
  16. 通过修改dat文档对植物大战僵尸关卡数进行修改
  17. 双交换消元:模合数多项式矩阵行列式、新伴随矩阵算法
  18. 为什么说服务逻辑,才是SaaS的底层逻辑
  19. matlab中nnt,Matlab语言的Neural Network Toolbox 及其在同步中
  20. ireport 使用list数据源

热门文章

  1. UE5黑客帝国3d print假室内的一些使用记录
  2. 天道不一定酬勤,深度思考比勤奋更重要
  3. IDEA的下载安装使用教程(含PJ)
  4. ROS示例----TIAGo教程
  5. Intel (Altera) LVDS
  6. Unity3D-VR《静夜诗》2-凝视宝剑和书籍时出现提示文本信息
  7. lol最克制诺手的英雄_LOL:对线很“无解”的5个英雄,其实他们都有克星,诺手只怕它!...
  8. Linux中ssh登录跳过RSA key fingerprint输入yes/no
  9. idea实现注册登录时使用QQ邮箱激活功能
  10. ES6看这一篇就够了