edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2410回复:14

各位做 NAT 的朋友,你们是怎么处理 MAC 地址的?

楼主#
更多 发布于:2002-07-25 16:34
我用 Hook NDIS 的方法(想必用 IMD 也一样)得到的包前面还带有物理桢头(含有 MAC 地址信息)。那么也就是说做 NAT 的时候,还要处理 MAC 地址了?不知道你们是怎么处理的,帮帮我吧,这个 NAT 怎么这么难啊!!!

最新喜欢:

jzyhummeljzyhum...
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-26 11:43
请各位帮帮忙,实在想不通啊,从分层的角度讲传给协议层的应该是剥掉物理桢头的 IP 包啊,可是 MS 实现出来的东西怎么还带着呢?

那就同时也要改物理桢头的信息吧,请各位大侠点拨点拨!
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-26 16:51
已解决,分能不能收回啊?
kaput
驱动中牛
驱动中牛
  • 注册日期2002-06-26
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-26 17:06
 :D
你很有意思!
天下风云出我辈 一入江湖岁月催 鸿图霸业谈笑中 不胜人生一场醉......
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-26 17:15
啊?我很有意思吗?呵呵,为什么?头都快想破了!
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-26 18:11
实际上我到现在都看不懂你哪里有问题,
你的问题的叙述方式可能没人能看的懂你那里发生了什么。
我也觉得你挺有意思的。
不管怎样,祝贺你解决了问题。   :)
按第一贴的“给分”键,给分。
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-26 18:28
呵呵,谢谢大家,看来我的表达能力还有待提高啊。
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-29 10:16
可否简单讲一讲你的解决方法?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-30 11:33
好啊,大家一起交流。

我是用 Hook NDIS 的方法实现的,听说有一种什么“注册假协议”的方法,不过我用的是 Hook_Device_Service 的方法,通过修改 PCAUSA 的 PIM 源代码实现。
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-30 11:42
NAT是基于IP的~~不需要理会MAC!除非你要做软路由猜需要ARP!但是如果仅仅是做NAT的话不用考虑的这么复杂~~其实你在PROTOCOLRECIVE里面得到的包也是不包含头的偷在HEADERBUFFER里面!事实IMD也是可以做指定协议包的处理的!也就是说你想只得到IP包就不会得到IPX包~~想得到TCP包就不会得到UDP包~~不过是你们看代码看的不够细罢了~~NDIS是提供了这个机制的!不过是以UNDOCUMENT API的形式提供的~~部分机制我已经实验过了~~
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-30 11:44
其实你需要做的就是忽略~~
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-07-30 12:26
冤枉啊,我看的是够细了,笔记都一大堆了。

那个源代码的注释里也写着“可能接收到非IP包”,也就是说这个代码也没有达到你说的只接收指定包的效果。

是未公开的吗?能不能简单说说?
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-07-31 00:32
冤枉啊,我看的是够细了,笔记都一大堆了。

那个源代码的注释里也写着“可能接收到非IP包”,也就是说这个代码也没有达到你说的只接收指定包的效果。

是未公开的吗?能不能简单说说?

我说的是在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函数!
但是这些函数并不是你这里所用的上的~~我也就不说了!
我困了~~这几天身心疲惫~~回答这个问题纯粹是为了积德~~哎~~好人总是没好报的~~谁来关心我的心理世界啊?惨~~~~~
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-07-31 08:43
to .X.T.I.M.:

    真不知道怎么感谢你才好!我只能说你这个人太够意思了!!!

    其实咱们又不是不食人间烟火的技术疯子,七情六欲的烦心事也寻常的很,只是处世的态度一定要积极一些。

零碎的搬几句座右铭出来;

我不能改变容颜,但我可以展现笑颜。
我不能事事顺利,但我可以事事尽力!
IoriKingdom
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2010-04-26
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望23点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-07-01 22:56
to .X.T.I.M.:

    真不知道怎么感谢你才好!我只能说你这个人太够意思了!!!

    其实咱们又不是不食人间烟火的技术疯子,七情六欲的烦心事也寻常的很,只是处世的态度一定要积极一些。

零碎的搬几句座右铭出来;

我不能改变容颜,但我可以展现笑颜。
我不能事事顺利,但我可以事事尽力!


我能够改变容颜,能够改变我自己的一切
天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。
游客

返回顶部