Linux下的网络HOOK实现

Linux下的网络HOOK实现,第1张

 

最近疯狂的研究Linux的种种功能,也颇有心得,这里讲述一下Linux下的Net的Hook,使用net的Hook可以实现很多很多非常底层的功能,比如过滤报文,做防火墙,做代理等等。

  Now,Let's Go!

  使用的是Linux 2.6.19.1的内核代码。

  首先是 在./Source/net/netfilter/core.c文件中的函数 nf_register_hook

  staTIc DEFINE_SPINLOCK(nf_hook_lock);

  int nf_register_hook(struct nf_hook_ops *reg)

  {

  struct list_head *i;

  spin_lock_bh(&nf_hook_lock);

  list_for_each(i, &nf_hooks[reg->pf][reg->hooknum]) {

  if (reg->priority < ((struct nf_hook_ops *)i)->priority)

  break;

  }

  list_add_rcu(?->list, i->prev);

  spin_unlock_bh(&nf_hook_lock);

  synchronize_net();

  return 0;

  }

  EXPORT_SYMBOL(nf_register_hook);

  void nf_unregister_hook(struct nf_hook_ops *reg)

  {

  spin_lock_bh(&nf_hook_lock);

  list_del_rcu(?->list);

  spin_unlock_bh(&nf_hook_lock);

  synchronize_net();

  }

  EXPORT_SYMBOL(nf_unregister_hook);

  int nf_register_hooks(struct nf_hook_ops *reg, unsigned int n)

  {

  unsigned int i;

  int err = 0;

  for (i = 0; i < n; i++) {

  err = nf_register_hook(?[i]);

  if (err)

  goto err;

  }

  return err;

  err:

  if (i > 0)

  nf_unregister_hooks(reg, i);

  return err;

  }

  EXPORT_SYMBOL(nf_register_hooks);


  void nf_unregister_hooks(struct nf_hook_ops *reg, unsigned int n)

  {

  unsigned int i;

  for (i = 0; i < n; i++)

  nf_unregister_hook(?[i]);

  }

  EXPORT_SYMBOL(nf_unregister_hooks);

  

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2713210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存