阅读:1735回复:8
两个经典问题(Wingate的transparent redirection技术)!
1、如何在IP层获得本机的IP地址?(这里当然是指哪个函数能读到本地IP,而不是指从本地发出的IP包中截取源IP!)
2、TCP的三次握手连接中,接收IP包方对IP包中的源IP地址的利用情况。例如,A、B建立TCP连接的三次握手,如果A发往B的第二次握手的IP包头中的源IP地址被修改(当然checksum也有相应的改变),B是否会抛弃该IP包?念书时,记得老师好像说过,三次握手的交互中,源和目的的IP地址在回复时被交换。因此,如果修改源IP,将会出错。(这个问题源于Wingate的transparent redirection技术和proxy技术,望高手留意) 谢谢! [编辑 - 7/8/03 by guitar_string] |
|
最新喜欢:baoyib... |
沙发#
发布于:2003-07-05 08:42
1、如何在IP层获得本机的IP地址?
NDIS有标准函数,但现在我不记得的 2.更改了有什么关系,你再算一下checksum不就可以!,要不NAT怎么实现呢。 :D你改我也改 [编辑 - 7/9/03 by antspower] |
|
|
板凳#
发布于:2003-07-07 11:29
hei :D
|
|
|
地板#
发布于:2003-07-09 00:20
读取注册表是一个方法
|
|
|
地下室#
发布于:2003-07-09 11:29
对于问题1,我是用读注册表的方法实现的,在驱动加载的时候调用。 :)
|
|
|
5楼#
发布于:2003-07-10 09:08
能否说得详细点
对于你提到的这点,我有一个疑问: 在IP层能用到windows API ??API属于核心调用吗? 当用户更改本机IP地址后,如何让我编写的驱动知道? 恭候指导! |
|
6楼#
发布于:2003-07-10 21:58
这是内核访问注册标的例子
NDIS_STRING tcpLinkageKeyName = NDIS_STRING_CONST(\"\\\\Registry\\\\Machine\\\\System\\\\CurrentControlSet\\\\Services\\\\Tcpip\\\\Linkage\"); InitializeObjectAttributes(&objAttrs, &tcpLinkageKeyName, OBJ_CASE_INSENSITIVE, NULL, NULL); status = ZwOpenKey(&keyHandle, KEY_READ, &objAttrs); if (!NT_SUCCESS(status)) { DbgPrint(\"\\n\\nStatus of %x opening %ws\\n\", status, tcpLinkageKeyName.Buffer); } else { ULONG resultLength; KEY_VALUE_PARTIAL_INFORMATION valueInfo; status = ZwQueryValueKey(keyHandle, &bindValueName, KeyValuePartialInformation, &valueInfo, (valueInfo), &resultLength); } |
|
|
7楼#
发布于:2003-07-10 22:01
对于问题2,如果改变了,可能是由问题的,
但是,如果,在建立握手前,(也就是第一次握手前)就已经改变了,这样3次握手可以保证同业,nat实际上在建立握手前就已经改变了源ip了,所以,不存在在握手过程中ip变动 |
|
|
8楼#
发布于:2003-07-11 10:36
老大,怎么编译了一大堆错误。
下面是DDK中的一句话: Callers of InitializeObjectAttributes must be running at IRQL PASSIVE_LEVEL. 我的驱动程序要加在例如xpassthru的recv.c文件里,这好像不是passive_level吧。 继续关注!! |
|