当前位置:  技术问答>linux和unix

请大家帮帮忙,一个对我很重要的问题

    来源: 互联网  发布时间:2015-08-17

    本文导语:  我最近一直在做一个netfilter的防火墙,下面是代码 firewall.c: #include  #include  #include  #include  #include  #include  #include  #include  #if LINUX_VERSION_CODE>=KERNEL_VERSION(2,4,9) MODULE_LICENSE("GPL"); MODULE_AUTHOR("XXX@hotmail.com"); #endif st...

我最近一直在做一个netfilter的防火墙,下面是代码

firewall.c:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#if LINUX_VERSION_CODE>=KERNEL_VERSION(2,4,9)

MODULE_LICENSE("GPL");

MODULE_AUTHOR("XXX@hotmail.com");

#endif

static int in_use=0;
static int major=0;

static unsigned int deny_ip[1000]; /* 被拒绝的IP列表 */
static unsigned int deny_port[1000]; /* 被拒绝的port列表 */
unsigned int current_deny_ip=0; /* 当前有多少个被拒绝的IP列表 */
unsigned int current_deny_port=0; /* 当前有多少个被拒绝的port列表 */

static int add_ip(unsigned int ip); /* 增加一个IP到列表 */ 
static int release_ip(unsigned int ip); /* 取消列表中的一个IP */
static void list_current_deny_ip(); /* 打印当前被拒绝的IP列表 */
static int check_ip(struct sk_buff* sb);  /* 检查IP的函数 */

static int add_port(unsigned int port); /* 增加一个port到列表 */
static int release_port(unsigned int port); /* 取消列表中的一个port */
static void list_current_deny_port(); /* 打印当前被拒绝的port列表 */
static int check_port(struct sk_buff* sb); /* 检查port的函数 */

static int fw_ioctl(struct inode*,struct file* file, /* 给fw_fops调用的函数 */
unsigned int cmd,unsigned long arg);
static int fw_open(struct inode* inode,struct file* file); /* 设备开启时调用的函数 */
static int fw_release(struct inode* inode,struct file* file); /* 设备关闭时调用的函数 */

unsigned int hook_func(unsigned int hooknum, /* hook_func,核心函数 */
struct sk_buff** skb,
const struct net_device* in,
const struct net_device* out,
int(*okfn)(struct sk_buff*));

/* 用于注册我们的函数的数据结构 */
static struct nf_hook_ops nfho;

/* 设备驱动接口 file_operations */
struct file_operations fw_fops={
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
fw_ioctl,
NULL,
fw_open,
NULL,
fw_release,
NULL
};

/* 增加一个IP到列表 */
static int add_ip(unsigned int ip)
{
int i;
for (i=0;i>16,
(deny_ip[i]&0xFF000000)>>24);
}
}

/* 检查IP的函数 */
static int check_ip(struct sk_buff* sb)
{
if(!sb) return NF_ACCEPT;
if(!(sb->nh.iph)) return NF_ACCEPT;

int i=0;
for (i=0;inh.iph->saddr==deny_ip[i])
{
return NF_DROP;
}
}
return NF_ACCEPT;
}

static int fw_open(struct inode* inode,struct file* file)
{
printk("openn");
if (in_use)
{
return -EBUSY;
}
else
{
MOD_INC_USE_COUNT;
++in_use;
return 0;
}
return 0;
}

static int fw_release(struct inode* inode,struct file* file)
{
printk("release!n");
in_use^=in_use;
MOD_DEC_USE_COUNT;
return 0;
}

static int fw_ioctl(struct inode* inode,struct file* file,
unsigned int cmd,unsigned long arg)
{
int ret=0;
printk("ioctln");

switch(cmd)
{
case 1:
{
add_ip((unsigned int)arg);
break;
}
case 2:
{
release_ip((unsigned int)arg);
break;
}
default:
ret=-EBADRQC;
}
return ret;
}

/* 注册的hook函数的实现 */
unsigned int hook_func(unsigned int hooknum,
struct sk_buff** skb,
const struct net_device* in,
const struct net_device* out,
int(*okfn)(struct sk_buff*))
{
struct sk_buff* sb=*skb;

/* check ip */
if (check_ip(sb)==NF_DROP)
{
return NF_DROP;
}
else
{
return NF_ACCEPT;
}
}

int init_module()
{
SET_MODULE_OWNER(&fw_fops);
if ((major=register_chrdev(241,"Firewall",&fw_fops))

    
 
 

您可能感兴趣的文章:

  • 帮帮忙!SCO OpenServer 5.0.5 的root用户口令丢了,怎么找回来啊,帮帮忙!!!!!!
  • 谁知teleport pto v1.29.1590的注册码,帮帮忙。马上结分
  • 各位大哥帮帮忙。谁知道怎么加可用分?
  • 该死的中文显示问题,帮帮忙
  • 如何获得string中某特定第二个字符,请帮帮忙!
  • 关于聊天室的问题,请大家帮帮忙,一定给分
  • 帮帮忙!!!!我的RH8装不进去!!!
  • 急!大家帮帮忙!有哪些视频点播系统能在在LINUX下安装以及怎样安装!
  • 急!大家帮帮忙!有什么视频点播系统能在LINUX下安装,以及怎样安装!!
  • 大家帮帮忙!!急!!怎样安装.bin的文件!!!
  • 帮帮忙!关于红帽子9的!(在线等)
  • 新手上路,大家帮帮忙
  • QTextBrowser的拖影问题,各位大虾,帮帮忙
  • 各位高手帮帮忙,急啊!
  • 大家帮帮忙!急啊
  • U盘的LINUX系统问题,大虾们帮帮忙。
  • Web服务器/前端 iis7站长之家
  • 跪求啊,我的邮箱密码忘记了,那位大侠帮帮忙啊
  • 大家帮帮忙----linux下的编程到底要学哪些东西?
  • 限制ssh登录,放开sftp登录,怎么办?跪求高手帮帮忙!
  • 在servlet中有一个关于单引号输出的问题,请大家帮忙,帮忙,帮帮忙!!
  • Jcreator下光标不能对齐的问题﹐问题太多﹐分有限﹐所以只能给这幺多了。帮帮忙﹗﹗﹗
  • 没人帮忙吗?我想用JAVA编一个像WINDOW中的画图软件,现在出现了如下问题,请各位老哥老姐帮帮忙
  • 操作系统方面的一些问题。请大家帮帮忙!!!
  • 安装Redhat8.0出现问题,请高手帮帮忙,谢谢!
  • 一个linux shell编程求素数问题 高手帮帮忙啊
  • 在线等待,java字符集的问题.急,请大家帮帮忙?
  • 50分,帮帮忙啊,技术问题
  • 关于Oracle 9.2的安装问题,请各位大侠能够帮帮忙!
  • 奇怪的问题,请大家帮帮忙!
  • 请大家帮帮忙吧!我是新手请教个问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 为什么在笔记本电脑上无法运行reahat?各位大哥帮帮忙
  • 郁闷死了555555555555,大哥哥,大姐姐们帮帮忙哦
  • 救命,系统无法连通网络,大家帮帮忙
  • 兄弟们,请帮帮忙吧,关于LINUX 的调度和时钟中断处理代码的分析!在线等待啊。。。:(
  • 各位帮帮忙啊,多谢了
  • 谁可以帮帮忙
  • 帮帮忙!
  • 请大家帮帮忙推荐几本书
  • 我想装redhat7.2,帮帮忙!
  • 大家好!我最近一个浏览器的原代码不知道怎么编译运行。。请帮帮忙?
  • 一定高分给去!高手请来帮帮忙。
  • 我就想要下载个简单的UNIX操作系统,做学习用.各位朋友,帮帮忙吗..
  • 三星的p28装red hat9。0,网卡认不出,有哪位知道的帮帮忙
  • 大虾们,帮帮忙!
  • 容易的很,请大家顺便帮帮忙(春节快乐)
  • 用visualage for Java 哥们来帮帮忙!~
  • 请大家帮帮忙,急啊!
  • 基本概念,谁能帮帮忙?
  • Simon_net(自由人)帮帮忙,30分送到
  • 急死我了!怎样才能建一个自己的子论坛?快帮帮忙吧!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3