阅读:2829回复:15
TDI过滤驱动获得本地IP地址的问题?
小弟使用TDI过滤驱动想获得一个连接的本地IP地址和端口号,在IRP_MJ_CREATE的完成函数发IRP查询,在又一个完成函数中得到一个TDI_ADDRESS_IP结构,按理说这个结构中有IP地址和端口号,但是我却只得到了端口号,而IP地址却为0?
为什么? |
|
沙发#
发布于:2007-07-31 21:18
我是按照楚狂人的教程来做的
|
|
板凳#
发布于:2007-08-01 18:31
0 不是代表任意IP么
|
|
|
地板#
发布于:2007-08-02 10:35
但如果这样的话,怎样获得这个连接的本地IP地址呢,我想获得和netstat的结果一样
|
|
地下室#
发布于:2007-08-02 10:37
这样在create包中是不是抓不到IP地址啊
如果他在应用层使用任意IP地址的话 那我应该去哪里抓呀? |
|
5楼#
发布于:2007-08-02 15:38
本地IP对应本地网块,在你还没完成连接的时候,怎么可能确定哪块本地网块去连接?
在TDI_CONNECT或TDI_EVENT_CONNECT的完成函数里,才能取得本地IP,具体看tdi_fw |
|
6楼#
发布于:2007-08-03 16:04
谢谢 jackiefzj 兄,我先去看看
TDI还真是不太好学呢 |
|
7楼#
发布于:2007-08-03 16:36
TDI对于初学来说,不好学。
|
|
|
8楼#
发布于:2007-08-05 18:27
jackiefzj 兄,我看了tdi_fw的TDI_CONNECT和TDI_EVENT_CONNECT的完成函数,但是发现它那里面获得IP地址是从一个数据结构中得到的,而这个数据结构是在CREATE的处理函数中写入的,并不像你所说的那样啊?
|
|
9楼#
发布于:2007-08-05 21:36
我想到一个办法,不知道可行不?
我想目的是想获得网络通信的IP地址和端口信息。 我可以在发送和接受的函数里查询IP地址信息啊,这样应该没有问题吧? |
|
10楼#
发布于:2007-08-05 22:03
我想你似乎并没有认真仔细得去看,去看Complete函数中调用的update_conn_info(),看一下这函数的调用时注释与定义时注释。
个人感觉TDI里,这里是最复杂的地方。真正取到地址的地方,是update_conn_info()完成函数update_conn_info_complete()里面。中间还有一个小插曲,要通过申请一个工作队列delayed_ucn,把IRQL降到PASSIVE_LEVEL 发送接收函数里,理论上应该是可行的,你可以去试一下。 |
|
11楼#
发布于:2007-08-06 17:03
好,我再去看看
|
|
12楼#
发布于:2007-08-06 19:57
谢谢jackiefzj ,我看了下,关键果然是在那里。我又有一个问题,tcp可以通过这个获得本地IP地址,UDP可以吗?
好象tcp的IRPs->fileobject是连接对象的指针,而udp的irps->fileobject 是传输层地址的指针,处理应该不同吧? |
|
13楼#
发布于:2007-08-06 20:08
jackiefzj ,不好意思哈,我问的问题太傻了
没看到update_conn_info()里确实对TCP和UDP分别有处理哈,谢谢了哈,各位~~~`` |
|
14楼#
发布于:2007-08-13 10:07
......
|
|
|
15楼#
发布于:2008-03-23 20:55
受教了,呵呵
|
|