我有一个已经编译好的VC程序A,我重新编写了一个程序B与其进行Socket通信,现在可以接收到来自程序A的数据包,现在的问题是,我在不知道程序A的封包规则的情况下,如何分析出数据包中的数据?现在可以确定的是,该数据包并未进行加密。有熟悉这一块的好同志,最好能通过QQ帮助我一下,最后我会将解决方法贴在帖子上,造福下一批菜鸟。分数嘛,大大的有啊。谢谢捧场。
解决方案 »
- 急!急!急!Tab control控件里面如何添加List control啊?
- CreateWindowEx 创建按钮 非常奇怪的一个问题哈,按下空格,按钮压下和弹起来的速度超慢
- 还是PostThreadMessage的问题
- 关于Active的控件的使用
- 有关回调函数和控制台程序的问题
- 几个菜鸟级的问题!
- 如何改变MDI程序框架部分(菜单、工具栏、状态栏等)的颜色,使它不再显示为系统的默认灰色。
- 移动控间简单问题!
- 才鸟问题。。急!!!
- 如何判断ListCtrl点击了垂直或水平滚动条?
- 已经获取到了IDisptach*, 如果判断它是一个JS的普通对象 还是JS的Array对象?
- ALT为何物?
你还可以用抓包工具抓包看一下,它们一般会解析一下包,这样你可以比较方便的看到数据
有一个能和A正确通信的代码 抓他们之间通信数据才有意义
找一個懂A說什么的程序, 再用wireshark之類的東西來抓抓.
你自己的B程序可以不忙著寫.
之后你才能教B应该如何才能听懂 A再说什么
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协议的,如果是自定义协议的话,那没有办法了,除非你知道那些协议是怎么定义报文的,不然解析一个报文还是比较困难的
另外,具体我不清楚Socket数据包是否有mac这些内容,但我是通过用Socket监听,并建立连接来得到数据包的。
难道就真的没有好办法?
TCP接收数据居然还处理IP头什么的
如果对A程序可操控,发几个包看下就知道了
无非是TYPE LENGTH 之类的在前面
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 */
};