slightflying
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2003-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3689回复:43

是否可以在协议驱动里面构造以太帧

楼主#
更多 发布于:2003-02-26 20:16
我想问一下链路层的成帧是在协议驱动里面完成的吗?如果我想自己控制成帧的过程是否可以在协议驱动里面完成呢?
不知道协议驱动对应的是网络协议的哪一层,请高手讲解一下,20奉送
slightflying
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-10 16:54
[quote]你如何发送的?不行肯定是发送的不正确,绑定关系不对?

呵呵,你误会了,数据发送我已经测试过了,我只是对你刚才的那个
网卡混杂模式只能sniffle不明白而已 [/quote]

sniffle具体到底是什么意思呀???
 :cool:
slightflying
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2003-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-07 20:24
你如何发送的?不行肯定是发送的不正确,绑定关系不对?

呵呵,你误会了,数据发送我已经测试过了,我只是对你刚才的那个
网卡混杂模式只能sniffle不明白而已
slightflying
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-07 16:41
你如何发送的?不行肯定是发送的不正确,绑定关系不对?
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
slightflying
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2003-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-07 16:03
我就知道是设成混杂模式了,这样只能做sniffer,别的什么都不能干,那是已经达到网卡以后网卡有给你的一个副本,原来的packet已经发出去了。

还是不太明白,网卡设成混杂模式只是它有收取网上所用以太帧的能力,我注册了协议栈后通过协议栈朝网卡上发送数据为什么不行呢,给讲讲原理,谢谢了先
slightflying
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-07 10:31
我就知道是设成混杂模式了,这样只能做sniffer,别的什么都不能干,那是已经达到网卡以后网卡有给你的一个副本,原来的packet已经发出去了。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-07 10:30
我就知道是设成混杂模式了,这样只能做sniffer,别的什么都不能干,
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-07 10:14
[quote]receive函数好像只负责接收低层的数据包吧,发送是调用ndissend函数吧

没有错呀。。。发送是调用ndissend函数,但是当NDISSEND执行完后,调用完NDISSEND后,数据还是会走RECEIVE函数。。。。所以说不管RECEIVE还是NDISSEND的数据都是走RECEIVE函数。。所以才不好区分呀。。。 [/quote]
是吗,我看了NDIS.H里面对NDISSEND的定义,好像调用的是sendhandle吧,数据走receive函数你是从什么资料上看到的,
如果是那样的话,确实就有点麻烦了 [/quote]

数据走receive函数,那是当写协议层时设置的接收方式为混杂模式的话,不信的话,你可以对PACKET的例子进行测试,我说的是协议层就是这样的,如果做中间驱动或HOOK的话就没有问题了,
slightflying
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2003-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-06 21:19
receive函数好像只负责接收低层的数据包吧,发送是调用ndissend函数吧

没有错呀。。。发送是调用ndissend函数,但是当NDISSEND执行完后,调用完NDISSEND后,数据还是会走RECEIVE函数。。。。所以说不管RECEIVE还是NDISSEND的数据都是走RECEIVE函数。。所以才不好区分呀。。。 [/quote]
是吗,我看了NDIS.H里面对NDISSEND的定义,好像调用的是sendhandle吧,数据走receive函数你是从什么资料上看到的,
如果是那样的话,确实就有点麻烦了
slightflying
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-06 18:20
[quote]win2000/ntddk/src/network/ndis/packet的例子就可以自己发包,
testapp.c里面处理send时,只给了一个广播的mac地址,这么看来,应该可以自己定义数据报格式了?只要负责接受的一方可以解释?

这个我也试过了,改掉源程序里面那个广播地址为一个已知的MAC地址,我在另一台机上就能收到它发过来的数据包,我现在不明白的地方是如果是大数据量的发送,我要把它封装成多帧,这个封装和重组的过程该怎么做 [/quote]
以太网的传输是靠的MAC地址,封装和重组的过程你具体参考一下RFC的参考资料吧,有得啃的了,好好学习一下包结构
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-03-06 18:16
receive函数好像只负责接收低层的数据包吧,发送是调用ndissend函数吧 [/quote]
没有错呀。。。发送是调用ndissend函数,但是当NDISSEND执行完后,调用完NDISSEND后,数据还是会走RECEIVE函数。。。。所以说不管RECEIVE还是NDISSEND的数据都是走RECEIVE函数。。所以才不好区分呀。。。
slightflying
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2003-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-03-06 10:53
[quote][quote]你得到的是受到的报文还是发送的报文??

如何得到正在往外发送的报文的?


to mikeluo:你的意思 是进来的报文和发出的报文不一样是吗?? [/quote]

如果在协议层里,不管是发送还是接受的数据都会经过receive函数,所以要区分是往外发的,还是接受进来的就不容易了......... [/quote]
receive函数好像只负责接收低层的数据包吧,发送是调用ndissend函数吧
slightflying
slightflying
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2003-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-03-06 10:49
win2000/ntddk/src/network/ndis/packet的例子就可以自己发包,
testapp.c里面处理send时,只给了一个广播的mac地址,这么看来,应该可以自己定义数据报格式了?只要负责接受的一方可以解释?

这个我也试过了,改掉源程序里面那个广播地址为一个已知的MAC地址,我在另一台机上就能收到它发过来的数据包,我现在不明白的地方是如果是大数据量的发送,我要把它封装成多帧,这个封装和重组的过程该怎么做
slightflying
ooze
驱动牛犊
驱动牛犊
  • 注册日期2001-09-26
  • 最后登录2004-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-03-06 10:10
win2000/ntddk/src/network/ndis/packet的例子就可以自己发包,
testapp.c里面处理send时,只给了一个广播的mac地址,这么看来,应该可以自己定义数据报格式了?只要负责接受的一方可以解释?
Be a true hacker of Windows NT alike
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-03-06 09:58
[quote]你得到的是受到的报文还是发送的报文??

如何得到正在往外发送的报文的?


to mikeluo:你的意思 是进来的报文和发出的报文不一样是吗?? [/quote]

如果在协议层里,不管是发送还是接受的数据都会经过receive函数,所以要区分是往外发的,还是接受进来的就不容易了.........
slightflying
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2003-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-03-06 09:31
wincap就是一个很好的例子。
可以自定义发包。
里面有源代码是和自己的应用层直接结合。

哪里有这个源代码下载呀,望大虾告知
slightflying
nicol
驱动大牛
驱动大牛
  • 注册日期2001-11-28
  • 最后登录2009-07-30
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-03-05 16:07
wincap就是一个很好的例子。
可以自定义发包。
里面有源代码是和自己的应用层直接结合。
==寂寞骆驼==
slightflying
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2003-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-03-04 21:58
自定义协议。
在很多的防火墙的控制上都采用了这样的手段。

不知道你的自定义协议要做到什么程度。是要和TDI结合还是直接和自己的应用程序结合。

不管是TDI类还是PACKET类,都可以自己封包。
MINI驱动不会管你传给它的数据包是什么内容。你只需要按照格式把包填充好,然后发给它就可以了。

 

我现在就是这么想,只是不敢肯定而已,谢谢你的指点,我正这么做,我定义的协议可能要绕过TDI,直接和应用程序结合,毕竟TDI我也不熟悉,如果大虾能有好的例子给一个,比如如何封包,我就非常感谢。
slightflying
nicol
驱动大牛
驱动大牛
  • 注册日期2001-11-28
  • 最后登录2009-07-30
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-03-03 16:29
自定义协议。
在很多的防火墙的控制上都采用了这样的手段。

不知道你的自定义协议要做到什么程度。是要和TDI结合还是直接和自己的应用程序结合。

不管是TDI类还是PACKET类,都可以自己封包。
MINI驱动不会管你传给它的数据包是什么内容。你只需要按照格式把包填充好,然后发给它就可以了。

==寂寞骆驼==
slightflying
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2003-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-02-28 15:39
就是就是,给位大虾帮忙思考一下,谢谢先
slightflying
上一页
游客

返回顶部