我用winpcap做了一个嗅探器,就是通过比对关键字来现实内容,做了MFC界面。但是没办法正常现实截到的包的内容。在截包中,数据在const u_char *pkt_data的指针中,但我要是strlen这个指针,得到的长度并不是数据包的长度。我如何才能在编辑框Cstring类中显示出pkt_data的全部内容?并且以文本方式现实,就像在wireshark中显示的那样。wireshark中可以显示出如下的原始文本数据:HTTP/1.1 200 OKServer: nginx/0.7.68Date: Mon, 21 Nov 2011 03:10:22 GMTContent-Type: image/gifConnection: keep-aliveX-Powered-By: PHP/5.2.17Pragma: no-cacheCache-Control: private, max-age=0, no-cacheContent-Length: 43GIF89a.............!.......,...........D..;GET /gmlog.php

解决方案 »

  1.   

    strlen是针对有终止符号的字符串,网络数据是二进制流的,为0的字节相当多,你直接strlen肯定是得不到正确得数据长度得。需要根据数据协议来取正确的数据包
      

  2.   

    ----------------------------------------------------------
    HTTP/1.1 200 OKServer: nginx/0.7.68Date: Mon, 21 Nov 2011 03:10:22 GMTContent-Type: image/gifConnection: keep-aliveX-Powered-By: PHP/5.2.17Pragma: no-cacheCache-Control: private, max-age=0, no-cacheContent-Length: 43
    -------------------------------------------------------
    楼上说的对,将这段文字粘贴到记事本,然后用另存为NICODE字符文本,再用UltraEdit以16进制打开会发现文本内有许多的零,但用记事本打开显示正常,这是因为记事本自动识别ASCII和UNICODE
    所以楼主想要显示文本或需要长度的话,需要用WCHAR
    const u_char *pkt_data这个是ASCII的,转换成WCHAR试试