kernel
cpusoft
技术追求卓越,创新成就未来
展开
-
Socket Kernel Source Chapter02 sys_socketcall
2 套接字接口函数sys_socketcall sys_socketcall()位于/net/socket.c中,当我们调用socket()、bind()、write()等所有与套接字有关的函数,都是调用的内核的一个系统调用:sys_socketcall,然后再有这个函数通过switch判断类型,进行进一步处理,相当于一个封装函数。 它此函数并不是上述函数直接调用,而是会由系统原创 2009-02-01 22:39:00 · 1277 阅读 · 0 评论 -
Socket_Kernel_Module 03
2.2 修改IPHeader包IP层的最后一个发送函数是ip_output.c中的ip_finish_output(8.11) , 可以在此添加hook函数,这里是修改TOS字段,Type of Services,是表示优先级的,由于现在大部分路由器忽略此字段,因此修改TOS不会对现有网络造成影响 2.2.1修改 ip_output.cint (*myHook_IPTOS)(s原创 2009-02-01 22:53:00 · 520 阅读 · 0 评论 -
Socket Kernel Source Chapter06 connect
6 connect客户端调用connect,对应到sys_socketcall中会调用sys_connect6.1 sys_connectasmlinkage long sys_connect(int fd, struct sockaddr __user *uservaddr, int addrlen){ struct原创 2009-02-01 22:47:00 · 850 阅读 · 0 评论 -
Socket Kernel Source Chapter05 listen
5 listen对应到sys_socketcall中调用sys_listen(), 5.1 sys_listenasmlinkage long sys_listen(int fd, int backlog){ struct socket *sock; int err, fput_needed; int somaxconn; //fd通过s原创 2009-02-01 22:45:00 · 662 阅读 · 0 评论 -
Socket Kernel Source Chapter03 socket
3 socket() 3.1 sys_socket 包括三个主要函数,sock_create()负责创建socket分配内存并初始化, sock_map_fd()负责分配struct file*, sock_release()负责释放内存。 进入sys_socket后,调用sock_create,传入family和type,就是前面的a0,a1,调用socket_create创原创 2009-02-01 22:41:00 · 1390 阅读 · 0 评论 -
Socket_Kernel_Module 08
4.3 Netfilter总体结构4.3.1 介绍Netfilter是嵌入内核IP协议栈的一系列调用入口,设置在报文处理的路径上。网络报文按照来源和去向,可以分为三类:流入的、流经的和流出的,其中流入和流经的报文需要经过路由才能区分,而流经和流出的报文则需要经过投递,此外,流经的报文还有一个FORWARD的过程,即从一个NIC转到另一个NIC。Netfilter就是根据网络报文的流向,在以原创 2009-02-01 22:59:00 · 437 阅读 · 0 评论 -
Socket_Kernel_Module 02
2 实现自己Module自己Module就是说,自己在源代码中添加hook函数接口,编译后就相当于在内核开了个后门;然后通过Module实现函数的具体功能,插入到内核中,即使具体功能有变化,只要接口不便,就无需再编译源代码,而且可以卸载Module。当然,也可以直接修改源代码添加功能,不过这需要添加一次就修改编译源代码一次,操作上不实际。 这部分,需要参考"Kernel_TCPIP"作原创 2009-02-01 22:50:00 · 501 阅读 · 0 评论 -
Socket Kernel Source Chapter04 bind
4 bind()对应到sys_socketcall中调用sys_bind() 4.1 sys_bind() asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen){ struct socket *sock; char address[MAX_SOC原创 2009-02-01 22:44:00 · 1016 阅读 · 0 评论 -
Socket Kernel Source Chapter01 Introducation
Socket Kernel Source Chapter01 Introducation 0 序言 我们一般都已经熟悉了简单的网络程序的编写,几个普通的网络函数就能实现和服务器、客户端,并完成数据传输。但这些看似简单的网络函数下面,其实隐藏着复杂的业务处理流程,这些过程都是Linux内核实现的。本文的目的就是介绍在Linux下,内核中的网络套接字到底是如何建立网络链接的、如何传输原创 2009-02-01 22:36:00 · 614 阅读 · 0 评论 -
Socket_Kernel_Module 09
4.4简单示例:以下提供的是一个示例代码,该示例代码简单的注册了一个丢弃所有到达的数据包的函数。该代码同时展示了Netfilter的返回值如何被解析。/** 安装一个丢弃所有到达的数据包的Netfilter hook函数的示例代码*/#define __KERNEL__#define MODULE#include ;#include ;#include ;#include ;/原创 2009-02-01 23:00:00 · 615 阅读 · 0 评论 -
Socket Kernel Module 01
Socket Kernel Module 0 序言 本文主要介绍Linux下,对网络部分的内核如何安装卸载Module,从而在内核级别获取、拦截、修改网络传输数据。本文分为4部分,第一部分为"环境搭建";第二部分为"实现自己Module";第三部分"利用proc实现内核和应用层交互",第四部分"利用系统提供Module: Netfilter"。采用的Linux版本为2.6,"So原创 2009-02-01 22:49:00 · 560 阅读 · 0 评论 -
Socket_Kernel_Module 07
4 利用系统提供Module: Netfilter4.1 Netfilter简介参考 http://www.ibm.com/developerworks/cn/linux/l-ntflt/index.htmlNetfilter是从2.4内核引入的,与Linux中的TCP/IP协议族紧密结合,提供了对网络功能的扩展功能。下面分别从报文发送和报文接收两个流程介绍Netfilter,Netf原创 2009-02-01 22:58:00 · 497 阅读 · 0 评论 -
Socket_Kernel_Module 06
3 利用proc实现内核和应用层交互Linux中Proc被称为虚拟文件系统,位于/proc中,其实就是内存的内容。可以利用Proc实现内核和应用程序的数据交互。对内核,要使用特殊的函数创建、删除proc文件, 参考下面代码: 3.1内核myProc_test.c代码 #include #include #include #include #include #include原创 2009-02-01 22:56:00 · 574 阅读 · 0 评论 -
Socket_Kernel_Module 05
2.4 随机丢弃IP包 在内核中发送包的最后一个函数/net/core/dev.c的dev_queue_xmit()中(就是2.1简单实例的hook过的函数),可以设定按照一定几率随机丢弃包, 当丢包后,需要kfree_skb(skb)释放包,并且停止进一步下传,即可2.4.1 修改dev_queue_xmit添加int (*myHook_IPDrop)(struct sk_buf原创 2009-02-01 22:55:00 · 472 阅读 · 0 评论