阅读:1921回复:14
问两个问题……关于HTTP包处理的
使用的passthru改的中间驱动
1.我自己组了个HTTP应答包,内容相当简单,就是在IE上显示一句话出来。 截获一个GET包,且这个包满足我设定的要求,哪么我就将这个包里面的mac ip 端口等信息全部互换,也就是将源IP换成目标IP,MAC,端口也一样,然后将显示一句话的html语句写入到包里(这语句是直接访问其他网站捕获的包里copy出来的,所以应该没问题)重新计算校验和,计算序列号和确认号 且计算正确, 然后发送,发送成功,但是,源机的IE窗口却不停的发送出get包,并不理会我发出的应答包,这里面是哪里出了问题?? 2.在访问163等大型网站时,发出一个get请求,会收到很多应答包。 但这些应答包并不是每个都有应答头,这些没有应答头的 怎么判断它是文字?图像?还是其他什么? 如果是文字怎么确定它的编码方式是gb2312 或者是utf-8 还是BIG5?? |
|
沙发#
发布于:2008-06-20 17:53
看Http协议
|
|
板凳#
发布于:2008-06-20 18:31
恩,您的回答很笼统,没有着力点。
|
|
地板#
发布于:2008-06-22 00:37
1 接受端是否受到了数据包。注意mac+ip+端口等都要设置
2 需要去看http协议。2楼是正解 |
|
|
地下室#
发布于:2008-06-23 10:58
传说中的版主出现了版主…… 感谢回答,
我修改了:以太头的两个MAC地址 IP头的两个IP地址、数据包总长、IP校验和 TCP头的序列号、确认号、两个端口、TCP校验和、还有TCP数据。IP头里面的标识 应该可以随便生成一个吧?还是有固定的算法?只知道它和分片有关系。在网关安装了这个程序的话,可以检测到有自己生成的包发送出去,但是接收端却没有收到,且不停发送GET请求…… 不知道是哪里算错。校验和和序列号确认号 长度都没问题,MAC和IP还有端口是互换的…… 关于第二个问题的话 我只知道在HTTP回应包头里面会有该包内容是什么形式 还有是用的什么编码方式,以及下一个包的序列号。如果现在并没有接收到包头,而接收到一堆后续包,这样的话就没有办法分辨它们的形式和编码方式了么? 还请版主大人和诸位牛人们指点下吧 |
|
5楼#
发布于:2008-06-26 14:09
首先你是基于GET包,并且修改的只是IP协议有关的字段,那么它始终还是GET包,即使源机器收到了,但不是它期望的HTTP响应包,当然会不停重发GET包了。
我建议LZ装个抓包工具,首先确认你发出来的包在源机器收到没有,如果没收到,说明你修改的IP协议有关字段错了;如果收到,那说明你的HTTP包格式有错。 |
|
6楼#
发布于:2008-06-26 15:46
1 你说的接收端没有收到 是指网卡没有收到,还是你上层协议服务没有收到。首先要确认接收机器已经处理了tcp./ip包。
|
|
|
7楼#
发布于:2008-06-27 15:09
看来我的描述能力不强啊 呵呵,第一个问题我已经弄好了 我的方法是可行的 而且包也是正确的,至于一直收不到……却是因为固化了接收端,包根本就不是往那台机器上发的………… 可恨这个问题困扰我那么久,可能是脑袋糊涂了吧……
至于第二个问题…… 还请版主大人和大牛们赐教啊!!千万不要因为我上面犯下的错误而抛弃我~~ 重新说下问题吧,很多大型网站的应答包都很大,而且很多都用的GZIP格式,使用的中文编码也大部分是GB2312和UTF-8两种,因为包很大,所以发出来的时候被分成很多分,除了第一份里面有关于是不是GZIP格式压缩和是GB2312还是UTF-8编码的说明以外,其他包都没有相关说明。我想问下有没有什么办法能够在没有截获含有说明的包的情况下,知道这些包是不是被压缩过 和是用的那种编码呢? 如果这个包是被压缩过的,有没有办法在不截获全部封包进行解压缩的情况下知道里面的真实内容呢? 我会努力的 |
|
8楼#
发布于:2008-06-30 15:05
把 系列包的第1个包存储下来。然后按照ack seq 的关系。存储下来一系列包。然后进行分析。。
这已经是我能想到的最简单的方法了。毕竟是底层 。要多做很多东西。 |
|
9楼#
发布于:2008-07-01 13:47
恩,这个也是我能想到的唯一可行的办法了…… 不过想要实现,貌似不是那么简单啊……
万一同时有数个类似包需要处理的话…… 我的天 |
|
10楼#
发布于:2008-07-01 15:41
不会同时的 貌似就拿一个线程。有缓冲一个一个来的。
|
|
11楼#
发布于:2008-07-01 16:07
我的意思是比如你现在收到一个包头,准备把这个包全部接收下来,收了一半了,这时候又来了一个其他网站的包头……这个时候就要新开一个地方存新的包,要是来个7、8十个的……
|
|
12楼#
发布于:2008-07-02 12:18
最好在相对高层来做这个包的分析
在ndis层要做很多内容: 1 考虑ip 分片 2 如果是加密报,而且是用的加密方式,不知道密钥和iv是不能解密的 3 压缩的话如果需要密码也是难题 4 压缩是块压缩的话,直到第一个包不能保证知道里面的内容。因为一块数据可能被分到两个或者多个ip数据报里面了 所以建议,在tcp上层来做高层协议处理,除非仅仅做包过滤可以考虑ndis。否则如果进行内容过滤得话可以考虑tdi层来分析协议或者采用虚拟网卡方式转到应用空间来分析协议。 |
|
|
13楼#
发布于:2008-07-02 12:57
你要相信 计算机的速度比 网络的速度快。。。。。。。。。。。。。。
不过不知道 接受包的过程 是不是单线程 |
|
14楼#
发布于:2008-07-03 11:40
非常感谢版主、yellowzzp asm61的回复,你们的回复给了我很多的提示,我是初学,以后的很多问题还要请你们多多指教啊。
|
|