免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2256 | 回复: 6
打印 上一主题 下一主题

[FreeBSD] 如何通过kld替换掉内核中的ip_input函数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-28 22:51 |只看该作者 |倒序浏览
看了你的icmphook文章后,想把 ip_input 涵数替换掉.但是不知道怎么下手.
是不是涵数指针才能被替换a ???

[ 本帖最后由 雨丝风片 于 2006-6-29 09:25 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-06-29 09:23 |只看该作者
原帖由 Aqie 于 2006-6-28 22:51 发表
看了你的icmphook文章后,想把 ip_input 涵数替换掉.但是不知道怎么下手.
是不是涵数指针才能被替换a ???


你看看从这里能不能找到线索。
_____________________________________________________________________FreeBSD6.0
/*
* IP initialization: fill in IP protocol switch table.
* All protocols not implemented in kernel go to raw IP protocol handler.
*/
void
ip_init()
{
    ....
    netisr_register(NETISR_IP, ip_input, &ipintrq, NETISR_MPSAFE);
}
________________________________________________/usr/src/sys/netinet/ip_input.c

论坛徽章:
0
3 [报告]
发表于 2006-06-29 09:28 |只看该作者
另,帮你修改了一下标题,你那样写别人就算知道也不会告诉你了。
以后有问题不要直接找哪个人,一个人的力量肯定是有限的,大家一起讨论才能取长补短。

论坛徽章:
0
4 [报告]
发表于 2006-06-29 10:33 |只看该作者
Replace the netisrs[NETISR_IP].ni_handler with your handler

[ 本帖最后由 antijp 于 2006-6-29 10:59 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-06-30 20:10 |只看该作者
非常非常感谢 雨丝风片 && antijp  

问题是解决了.但是我的目的没达到.在这个地方抓不到bridge的包. 还得努力...

论坛徽章:
0
6 [报告]
发表于 2006-06-30 21:02 |只看该作者
原帖由 Aqie 于 2006-6-30 20:10 发表
非常非常感谢 雨丝风片 && antijp  

问题是解决了.但是我的目的没达到.在这个地方抓不到bridge的包. 还得努力...


bridge怎么会走到ip的输入流程那儿去呢?
你继续在下面这个函数里找找线索吧!
/usr/src/sys/net/if_ethersubr.c

  1. /*
  2. * Process a received Ethernet packet; the packet is in the
  3. * mbuf chain m with the ethernet header at the front.
  4. */
  5. static void
  6. ether_input(struct ifnet *ifp, struct mbuf *m)
  7. {
  8.         ......
  9.         /*
  10.          * Tap the packet off here for a bridge.  bridge_input()
  11.          * will return NULL if it has consumed the packet, otherwise
  12.          * it gets processed as normal.  Note that bridge_input()
  13.          * will always return the original packet if we need to
  14.          * process it locally.
  15.          */
  16.         if (ifp->if_bridge) {
  17.                 BRIDGE_INPUT(ifp, m);
  18.                 if (m == NULL)
  19.                         return;
  20.         }

  21.         /* Check for bridging mode */
  22.         if (BDG_ACTIVE(ifp) )
  23.                 if ((m = bridge_in_ptr(ifp, m)) == NULL)
  24.                         return;
  25. }
复制代码

[ 本帖最后由 雨丝风片 于 2006-6-30 21:10 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2006-07-02 23:13 |只看该作者
哈哈.原来是这样
在次感谢 雨丝风片 && antijp
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP