burigude
驱动牛犊
驱动牛犊
  • 注册日期2008-04-02
  • 最后登录2009-04-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3099回复:4

在NDIS驱动里如何获得本地打开的tcp、udp端口状态?

楼主#
更多 发布于:2009-02-28 22:48
我现在在编写NDIS驱动(在passthru基础上),想需要一个功能,在拦截数据包后,通过目标端口,想知道本地计算机是否一经打开了对应的端口(端口处于监听状态,就是没有建立会话连接前),类似于linux内核的tcp_v4_lookup,udp_v4_lookup函数。我知道应用程序可以通过函数gettcptable 、getudptable可以获得本地端口打开情况,我想在ndis驱动里,就可以获得,我对NDIS驱动,不是很了解,不知到这个功能能不能实现,高手能否指点一、二。
chengfangquan
驱动牛犊
驱动牛犊
  • 注册日期2007-08-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望361点
  • 贡献值1点
  • 好评度42点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-04-07 16:32
但靠passthru不行吧,需要加上Tdi或者别的
ceabie
驱动牛犊
驱动牛犊
  • 注册日期2006-08-23
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值0点
  • 好评度59点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2010-03-14 01:08
好像这个问题很久远了,不过我最近也需要这技术,就蛮帖这了。具体的我还没倒腾出来,原理可以参考HOOK大法中的“端口隐藏”技术,通过对\Device\Tcp或\Device\Udp的IO读写来获得。
http://blog.sina.com.cn/s/blog_459861630100ah6u.html
XeChini
mz_suya
驱动小牛
驱动小牛
  • 注册日期2008-06-13
  • 最后登录2010-08-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望648点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分1分
地板#
发布于:2010-03-14 19:14
端口也好 socket也好都是tcp中的东西,由于逻辑上imd和小端口都在tcp以下 所以可以达到你的要求。
具体的实现可以参照tcp的三次握手来做,就是你自己申请一个“第一握手包”丢向上层,看上层怎么返回就知道是不是在监听了。

因为所有的包都经过你 而你们开始运行的顺序也基本一致 所以也可以统计某些状态 然后自己判断某个端口处于什么状态,说白了无非就是 你实现一个tcp ip协议驱动 然后再向上层表现为小端口,这不正是imd的特征嘛  呵呵
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
地下室#
发布于:2010-03-15 11:57
技术选择错误, 使用tdi.  
走走看看开源好 Solaris vs Linux
游客

返回顶部