想法:
在一个网络的公共出口处,
我想用wincap来开发一个程序来开发网络监控程序,
这个程序能监控用户上网情况,主要是监控WEB/MAIL原理:
在出口处捕捉所有用户的原始数据报,然后放入数据库,
然后在后台分析数据库,恢复用户浏览的网页,发送/接受的邮件难点:
捕捉原是数据报时排除干扰信息,
在后台正确的恢复信息附加:
多谢各位朋友能支持一把,来者有分,
顺便提提意见,好的想法,以及注意点,
感激不尽!!!!!!!!!!!!!

解决方案 »

  1.   

    很好的想法,而且实现容易.hahaha不过在你做完之后,你会知道自己错了.难点: 庞大的数据量建议: 如果一定要存到数据库里, 一定要先把数据分析后再保存.否则在一个有100个用户的公司里运行你的软件的话,用不了几天,就会byebye了.这里的100个用户指的是像我们这样总是在上网,每天都要发mail的人.
      

  2.   

    first ,use winpcap sniffer all ip packet data,then analyse http protocal and pop3 protocal ,also you can filter data by port. you can consult a software.
    www.softxp.net
      

  3.   

    解决数据量非常庞大的方法:
    1。在保存原始数据前进行预处理,去掉一些无用的信息,譬如根据端口
    2。后台在恢复数据的时候, 当恢复成功之后, 就记录web/mail信息,
       同时把这些原始数据都删除。
      

  4.   

    to kingzai(studying C#): mail状态,应该监控smtp端口
      

  5.   

    to purfan: 为什么不分析完成后再保存呢?
    分析的效率应该不会太低,但然主要还看你的程序."恢复数据"不知是什么?
    你是不是把预处理后的数据保存到磁盘,我认为最好尽量避免磁盘IO,相对来说那是一件低效的工作.
      

  6.   

    sniffer pivotal information,such as name and password.just i copy some code from xfilter 1.0
    int CProtocolInfo::GetSmtp(SESSION *session, TCHAR *pBuf, int nBufLenth)
    {
    static CString sEmail = _T(""); if(_tcsnicmp(pBuf, _T("MAIL FROM: "), 11) == 0)
    sEmail.Format(_T("%s"), pBuf);
    else if(_tcsnicmp(pBuf, _T("RCPT TO: "), 9) == 0)
    {
    sEmail += pBuf;
    sEmail.Replace(13, ';');
    sEmail.Replace(10, ' ');
    if(sEmail.GetLength() >= MAX_PATH - 1)
    sEmail.SetAt(MAX_PATH - 1, '\0'); _tcscpy(session->sMemo, sEmail);
    } return XERR_SUCCESS;
    }
      

  7.   

    to  guonix:
    考虑到实时采集到的数据量非常大,而且有些数据要保存比较长的时间,譬如一个网页打开的
    时间非常长,所以我想先把有用的原始数据保存到DB, 再开启一个进程检查DB, 如果有一个
    连接已经中断, 就恢复出用户浏览的网页/邮件,  然后删除这些已经恢复出的网页的原始数
    据。 
    正如你所说道, 如果有好的算法, 我觉得在内存直接分析并恢复是最好不过了:)
      

  8.   

    to kingzai(studying C#) :
    can you mail me a copy of xfilter 1.0 source code?
    i think you will help me!
    3x.
      

  9.   

    ok ,i post it to you ,please check it.