阅读:2546回复:10
高分请教(100分),关于IP-IN-IP的问题
我在IMD中,将IP数据报重新封装后,增加了一个IP头,和原始的IP包头基本一致,测试后,Ping包能通,但是Ftp和http这种tcp连接的包不通,经过打印IP报数据后,发现tcp握手不能完成。
希望大家能给点解决的思路或经验! |
|
最新喜欢:baoyib...
|
沙发#
发布于:2003-04-11 22:29
我在IMD中,将IP数据报重新封装后,增加了一个IP头,和原始的IP包头基本一致,测试后,Ping包能通,但是Ftp和http这种tcp连接的包不通,经过打印IP报数据后,发现tcp握手不能完成。 各种包大小都能通? |
|
|
板凳#
发布于:2003-04-12 09:41
ping包测试的最大报文是2000字节,没问题。
|
|
|
地板#
发布于:2003-04-12 10:15
应该看一下FTP的协议,改了IP以后端口号 报文序号还有一些命令格式需要做处理,具体的一些处理内容可以参考一下nat的RFC文档。
|
|
|
地下室#
发布于:2003-04-12 21:56
应该是什么地方的校验没有修改
|
|
|
5楼#
发布于:2003-04-16 17:30
请问nat的RFC文档,在哪里可以找到?
|
|
6楼#
发布于:2003-04-16 17:46
请问:如果只对NDIS_BUFFER中的数据进行修改而且不改变缓冲区数据的长度(比如使用单字节异或),是否只对XPASSTHRU程序中send.c和recv.c代码进行修改就行了?大哥们帮帮忙
对Ip包头外所有数据加密,是否还要另算校验和? 拜托 |
|
7楼#
发布于:2003-04-16 22:04
呵呵,典型的NAT问题呀,RFC?你看一下本论坛,有好多人都提供了解决的办法,标准的实现是edust提供的,但那不是一个最好的办法,虽然在linux核心实现中也用了类似的方法,当然,如果你要使用这种方法,可以参考linux中的FTP连接跟踪模块,那样的实现最为标准并且最简单。
当然还有更好的方法,就是HU斑竹所说的使用虚拟网卡来实现,这个具体的技术细节在这里没有办法详细的阐述,你可以参考XP DDK所提供的例子,叫做MUX,是一个中间层驱动,然后好好的设计你的实现,就可以了。我记得英文的NAT RFC为953,不是很清楚了,你自己查一下就可以搞定了 |
|
8楼#
发布于:2003-04-16 22:09
不好意思是在后面才看到你所说的问题,其实,很简单,BUFFER的分配是一个定量的值,我不知道你是怎样分配的,但通常都是在BindAdapter中就统一分配了,这个你不用考虑。至于你要修改包,那是属于TCP/IP协议规定的了,如果你修改了TCP包,当然要重新计算TCP校验和,这个与操作系统没有关系。如果要实现加密,也就是说想做VPN的话,不但需要重新计算校验和还要自己实现分片和重组的。
|
|
9楼#
发布于:2003-04-18 02:45
如果用单字节加密,不改变包的大小是否要考虑分片、重组,不加密
ip包头那么是否要重算tcp校验和? 非常感谢 |
|
10楼#
发布于:2003-04-25 10:06
我在IMD中,将IP数据报重新封装后,增加了一个IP头,和原始的IP包头基本一致,测试后,Ping包能通,但是Ftp和http这种tcp连接的包不通,经过打印IP报数据后,发现tcp握手不能完成。 tcp的chksum包含部分ip头。 因此,需要重新计算chksum。 |
|
|