static void del_ip_list(struct proc *proc)
{
struct proc_list *temp=NULL;
struct proc_list *head=proc->head;
printk("in del_ip_list\n");
while(head!=NULL){
temp=head;
head=head->next;
kfree(temp);
printk("del one ip\n");
}
proc->head=NULL;
}
这个置空操作很诡异,弄了我一下午的时间。郁闷!让我机器重启了很多次了

linux 防火墙 简单来说就是利用netfilter的那套框架或者说HOOK/
价值:看到以前的防火墙大多是在2.4版本下的,而2.6.24之后发生大的变化了。
研究思路:
(1)、在Linux内核2.6平台上,首先实现内核模块的编写和加载,学会Netfilter的实现框架,并自己用C语言实现包过滤、数据追踪等功能;
(2)设计一套自己的框架来创建和加载用户规则;接着实现用JA编写的UI(界面)并调用底层的C语言用户库,并实现用户态与内核态双方的即时通讯;
(3)完善系统的整体功能和构架。并尽量做到设计上的优化、操作上的简便和使用上的高效。
方案:
用Java Swing做UI,用Netfilter框架注册自己写的C语言规则,用JNI实现用户空间与系统空间的交互,用模块编程把系统加载到Linux操作系统中。
——————————————————————————————————————————
解决2.6内核模块加载问题
——————————————————————————————————————————
解决端口包过滤,包含目的,源端口
——————————————————————————————————————————
解决IP包过滤问题
unsigned int ---------> __u32;
__u32 --------->__bitwise __be32;
__be32 ---------> saddr;
所以:saddr 实际上是unsigned int类型
输出: printk("Packet from %u\n",iph->saddr);
解决unsigned int * / unsigned char *的比较问题
解决IP地址与unsigned int *转换问题
**
**
——————————————————————————————————————————
解决JNI问题与Linux内核交互问题:
In static block, we are loading a DLL named TestDll.dll which should be placed in <WINDIR>/SYSTEM32 directory. I am not saying you cannot put this DLL in other directories, you can, but then you will have to register that path in JVM. Here you can call another method as well, instead of loadLibrary().
Collapse Copy Code
System.load(“c://winnt//system32//TestDll.dll”);
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-36628-7.html
严厉打击美国的挑衅行为
下—次就没机会了