ted
ted
驱动牛犊
驱动牛犊
  • 注册日期2001-09-27
  • 最后登录2002-04-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2927回复:11

如何将本机将要对外发出的包copy一份过来检查?

楼主#
更多 发布于:2001-10-24 14:54
假设本机上有多个应用程序,它们发往外部的包,我的程序如何copy过来检查呢?
我是新手,对网络驱动等等方面了解太少,看了winpcap的部分代码,感觉好像很多是讲如何截获从外面发到(或经过)本机的包,而好像没有将如何截获外发的包的,实在是不懂.

各位大侠多指教~~~~

最新喜欢:

fsbfsb
蝌蚪
lao_o
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-14分
  • 威望110点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-24 17:32
winpcap只能截获进来的包,因为它只实现了一个Protocol的接口,也就是说它实际上并不是一个Imtermidiate Driver,而是一个Protocol Driver。
如何截获出去的包,可参考Passthru里面Miniport接口的实现。
ted
ted
驱动牛犊
驱动牛犊
  • 注册日期2001-09-27
  • 最后登录2002-04-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-24 17:52
十分感谢!
我会去查的.
如果各位大虾还有什么相关的头绪或资料,请不吝赐教~~
蝌蚪
ted
ted
驱动牛犊
驱动牛犊
  • 注册日期2001-09-27
  • 最后登录2002-04-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-10-24 19:32
想起一点,那些号称可以盗取本机浏览器信息或者oicq帐号的程序,他们又是如何截获他们所需要的本机发出的信息的呢?总不见的他们也去中间层去截获包啊?

是不是意味着还有些什么比较轻巧容易的办法来得到这些信息?
蝌蚪
ted
ted
驱动牛犊
驱动牛犊
  • 注册日期2001-09-27
  • 最后登录2002-04-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-10-24 23:16
又,重看了winpcap的nt下的packet.dll的源码,它通过一个共享事件就从网卡设备上读到了IP包.
我想知道,这样读出来的包是仅仅本机接收到的包,还是说连本机外发的包也在里面?

假如仅仅是接收到的包,那么,我们是不是可以通过类似的共享事件的手段来获得发出的包呢? 如果可以,这个对应的(读外发的包)共享事件的名字或者编号是什么?或者它的其他相关资料在哪里可以找到呢?

心急如焚,万望各位大侠指教~~~~~~~~~~~~~~~
蝌蚪
lao_o
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-14分
  • 威望110点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-10-25 15:26
关键不在Packet.dll,它使用的事件只是为了等待Driver的响应,因为它向Driver发了读操作的IRP。
在Driver里,函数PacketRead和Packet_tap负责响应这些IRP。
就我所知,并不存在这样的可抓包的共享事件。要抓往外发的包,就实现Miniport吧。
流liu_0
驱动牛犊
驱动牛犊
  • 注册日期2001-03-30
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-10-26 01:33
如果你不需要捕获网络原始数据包,可以在TDI层截获数据(9x,NT,2000均可)。如果需要原始数据包,在95/98/ME下,可以使用HOOK_DEVICE_SERVICE系统服务HOOK住NDIS_SENDPACKET,就可以抓到本机发出原始的网络数据包。在NT/2000下,就只能开发NDIS中间驱动程序来捕获了,这个工作量要大得多,呵呵,自己试试就知道了
ted
ted
驱动牛犊
驱动牛犊
  • 注册日期2001-09-27
  • 最后登录2002-04-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-10-26 20:31
十分感谢各位大侠!!!

这两天我已经试验过了,在win2000上很好解决的,因为win2000新支持一个socket参数SIO_RCVALL,有了它之后,直接用socket就可以截获本机上进出的所有包.具体例程可以参考http://www.csdn.net/develop/article%5C9%5C9062.shtm

我试验过,没有发现丢包,可以说很好用.(但是我不明白为什么它会同时截获到收到的包以及发出的包,难道它们放在同一队列? 不过事实上它真的截到了,帮我解决了难题).

但还有一头拦路虎-------上述方法win98不支持.而我的程序必须同时支持win2000和win98

我会进一步看看各位大侠对98下解决这个问题的建议,十分感谢!!

蝌蚪
ted
ted
驱动牛犊
驱动牛犊
  • 注册日期2001-09-27
  • 最后登录2002-04-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-10-26 20:41
流liu_0:

    如何在TDI层截获数据?能否介绍一下?或者指点一下到哪里找相关资料也好
    另,我的程序只要能抓到IP包就可以了,不需要抓到物理帧.只需要监听,不需要拦截.
    thanks~~
[ted 编辑于 2001-10-26 20:45]
[ted 编辑于 2001-10-26 20:52]
蝌蚪
laser36
驱动牛犊
驱动牛犊
  • 注册日期2001-09-11
  • 最后登录2005-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-02-28 15:38
十分感谢各位大侠!!!

这两天我已经试验过了,在win2000上很好解决的,因为win2000新支持一个socket参数SIO_RCVALL,有了它之后,直接用socket就可以截获本机上进出的所有包.具体例程可以参考http://www.csdn.net/develop/article%5C9%5C9062.shtm

我试验过,没有发现丢包,可以说很好用.(但是我不明白为什么它会同时截获到收到的包以及发出的包,难道它们放在同一队列? 不过事实上它真的截到了,帮我解决了难题).

但还有一头拦路虎-------上述方法win98不支持.而我的程序必须同时支持win2000和win98

我会进一步看看各位大侠对98下解决这个问题的建议,十分感谢!!

 



ted大侠,你好:

能否将“http://www.csdn.net/develop/article%5C9%5C9062.shtm ”的例程发给我,我取不到此例程,谢谢。

 :o
awzzz
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2002-03-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-03-06 16:55
ted大侠,你好:

能否将“http://www.csdn.net/develop/article%5C9%5C9062.shtm ”的例程发给我,我取不到此例程,谢谢。

我也取不到,请转贴于此处或发给大家,谢谢!
mister
驱动牛犊
驱动牛犊
  • 注册日期2001-11-25
  • 最后登录2013-02-26
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望26点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-03-09 12:15
有关RCV_ALL的例题在那本《WINDOWS网络编程》的光盘中有。祝你好运!
游客

返回顶部