阅读:3721回复:41
(急)采用ndis hook技术,Win2k和xp下结果不同,why?
采用ndis hook技术(同费尔),Win2k能够通信,但是在xp下ping不通,为什么?
|
|
|
沙发#
发布于:2005-06-01 21:17
费尔采用的是ndis hook技术,注册一个假协议的那种?
建议用softice跟一下,看看哪出的问题。 |
|
板凳#
发布于:2005-06-02 10:23
不是假协议方式。
我仅是加密了他的ip数据,在2000正常。但在winxp和2003下不正确。 |
|
|
地板#
发布于:2005-06-02 10:38
你提的问题,太泛泛,别人无法做答,除非看过费尔防火墙代码的,我没有看过。我建议你用ice在收包,发包的入口,进行跟踪,可以比较2k正确的结果,再看xp有什么不一样的地方。
|
|
地下室#
发布于:2005-06-02 10:54
现在问题定位在xp(Win2003)下,不同网卡之间不能通信.是否校验位计算不在同一位置?
[编辑 - 6/2/05 by cyliu] |
|
|
5楼#
发布于:2005-06-02 15:09
链路层校验是如何计算的。谁有源代码?
|
|
|
6楼#
发布于:2005-06-02 17:05
链路层校验是如何计算的。谁有源代码? IP层校验和? EASY,GOOGLE一下就出来N多了。 |
|
7楼#
发布于:2005-06-02 18:13
老大,我要的不是IP层,写的没有歧义吧?
在写一次: 链路层校验是如何计算的,有源代码? 其他问题: 1 今天我写了hook ndis驱动,功能是修改了IP数据报的有效载合数据.然后用SNIFFER查看,截获到数据居然是修改后的数据.他是采用何种技术做的呢? 我个人人为是SNIFFER声明了一个假协议,然后把SNIFFER的协议联到协议的队列上.愚见! 2 环境: 两台计算机安装winxp(or Win2003),每台计算机安装不同网卡.安装网络过滤驱动后,不能PING.过滤驱动仅是修改了IP有效载核数据.通过DGBVIEW和SNIFFER,发现数据处理没有问题,既加密后成功解密.但是为何不能PING通呢,而在WIN2K下可以通过.是否网卡驱动计算链路层的CHECKSUM位置不同造成的.一个是在过滤驱动以前计算,一个是在过滤驱动以后计算,造成数据不同而被丢弃呢? |
|
|
8楼#
发布于:2005-06-02 21:31
老大,我要的不是IP层,写的没有歧义吧? 链路层校验和一般是网卡硬件自动生成的,采用可能是crc32吧?软件不用关心 1。sniffer就是windows下标准的协议驱动,与tcp/ip是并联的关系,os会把网卡驱动收到的数据包,发送到每一个绑定到该网卡上的 协议驱动,当然收到就是你修改后的数据。不是你理解的假协议 2。肯定与链路层的校验和没有关系。你加密的仅仅是ip载荷?不包括ip头?从道理上讲,2k上可以,xp不应该有问题。对比看看2k,与xp的数据完全相同吗?如果实在看不出什么不同,可以加载tcpip.dbg,用ice跟进去,看看ip协议栈的代码是如何检查抛弃这个数据包的,因为可以看到局部函数,变量的名字,如果你熟悉汇编的话,这个工作并没有想象的复杂 |
|
9楼#
发布于:2005-06-03 10:11
2。肯定与链路层的校验和没有关系。你加密的仅仅是ip载荷?不包括ip头?从道理上讲,2k上可以,xp不应该有问题。对比看看2k,与xp的数据完全相同吗?如果实在看不出什么不同,可以加载tcpip.dbg,用ice跟进去,看看ip协议栈的代码是如何检查抛弃这个数据包的,因为可以看到局部函数,变量的名字,如果你熟悉汇编的话,这个工作并没有想象的复杂
是仅仅是ip载荷,数据完全相同.使用同一网卡可以ping,但网卡不同就ping不通了. |
|
|
10楼#
发布于:2005-06-03 13:44
跟踪了一次,在那个异常网卡中,没有使用过滤驱动程序的发送函数。不知道他是如何发送数据的?
|
|
|
11楼#
发布于:2005-06-03 14:47
跟踪了一次,在那个异常网卡中,没有使用过滤驱动程序的发送函数。不知道他是如何发送数据的? 所有的发送的函数,都hook了吗? |
|
12楼#
发布于:2005-06-03 17:45
所有的发送的函数,都hook了.但是就是没有调用SEND,仅是RECV.
问题是在该win2k下没有任何问题.在其他网卡无论是win2k,winxp还是win2003都正常.唯有该网卡特殊. 该网卡是华硕主板 集成网卡. 如果说驱动有问题,为什么WIN2K下正常呢?怪怪! zhaock,这问题到第能出在哪里呢? |
|
|
13楼#
发布于:2005-06-03 19:08
所有的发送的函数,都hook了.但是就是没有调用SEND,仅是RECV. 确实比较奇怪。 你再把问题详细描述一遍,A ping B,流程IpA->加密->A网卡 ->网络->B网卡->解密->IpB,再反着回答IpA,到底是哪个包出的问题?明确了吗?和正常的进行比较。 |
|
14楼#
发布于:2005-06-06 14:25
怪事.
不知道tcp的checksum何时计算的? 过程这样: 发送: 发送数据经过hook的函数,hook函数修改了tcp的checksum数值(如1 -> 2).然后发送。 接收: 接收数据经过hook的函数,hook函数该回checksum数值(2 -> 1),然后上传数据. 在接收端sniffer报告说checksum数值应该为2,而不是1,理论因该是1啊?为何是这样呢? |
|
|
15楼#
发布于:2005-06-06 15:11
以上仅是在netbios over tcpip情况下发生,也就是在对445,139等端口发生该情况。只要改动了tcp协议头,就会丢弃数据包。为什么呢?也许在xp情况下,在ndis内部对netbios数据进行了特殊处理,但不应该啊?
前提条件是华硕内置网卡和其他机器的内置网卡之间在winxp(win2003)操作系统下。在2la [编辑 - 6/6/05 by cyliu] |
|
|
16楼#
发布于:2005-06-07 14:41
以上仅是在netbios over tcpip情况下发生,也就是在对445,139等端口发生该情况。只要改动了tcp协议头,就会丢弃数据包。为什么呢?也许在xp情况下,在ndis内部对netbios数据进行了特殊处理,但不应该啊? 你开始不是说ping吗,怎么又和tcp扯上关系了.你是在ip层加密吗? 需要修改tcp的checksum吗?建议把问题再好好缕一缕, 我看你的描述越看越不明白,呵呵 |
|
17楼#
发布于:2005-06-07 15:05
如果你修改的是ICMP包,那么就不应该影响到IP校验和
如果修改了TCP UDP包的内容,那TCP UDP的校验和要重新计算。 |
|
18楼#
发布于:2005-06-07 16:48
问题描述:
A 和 B 两台计算机,他们都安装了Win2K,WinXp,Win2003操作系统.A计算机有Realtek RTL8139 Family PCI Fast Ethernet NIC集成网卡.B计算机有两块网卡,一是D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.C)网卡(非集成);另一是Marvell Yukon 88E8053 PCI-E Gigabit Ethernet Controller 华硕主板集成网卡. A 和 B 两台计算机都安装我写的网络过滤驱动. 测试结果: Win2K <=> Win2K,Win2K <=> WinXP ,Win2K <=> Win2003,WinXp<=> WinXp,WinXp <=> Win2003,Win2003 <=> Win2003,B计算机使用D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.C)网卡.A与B网络通信没有任何问题. 但是B采用Marvell Yukon 88E8053 PCI-E Gigabit Ethernet Controller 华硕主板集成网卡,就不能通信(Win2K <=> Win2K 没有测):ping 可以通过,UDP数据也可以通过.仅是对TCP数据无法通过了. 如果B采用ASUSTeK/Broadcom 440x 10/100 Integrated Controller华硕主板集成网卡,Win2K <=>Win2K可以通信。但是其他情况就不能通信,问题出在他发送的数据更本没有经过我的hook发送函数。 这是为什么呢? 发现一个特征是发生问题的都是Controller型网卡,和他有关系吗?但Win2K就可以通过呢? 还有如何通过Frame的类型域知道数据为802.3格式,是SNMP数据呢?(如同判断是ip数据还是arp数据一样) Frame的CheckSum的计算是在调用网络过滤模块前付值还是在调用后付值? 接受数据时,流程是否应该: 网卡驱动 -> 网络过滤 -> tcpip.sys 引用: -------------------------------------------------------------------------------- 如果你修改的是ICMP包,那么就不应该影响到IP校验和 如果修改了TCP UDP包的内容,那TCP UDP的校验和要重新计算。 -------------------------------------------------------------------------------- 1 如果修改了TCP UDP包的内容,那TCP UDP的校验和要重新计算? 我认为不用计算tcp/udp的校验和.因为发送时修改了tcp内容,接收时又改回了内容.不知道我理解是否正确? 谢谢高手们的指点! |
|
|
19楼#
发布于:2005-06-07 17:56
>>问题出在他发送的数据更本没有经过我的hook发送函数。
SendHandler,SendPacketsHandler你都钩挂了吗? |
|
上一页
下一页