前提条件:能够自己写出截取网络数据的程序。并对截到的包进行处理。比如抓到以下的数据包:
0000  0E 00 EE 02 02 00 00 00 04 00 00 00 08 00 00 00
0010  00 00 00 00 02 00 00 00 18 00 00 00 01 00 00 00    然后把包中的 08 00 00 00       02 00 00 00     18 00 00 00
筛选出来。用一个字符代替。然后存到一个数据库中。具体详情请与我联系详谈有能力的高手请加我QQ:25091 或者给我email:[email protected]

解决方案 »

  1.   

    #pragma once
    #include "pcapinc.h"
    #include "enumnetdevice.h"//这个是read_packet后的返回值。
    #define READ_SUCC 1
    #define READ_TIMEOUT 0
    #define READ_ERROR -1
    #define READ_EOF -2
    class CCap
    {
    public:
    CCap(void);
    ~CCap(void);
    //这个方法要在那些私有数据成员赋值后调用
    bool OpenLive();
    void Close()
    {
    pcap_close(m_handle);
    }
    //这个方法要在上一个方法调用后调用。
    bool SetFilter(char *filter); //这是两个主要的方法,提倡用第二个而不是第一个。
    void Loop(pfn_cap_handle func,int readpackets=0);
    int Read_Packet(t_packet_header **pkt_header,u_char **pkt_data);
    public:
    //这个方法是为SetFilter服务的,可以不用的。
    void SetNetaddress(CEnumNetDevice &devices,int num){m_paddr=devices.GetAddress(num);} void SetSnaplen(int len){m_snaplen=len;}
    void SetTimeout(int timeout){m_readtimeout=timeout;}
    void SetPromiscuous(bool pro=true){m_promiscuous=(pro==true)? 1:0;}
    void SetNetdevice(const char *name){m_name=name;}
    void SetNetdevice(CEnumNetDevice &devices,int num)
    {
    SetNetaddress(devices,num);
    m_name=devices.GetName(num);
    }
    private:
    t_cap_handle m_handle;
    const t_net_address* m_paddr;
    private:
    int m_snaplen;
    int m_promiscuous;
    int m_readtimeout;
    const char *m_name;
    };
    #include "cap.h"CCap::CCap(void)
    {
    m_name=NULL;
    m_snaplen=65536;
    m_promiscuous=1;
    m_readtimeout=2000; m_paddr=NULL;
    m_handle=NULL;
    }CCap::~CCap(void)
    {
    }
    bool CCap::OpenLive()
    {
    m_handle=pcap_open_live(m_name,m_snaplen,m_promiscuous,m_readtimeout,errbuf);
    if(NULL==m_handle)
    return false;
    return true;
    }bool CCap::SetFilter(char *filter)
    {
    u_int netmask;
    struct bpf_program fcode;
    if(m_paddr != NULL)
    netmask=((struct sockaddr_in *)(m_paddr->netmask))->sin_addr.S_un.S_addr;
    else
    netmask=0xffffff; 
    if(pcap_compile(m_handle, &fcode, filter, 1, netmask)<0)
    return false;
    if(pcap_setfilter(m_handle, &fcode)<0)
    return false;
    return true;
    }void CCap::Loop(pfn_cap_handle func,int readpackets)
    {
    pcap_loop(m_handle,readpackets,func,NULL);
    }int CCap::Read_Packet(t_packet_header **pkt_header,u_char **pkt_data)
    {
    return pcap_next_ex(m_handle,pkt_header,pkt_data);
    }
      

  2.   

    人家好像是要截获
    不是要sniff吧
      

  3.   

    LanHaoTian(蓝浩天) 同志:
    不要乱给别人钱,这个问题不难,原理和上面讲差不多,不过如果你不知对方的端口,这时你要用端口分析工具得知端口信息。
      

  4.   

    lcs1980(lcs)同志:
    这么说来你可以写出这样的程序??不知可有空。请与我联系。或者留下你的QQ:
      

  5.   

    sevencat(七猫)lcs1980(lcs)两位同志:
    不要断了大家的财路,谢谢!!LanHaoTian(蓝浩天)同志:
    可以对项目进行招标合作。
      

  6.   

    我的联系方式:[email protected]
    我做过分析端口的程序,并且是采用线程的,
    至于别的我最近比较忙,
    不好意思。