我有一个已经编译好的VC程序A,我重新编写了一个程序B与其进行Socket通信,现在可以接收到来自程序A的数据包,现在的问题是,我在不知道程序A的封包规则的情况下,如何分析出数据包中的数据?现在可以确定的是,该数据包并未进行加密。有熟悉这一块的好同志,最好能通过QQ帮助我一下,最后我会将解决方法贴在帖子上,造福下一批菜鸟。分数嘛,大大的有啊。谢谢捧场。

解决方案 »

  1.   

    忘了写QQ了,14003412,请注明CSDN。
      

  2.   

    TCP去掉14首字节,然后去掉20IP字节,然后去掉20(一般20)Tcp字节,就到了数据段了!就知道这么多了!呵呵,也不知道楼主想要什么样的,如果没有加密,那就应该可以看到数据了!
      

  3.   

    参考TCP协议,它有自己的包头,还有IP包头,对应协议定义的包格式,自己分段取出来数据看一下就知道了
    你还可以用抓包工具抓包看一下,它们一般会解析一下包,这样你可以比较方便的看到数据
      

  4.   

    不知道你的意思是不是 没有任何知道和A如何通信的程序 要分析他的通信协议 如果是的话这个很难(除非A的协议非常简单而且返回数据都很好读)
    有一个能和A正确通信的代码 抓他们之间通信数据才有意义
      

  5.   

    8樓的有道理.
    找一個懂A說什么的程序, 再用wireshark之類的東西來抓抓.
    你自己的B程序可以不忙著寫.
      

  6.   

    除非你知道A的封包规则,否则还是WiresharkPortable 抓几个包你先弄明白A再说什么想表达什么意思
    之后你才能教B应该如何才能听懂 A再说什么 
      

  7.   

    在ether net里面,不管这么样你抓到一个网络报文,你是要解析的,14字节的以太头部
    6字节 目的MAC地址
    6字节 原MAC地址
    2字节 协议类型字段 0x0800说明为 IP报文 0x8863就是PPPoE的报文,这些字段的不同意思,你可以找写网络书查查如果是0x0800的IP报文的话(不是的话就把这个报文丢弃,不在继续解析),下面紧跟着20字节的IP头部,
    IP头部报文的第10个字节,这个字节说明下面跟着是UDP还是TCP,如果是UDP的话这个字节是0x11 如果是TCP的话这个字节是0x06
    你解析到这里的时候就知道是不是TCP报文了。
    如果是TCP的话,IP头部下面就是20个字节的TCP头部,在TCP协议里面
    前4个字节是原端口和目的端口,你可以根据端口好来确定下面的负载是什么类型的数据,
    20字节的TCP头部后,就是数据负载,这里就是要找的数据了。如果A的发的数据包的规则是自定义的话,那你就要知道是这么定义的,一般都遵循TCP/IP协议的,如果是自定义协议的话,那没有办法了,除非你知道那些协议是怎么定义报文的,不然解析一个报文还是比较困难的
      

  8.   

    用wireshark捕获网络数据包分析。
      

  9.   

    人家说的是socket,不需要处理什么IP头 ,mac头什么的吧?收到啥就是啥吧
      

  10.   

    我能抓下数据包,为了方便比对,已经将这些数据包存储下来了。
    另外,具体我不清楚Socket数据包是否有mac这些内容,但我是通过用Socket监听,并建立连接来得到数据包的。
    难道就真的没有好办法?
      

  11.   

    MAC是底层的,数据链路层地址,你拿上面的TCP等上层的数据包就可以了...
      

  12.   

    数据包我拿到了,我现在是要分析数据包中到底是些什么数据。如果传出来的是字符串,我就想看到类似“ABC”这样的东西,如果传出来的是图片,我就可以看到图片。
      

  13.   

    前几楼很搞笑
    TCP接收数据居然还处理IP头什么的
    如果对A程序可操控,发几个包看下就知道了
    无非是TYPE LENGTH 之类的在前面
      

  14.   

    23楼说到了一些实际情况,A程序是在操作上是可以控制的,我发出了几个包,并将包截获下来,用COMMVIEW查看了一下,无论使用什么编码方式,都是看不到类似字符串的东西。而我自己发送了一个字符串“ABC”的数据包,在COMMVIEW中就能清楚的看到“ABC”。
      

  15.   

    我也正在做一个抓包程序,是用winpcap, 也正在考虑如何分析获得数据段
      

  16.   

    data[0]到data[5]是source_mac
    data[6]到data[11]是dest_mac
    data[26]到data[29]是dest_ip
    data[30]到data[33]是source_ipstruct ethhdr 
    {
        unsigned char h_dest[ETH_ALEN];   /* destination eth addr */
        unsigned char h_source[ETH_ALEN]; /* source ether addr */
        unsigned short h_proto;           /* packet type ID field */ 
    };