阅读:3145回复:4
在NDIS驱动里如何获得本地打开的tcp、udp端口状态?
我现在在编写NDIS驱动(在passthru基础上),想需要一个功能,在拦截数据包后,通过目标端口,想知道本地计算机是否一经打开了对应的端口(端口处于监听状态,就是没有建立会话连接前),类似于linux内核的tcp_v4_lookup,udp_v4_lookup函数。我知道应用程序可以通过函数gettcptable 、getudptable可以获得本地端口打开情况,我想在ndis驱动里,就可以获得,我对NDIS驱动,不是很了解,不知到这个功能能不能实现,高手能否指点一、二。
|
|
沙发#
发布于:2009-04-07 16:32
但靠passthru不行吧,需要加上Tdi或者别的
|
|
板凳#
发布于:2010-03-14 01:08
好像这个问题很久远了,不过我最近也需要这技术,就蛮帖这了。具体的我还没倒腾出来,原理可以参考HOOK大法中的“端口隐藏”技术,通过对\Device\Tcp或\Device\Udp的IO读写来获得。
http://blog.sina.com.cn/s/blog_459861630100ah6u.html |
|
|
地板#
发布于:2010-03-14 19:14
端口也好 socket也好都是tcp中的东西,由于逻辑上imd和小端口都在tcp以下 所以可以达到你的要求。
具体的实现可以参照tcp的三次握手来做,就是你自己申请一个“第一握手包”丢向上层,看上层怎么返回就知道是不是在监听了。 因为所有的包都经过你 而你们开始运行的顺序也基本一致 所以也可以统计某些状态 然后自己判断某个端口处于什么状态,说白了无非就是 你实现一个tcp ip协议驱动 然后再向上层表现为小端口,这不正是imd的特征嘛 呵呵 |
|
地下室#
发布于:2010-03-15 11:57
技术选择错误, 使用tdi.
|
|
|