|
前言:
上次调查像PT联盟那样搞一个科学上网联盟,得到大家积极响应,原帖子地址:http://www.hostloc.com/forum.php ... p;extra=#pid2486863
有兴趣的朋友可以加群:280364461 ,提供建议意见,共同讨论。
正题:
修改openssh源代码,添加流量统计并发送到远程功能
版本号: openssh-6.1p1
1:打开channels.h,在channel结构中增加2个字段,如下图:
2: 打开auth.h,找到Authctxt结构,在里面增加2个字段,如下图:
3:打开channels.c,找到channel_handle_rfd函数,如下图:
4:打开channels.c,找到channel_handle_wfd函数,如下图:
5:打开serverloop.c ,找到server_loop2函数,如下图:
第一部分实现:流量超过1KB时发送给远程
第二部分实现:当用户结束连接时把流量纪录发送给远程
6:打开serverloop.c找到server_request_session函数,如下图:
openssh.6.jpg
7:打开serverloopc,加入把流量发送给远程的函数,如下:[ol]/* zazaar */static void submit_traffic_record(char * user,int * in,int * out){ struct addrinfo *ailist,*aip; struct addrinfo hint; struct sockaddr_in addr_in; int sockfd,ret = -1; char buff; int traffic_in = *(in); int traffic_out = *(out); if ((traffic_in == 0) && (traffic_out == 0)){ return; } *(in) -= traffic_in; *(out) -= traffic_out; char *getbuff; asprintf (&getbuff,"GET /traffic_record.php?user=%s&in=%i&out=%i HTTP/1.1\x0D\x0AHost: www.zazaar.com\x0D\x0A\x0D\x0A\x00",user,traffic_in,traffic_out); hint.ai_flags = 0; hint.ai_family =0; hint.ai_socktype = SOCK_STREAM; hint.ai_protocol = 0; hint.ai_addrlen = 0; hint.ai_canonname = NULL; hint.ai_addr = NULL; hint.ai_next = NULL; if (getaddrinfo("www.xxx.com","http",&hint,&ailist) != 0){ debug("getaddrinfo error"); return; } aip = ailist; if ((sockfd = socket(aip->ai_family,SOCK_STREAM,0)) ai_addr,aip->ai_addrlen) == 0){ if (send(sockfd,getbuff,strlen(getbuff),0)){ ret = recv(sockfd,&buff,1,0); } } close(sockfd); free (getbuff); return;}[/ol]复制代码最后编译完成, 你会发现用户登录SSH后,流量(包括tunnel)被纪录,在用户退出或流量超过1KB时,自动发送纪录到远程,发送纪录以GET提交,例如: GET user=root&in=123&out=321
用户名为root,输入流量123byte,输出流量321byte |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|