HTTP协议分析,求指导!chunked + gzip 如何解析?帮上小弟我呀
HTTP协议分析,求指导!!!chunked + gzip 怎么解析?!!帮下我呀
兄弟们指导下我吧,我在分析HTTP协议,但是当收到传输编码为chunked,内容编码为gzip时,就没法解析数据包的内容,采用下面的代码解析时,采用GDB调试,发现数据并没有完全的传入子函数中,怎么办呀,愁死了
GDB调试情况:
------解决方案--------------------
兄弟们指导下我吧,我在分析HTTP协议,但是当收到传输编码为chunked,内容编码为gzip时,就没法解析数据包的内容,采用下面的代码解析时,采用GDB调试,发现数据并没有完全的传入子函数中,怎么办呀,愁死了
- C/C++ code
/* pSrc: 原 chunked 数据包 nSize: 数据包大小 pDes: 解析完成后的数据 */ int DecodeChunked(const char* pSrc,int nSize, char** pDes) { int nRetSize = 0, nLeftSize = 0; printf("total data length=%d; /n",nSize); *pDes = (unsigned char*)malloc(nSize); if(pDes == NULL) return -1; char *pBegin = strstr(pSrc,"/r/n/r/n");//程序运行到这里pBegin为空,大家说怎么办 if (pBegin == NULL) return -1; pBegin += 4; while(1) { int ChunkedSize = 0; sscanf(pBegin,"%x",&ChunkedSize); if( 0==ChunkedSize ) { puts("endof chunkeds"); break; } pBegin = strstr(pBegin,"/r/n"); if (pBegin == NULL) return -1; pBegin += 2; // /r/n nLeftSize = nSize - (pBegin - pSrc); if (ChunkedSize > nLeftSize) ChunkedSize = nLeftSize; memcpy(*pDes+nRetSize,pBegin,ChunkedSize); nRetSize += ChunkedSize; if (ChunkedSize == nLeftSize) /* 数据包不全 */ break; pBegin += ChunkedSize; if (strstr(pBegin,"/r/n") != NULL) pBegin += 2; // /r/n else break; } return nRetSize; }
GDB调试情况:
- Assembly code
Breakpoint 1, need_to_parse_chunked_data (data=0xbffddbbc "a\r\n\037\213\b", len=15, buf=0xbffbdbbc "") at http.c:281 281 char strlength[10]={0}; (gdb) n 283 char * temp = buf; (gdb) 284 int total =0, length = 0, nBytes = 0; (gdb) 286 pTemp = strstr(pStart, "\r\n"); (gdb) n 287 if( NULL == pTemp ) (gdb) p data $1 = 0xbffddbbc "a\r\n\037\213\b" 这个数据包其实有1209个字节,但子函数里就只能看到这么一点点,我怀疑就是这里出问题了,但我又没有好的办法。gzip 文件中时包好多的0字符串,不知道有影响没 (gdb)
------解决方案--------------------