找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 96|回复: 17

[原创]修改openssh源代码,添加流量统计并发送到远程功能

[复制链接]

37

主题

375

回帖

899

积分

高级会员

积分
899
发表于 2012-12-21 14:43:19 | 显示全部楼层 |阅读模式
前言:
上次调查像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
  • 本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    回复

    使用道具 举报

    201

    主题

    4580

    回帖

    9795

    积分

    论坛元老

    积分
    9795
    发表于 2012-12-21 14:45:42 | 显示全部楼层
    不错啊,技术贴,支持
    回复

    使用道具 举报

    113

    主题

    1万

    回帖

    2万

    积分

    论坛元老

    积分
    20929
    发表于 2012-12-21 14:46:38 | 显示全部楼层
    可以加入问候校长的功能
    回复

    使用道具 举报

    52

    主题

    510

    回帖

    1212

    积分

    金牌会员

    积分
    1212
    发表于 2012-12-21 14:48:18 | 显示全部楼层


    不错。最好在出一个统计页面,与自动关闭帐号功能。
    回复

    使用道具 举报

    13

    主题

    1547

    回帖

    3167

    积分

    论坛元老

    积分
    3167
    发表于 2012-12-21 14:49:45 | 显示全部楼层
    支持。
    回复

    使用道具 举报

    501

    主题

    9652

    回帖

    2万

    积分

    论坛元老

    积分
    20843
    发表于 2012-12-21 15:10:49 | 显示全部楼层
    http://blog.csdn.net/hannibal_why


    回复

    使用道具 举报

    37

    主题

    169

    回帖

    493

    积分

    中级会员

    积分
    493
    发表于 2012-12-21 15:17:02 | 显示全部楼层
    mark
    回复

    使用道具 举报

    501

    主题

    9652

    回帖

    2万

    积分

    论坛元老

    积分
    20843
    发表于 2012-12-21 15:21:48 | 显示全部楼层
    最好再加个连接超过1小时时发送给远程,

    回复

    使用道具 举报

    4

    主题

    141

    回帖

    310

    积分

    中级会员

    积分
    310
    发表于 2012-12-21 15:21:57 | 显示全部楼层
    LZ原创?
    回复

    使用道具 举报

    0

    主题

    1

    回帖

    4

    积分

    新手上路

    积分
    4
    发表于 2012-12-21 15:22:41 | 显示全部楼层
    支持一下Mark....
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|Discuz! X

    GMT+8, 2025-1-11 17:54 , Processed in 0.028254 second(s), 3 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表