不清楚的问题:
1)
SOCKET m_s;
m_s = socket( AF_INET , SOCK_RAW , IPPROTO_IP ) ;
初始化m_s时,将第二个参数设成SOCK_RAW ,便可以将套接字绑定到网卡上是吗?
然后用recv函数接收到的数据便是IP包对吗?
2)
这是VCKBASE里的一个例子,不清楚下面的结构的由来
typedef struct _IPHEADER {
        unsigned char  header_len:4;
        unsigned char  version:4;   
        unsigned char  tos;            // type of service
        unsigned short total_len;      // length of the packet
        unsigned short ident;          // unique identifier
        unsigned short flags;          
        unsigned char  ttl;            
        unsigned char  proto;          // protocol ( IP , TCP, UDP etc)
        unsigned short checksum;       
        unsigned int   sourceIP;
        unsigned int   destIP;}IPHEADER;struct TCPPacketHead {
WORD SourPort;
WORD DestPort;
DWORD SeqNo;
DWORD AckNo;
BYTE HLen;
BYTE Flag;
WORD WndSize;
WORD ChkSum;
WORD UrgPtr;
};

解决方案 »

  1.   

    wltsui(前途未必光明,道路一定曲折!)
    tcp/ip协议中有IP头,TCP头,UDP头等,我的意思是以上的结构在库中有没有定义
      

  2.   

    typedef struct ip_hdr //定义IP首部 

    unsigned char h_verlen; //4位首部长度,4位IP版本号 
    unsigned char tos; //8位服务类型TOS 
    unsigned short total_len; //16位总长度(字节) 
    unsigned short ident; //16位标识 
    unsigned short frag_and_flags; //3位标志位 
    unsigned char ttl; //8位生存时间 TTL 
    unsigned char proto; //8位协议 (TCP, UDP 或其他) 
    unsigned short checksum; //16位IP首部校验和 
    unsigned int sourceIP; //32位源IP地址 
    unsigned int destIP; //32位目的IP地址 
    }IPHEADER;
      

  3.   

    typedef struct tcp_hdr //定义TCP首部 

    USHORT th_sport; //16位源端口 
    USHORT th_dport; //16位目的端口 
    unsigned int th_seq; //32位序列号 
    unsigned int th_ack; //32位确认号 
    unsigned char th_lenres; //4位首部长度/6位保留字 
    unsigned char th_flag; //6位标志位 
    USHORT th_win; //16位窗口大小 
    USHORT th_sum; //16位校验和 
    USHORT th_urp; //16位紧急数据偏移量 
    }TCPHEADER;
      

  4.   

    你没有明白我的意思,我是想问这些头结构是由自己声明定义,还是由系统中的库已经定义完了,但是我在VC7中的PlatformSDK和VC6中的库中都没有这些头的声明。
      

  5.   

    danfeng(丹枫):
             请详谈。
    另外还有问题,我如果要拷贝一个文本文件到LAN中的某一台机器中,那截取的包数据,是否是文本文件的内容?我已经实现了用RAW SOCKET截取网卡数据包的功能没,但是有些地方弄不明白,我发现截取的数据并不是所传的数据,都是乱码,怎么会事?多谢帮助
      

  6.   

    推荐你看看这个帖子,有详细的讨论:http://expert.csdn.net/Expert/topic/2333/2333459.xml?temp=.3471796
      

  7.   

    wltsui:
    你说的意思是,即使我传一个文本文件到LAN中的某台机器,也截取不到该文本文件的内容是吗?
      

  8.   

    wltsui:
    tcp头中还有一个数据字段,但是在声明TCP头结构时,并没有该成员。
      

  9.   

    你截获的数据除去ip头部和tcp头部(或者udp)就是你要截获的具体数据
      

  10.   

    原始套接字此时捕获到的数据包并不仅仅是单纯的数据信息,而是包含有 IP头、 TCP头等信息头的最原始的数据信息,这些信息保留了它在网络传输时的原貌。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。下面先给出结构.数据包的总体结构:数据包 
    IP头 TCP头(或其他信息头) 数据   数据在从应用层到达传输层时,将添加TCP数据段头,或是UDP数据段头。
      

  11.   

    wltsui:
           我有个想法,我们公司现在上网是ADSL,一台是代理服务器,代理服务器软件可以监视每台机器的上网记录,我想将网卡IP包截取,然后修改,这样代理服务器软件无法记录本台机器的上网记录,可以吗?
           详谈.等待。
      

  12.   

    要经过代理服务器上网
    wltsui:我要下线了,明天在向你请教。
      

  13.   

    wltsui:你的意思是不是我的机器要经过代理服务器上网的话,便不能实现我所想的功能