用raw socket截获数据包后从ip包中得到数据段 
这个数据段是什么形式的? 是不是标准的以null字符结尾的char字符? 如果不是以null结尾的 那就不能用strlen ,strcpy.....字符串操作函数 那该怎么处理呢?

解决方案 »

  1.   

    typedef struct _IP 
    {
        union 
        {
            BYTE   Version;
            BYTE   HdrLen;
        };
        BYTE ServiceType;
        WORD TotalLen;
        WORD ID;
        union 
        {
            WORD   Flags;
            WORD   FragOff;
        };
        BYTE TimeToLive;
        BYTE Protocol;
        WORD HdrChksum;
        DWORD   SrcAddr;
        DWORD   DstAddr;
        } IP;
    typedef struct _TCP
        {
        WORD SrcPort;
        WORD DstPort;
        DWORD SeqNum;
        DWORD AckNum;
        BYTE DataOff;
        BYTE Flags;
        WORD Window;
        WORD Chksum;
        WORD UrgPtr;
        }  TCP;IP iphead  = *(IP*)RecvBuf;
    TCP tcphead = *(TCP*)(RecvBuf + (iphead.HdrLen ));
      

  2.   

    请看清楚我的问题 多谢!
    我说的不是ip tcp头的结构......
      

  3.   

    我是说ip数据包中除了ip tcp头后的数据的结构。
      

  4.   

    包不以NULL为结束,
    memcpy把数据拷贝出来不就行了么?又或者直接处理又有什么问题?不一定要NULL结束啊
      

  5.   

    发送的data又不一定是字符串,和NULL结束没有什么直接的关系。
      

  6.   

    如果想要将数据copy出来 这样:
    void *_memccpy( void *dest, const void *src, int c, unsigned int count );其中 unsigned int count:数据长度如何确定??? 
      

  7.   

    IP数据包头里面有个标志,是标志包的大小的啊,htons(pIpHeader->tlen)这个就是包头大小