阅读:2410回复:14
各位做 NAT 的朋友,你们是怎么处理 MAC 地址的?
我用 Hook NDIS 的方法(想必用 IMD 也一样)得到的包前面还带有物理桢头(含有 MAC 地址信息)。那么也就是说做 NAT 的时候,还要处理 MAC 地址了?不知道你们是怎么处理的,帮帮我吧,这个 NAT 怎么这么难啊!!!
|
|
最新喜欢:![]() |
沙发#
发布于:2002-07-26 11:43
请各位帮帮忙,实在想不通啊,从分层的角度讲传给协议层的应该是剥掉物理桢头的 IP 包啊,可是 MS 实现出来的东西怎么还带着呢?
那就同时也要改物理桢头的信息吧,请各位大侠点拨点拨! |
|
板凳#
发布于:2002-07-26 16:51
已解决,分能不能收回啊?
|
|
地板#
发布于:2002-07-26 17:06
:D
你很有意思! |
|
|
地下室#
发布于:2002-07-26 17:15
啊?我很有意思吗?呵呵,为什么?头都快想破了!
|
|
5楼#
发布于:2002-07-26 18:11
实际上我到现在都看不懂你哪里有问题,
你的问题的叙述方式可能没人能看的懂你那里发生了什么。 我也觉得你挺有意思的。 不管怎样,祝贺你解决了问题。 :) |
|
|
6楼#
发布于:2002-07-26 18:28
呵呵,谢谢大家,看来我的表达能力还有待提高啊。
|
|
7楼#
发布于:2002-07-29 10:16
可否简单讲一讲你的解决方法?
|
|
8楼#
发布于:2002-07-30 11:33
好啊,大家一起交流。
我是用 Hook NDIS 的方法实现的,听说有一种什么“注册假协议”的方法,不过我用的是 Hook_Device_Service 的方法,通过修改 PCAUSA 的 PIM 源代码实现。 |
|
9楼#
发布于:2002-07-30 11:42
NAT是基于IP的~~不需要理会MAC!除非你要做软路由猜需要ARP!但是如果仅仅是做NAT的话不用考虑的这么复杂~~其实你在PROTOCOLRECIVE里面得到的包也是不包含头的偷在HEADERBUFFER里面!事实IMD也是可以做指定协议包的处理的!也就是说你想只得到IP包就不会得到IPX包~~想得到TCP包就不会得到UDP包~~不过是你们看代码看的不够细罢了~~NDIS是提供了这个机制的!不过是以UNDOCUMENT API的形式提供的~~部分机制我已经实验过了~~
|
|
|
10楼#
发布于:2002-07-30 11:44
其实你需要做的就是忽略~~
|
|
|
11楼#
发布于:2002-07-30 12:26
冤枉啊,我看的是够细了,笔记都一大堆了。
那个源代码的注释里也写着“可能接收到非IP包”,也就是说这个代码也没有达到你说的只接收指定包的效果。 是未公开的吗?能不能简单说说? |
|
12楼#
发布于:2002-07-31 00:32
冤枉啊,我看的是够细了,笔记都一大堆了。 我说的是在IMD里面做~~我现在对IMD的兴趣比HOOK大多了!我可以在IMD里面实现许多HOOK能实现的机制~~而HOOK里面却不一定可以实现IMD里面的许多关键机制~~多的我不想说~~但是我告诉你一个大补的函数吧!算你运气好~~ 我只告诉你几个关键的参数~~其他的如果你真的熟悉NDIS的风格我不说你也会~~如果并不熟悉我说了也白说~~其实可能你看到这个函数的定义你应该也知道怎么用了~~ EXPORT VOID NdisSetProtocolFilter( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle,//你绑定的VNIC的句柄 IN RECEIVE_HANDLER ReceiveHandler,//你的PROTOCOLRECIVE函数的指针! IN RECEIVE_PACKET_HANDLER ReceivePacketHandler,//你的PROTOCOLRECIVEPACKET函数的指针! IN NDIS_MEDIUM Medium,//要过滤的载体类型! IN UINT Offset,//最重要的!这个是要过滤的字段的偏移!比如过滤网络层协议[如IP]这里就是13! IN UINT Size,//大小是两个BYTE!用SIZEOF!! IN PUCHAR Pattern//模式!比如0x0800是IP! ); 聪明的人可能会把这个技术用在处理专有协议的VPN上面! 投机取巧的人会用这个来配合数据包过滤! 但都是失是好方法~~除了这个FILTER外还有 EXPORT BOOLEAN EthCreateFilter( IN UINT MaximumMulticastAddresses, IN ETH_ADDRESS_CHANGE AddressChangeAction, IN ETH_FILTER_CHANGE FilterChangeAction, IN ETH_DEFERRED_CLOSE CloseAction, IN PUCHAR AdapterAddress, IN PNDIS_SPIN_LOCK Lock, OUT PETH_FILTER * Filter ); 等很多专有协议过滤的FILTER函数! 但是这些函数并不是你这里所用的上的~~我也就不说了! 我困了~~这几天身心疲惫~~回答这个问题纯粹是为了积德~~哎~~好人总是没好报的~~谁来关心我的心理世界啊?惨~~~~~ |
|
|
13楼#
发布于:2002-07-31 08:43
to .X.T.I.M.:
真不知道怎么感谢你才好!我只能说你这个人太够意思了!!! 其实咱们又不是不食人间烟火的技术疯子,七情六欲的烦心事也寻常的很,只是处世的态度一定要积极一些。 零碎的搬几句座右铭出来; 我不能改变容颜,但我可以展现笑颜。 我不能事事顺利,但我可以事事尽力! |
|
14楼#
发布于:2004-07-01 22:56
to .X.T.I.M.: 我能够改变容颜,能够改变我自己的一切 |
|
|