社区
网络编程
帖子详情
高手来谈谈NAT是如何实现的?还有代理ARP、NAT两者的优缺点?
xx2j
2003-09-09 11:22:29
高手来谈谈NAT是如何实现的?
还有代理ARP、NAT两者的优缺点?
...全文
389
14
打赏
收藏
高手来谈谈NAT是如何实现的?还有代理ARP、NAT两者的优缺点?
高手来谈谈NAT是如何实现的? 还有代理ARP、NAT两者的优缺点?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dsend
2003-09-16
打赏
举报
回复
1.1 NDIS中间层驱动程序(NDIS Intermediate Drivers)概述
微软Windows网络驱动程序接口标准(NDIS 4.0)和Windows NT 4.0(SP3)引入了一种新的NDIS驱动程序,它可以嵌在NDIS 传输驱动程序TDI(如,TCP/IP)和底层的NDIS网络接口驱动程序的中间。这种新类型的驱动程序被称为NDIS中间层驱动,如图表 1。NDIS(网络驱动器接口标准)中间层驱动程序在其上边界导出MiniportXxx函数,在其下边界导出ProtocalXxx函数。该驱动程序在其上边界仅提供面向无连接通信支持,而在其下边界,则即可支持面向无连接通信,也可支持面向连接通信。
中间层驱动程序的微端口部分(上边界)必须是非串行的,系统将依赖这些非串行驱动程序,而不是NDIS对MiniportXxx函数的操作进行串行化处理和对内部生成的输出包进行排队操作,这样驱动程序只要保持很小的临界区(每次只能有一个线程执行该代码)就能提供性能良好的全双工操作。但是这些非串行Miniport要受到更多也更严格的设计要求的限制,往往要为此付出更多的调试和测试时间。
中间层驱动程序是一种典型的层次结构程序,它基于一个或多个NDIS NIC驱动程序,其上层是一个向上层提供TDI(传输驱动程序接口)支持的传输驱动程序(也可能是多层结构)。从理论上讲,一个中间层驱动程序也可以是基于其他中间层驱动程序或作为其他中间层驱动程序的低层出现的,尽管这种方案未必能展现更好的性能。
中间层驱动程序的一个示例是LAN仿真中间层驱动程序,其上层是一个早期传输驱动程序,下层是一个非LAN介质的微端口 NIC驱动程序。该驱动程序从上层接收LAN格式的数据包并将其转换为本地网卡的介质格式,然后将其发送到那个NIC的NDIS 微端口。接收数据时,该驱动程序将低层网卡驱动程序送来的数据包转换为LAN兼容格式,最后向上层传输驱动程序提交这些转换过的数据包。
例如,NDISWAN就具有一些上述特征。NDISWAN将数据包从上层的传输LAN格式转换为WAN数据包格式,或者将数据包从低层的网卡驱动WAN格式转换为LAN数据包格式。另外,如果低层NIC硬件不支持这些功能,那么NDISWAN也可提供诸如压缩、加密和端对端协议(PPP)等的数据格式化功能。NDISWAN为在NDIS API和网卡驱动程序之间进行通信提供了一个专用接口,同时,NDISWAN也将协议绑定映射为活动连接请求。
另一个中间层驱动程序的例子是ATM LANE (LAN仿真)驱动程序,它将数据包从上层无连接的传输格式转换为下层面向连接的网卡支持的ATM格式。
图1.1说明了中间层驱动程序结构
图表 1 中间层驱动程序结构
NDIS中间层驱动程序在NDIS中起着转发上层驱动程序送来的数据包,并将其向下层驱动程序发送的接口功能。当中间层驱动程序从下层驱动程序接收到数据包时,它要么调用NdisMXxxIndicateReceive函数,要么调用NdisMindicateReceivePacket函数向上层指示该数据包。
中间层驱动程序通过调用NDIS打开和建立一个对低层NIC驱动程序或者NDIS中间层驱动程序的绑定。中间层驱动程序提供MiniportSetInformation和MiniportQueryInformation函数来处理高层驱动程序的设置和查询请求,某些情况下,可能还要将这些请求向低层NDIS驱动程序进行传递,如果其下边界是面向无连接的可通过调用NidsRequest实现这一功能,如果其下边界是面向连接的则通过调用NidsCoRequest实现该功能。
中间层驱动程序通过调用NDIS提供的函数向网络低层NDIS驱动程序发送数据包。例如,下边界面向无连接的中间层驱动程序必须调用NdisSend或NdisSendPackets来发送数据包或者包数组,而在下边界面向连接的情况下就必须调用NdisCoSendPackets来发送包数组数据包。如果中间层驱动程序是基于非NDIS NIC驱动程序的,那么在调用中间层驱动程序的MiniportSend或Miniport(Co)SendPackets函数之后,发送接口对NDIS将是不透明的。
NDIS提供了一组隐藏低层操作系统细节的NdisXxx函数和宏。例如,中间层驱动程序可以调用NdisMInitializeTimer来创建同步时钟,可以调用NdisInitializeListHead创建链表。中间层驱动程序使用符合NDIS标准的函数,来提高其在支持Win32接口的微软操作系统上的可移植性。
1.2 NDIS中间层驱动程序的用途
NDIS中间层驱动有几个方面的用途,包括:
· 局域网仿真(LAN Emulation) – NDIS中间层驱动可以使一个非局域网NIC驱动(如,ATM)犹如一个局域网NIC驱动(如,Ethernet)。
· 包过滤(Packet Filtering) - 可以拦截和修改高层TDI(传输驱动程序)和底层NIC驱动程序之间的网络包(Packets):
· 通过或过滤掉(Pass/Drop Packets)
· 延迟或重新排序( Delay/Reorder Packets)
· 加密或解密(Packet Encryption/Decryption)
· 压缩或解压(Packet Compression/Decompression)
· 路由包(Route Packets):
· NAT网络地址转换(Network Address Translation)
· LBFO负载平衡和失效替换(Adapter Load Balancing And Fail-Over)
1.3 NDIS中间层驱动程序的开发环境
OS : Microsoft Windows 2000 Server
IDE : Microsoft Visual C++ V6.0
DDK : Windows 2000 Device Drivers Kit
xx2j
2003-09-12
打赏
举报
回复
应该是在ndis层实现才对吧?
xx2j
2003-09-12
打赏
举报
回复
To:phoenixandlinda(会抄程序)
Sygate wingate好象都不是用spi实现的,我用sporder.exe看了一下,它们并没有安装。
费尔防火墙就是用spi实现的,所以用sporder.exe看到。
phoenixandlinda
2003-09-12
打赏
举报
回复
对,SPI只能抓到使用Socket的包,如果要一网打尽必须用NDIS的,关于NDIS你可以到www.driverdevelop.com哪有很多做驱动和系统底层的高手。
xx2j
2003-09-11
打赏
举报
回复
To:phoenixandlinda(会抄程序) 谢谢!
那代理ARP呢?WIN2K有没有办法实现,如何实现。
phoenixandlinda
2003-09-11
打赏
举报
回复
在win2k可用WinSock SPI,在类Unix下用Raw Socket,可以方便的操作IP包。最好亲自动动手,遇到问题再看看别人怎么做的,会更深刻点。
kingzai
2003-09-11
打赏
举报
回复
你去查找一下CSDN网络通讯版有关的帖子,有好几篇都在精华贴。
xx2j
2003-09-11
打赏
举报
回复
sygate是怎么实现的?
phoenixandlinda
2003-09-11
打赏
举报
回复
dsniff中的arpspoof能实现ARP欺骗(也是代理的一部分),dsniff软件可以在下面的网址下载:
http://naughty.monkey.org/~dugsong/dsniff
fanfyj
2003-09-09
打赏
举报
回复
up
xx2j
2003-09-09
打赏
举报
回复
不会没人会吧!
自己顶。
ylc001
2003-09-09
打赏
举报
回复
你自己写,就是改包头咯
或者找LINUX下的IPTABLE的源代码
xx2j
2003-09-09
打赏
举报
回复
to : phoenixandlinda(会抄程序)
NAT的原理我也会,我要的不是原理。我是想知道怎么用代码实现,或有代码download.
phoenixandlinda
2003-09-09
打赏
举报
回复
NAT服务器类似于网关的实现,它同时属于两个或多个网段,当内网有数据要出去时,将内网数据包的IP地址、端口替换成相应网段的自己的IP和端口,数据回来是执行相反过程;外部网络是不能直接访问内部的(除非用端口映射、和反弹端口)。
谈谈
ARP
欺骗那点破事
(一)
ARP
工作原理、
ARP
***分析叙述: 随着网络设备在接入市场的应用也越来越多;同时遇到的问题也越来越多样,其中最让人头疼的就是
ARP
的问题。 众所周知,
ARP
的基本功能就是在以太网环境中,通过目标设备的IP地址...
【转】
谈谈
arp
欺骗的那点破事
有些时候,如用户网络使用windows做
代理
(
NAT
),现在要用一个路由器 、Layer 3Switch(IP地址与网关windows相同)来替换当网关;当两者共存时,就会出现Windows IP地址与路由器、Layer 3 Switch冲突的情况。当然...
Java面试题:面向造火箭看面经
【Java】: 简述 BIO, NIO, AIO 的区别? == 和 equals() 的区别? 简述 Spring AOP 的原理?...各有哪些
优缺点
? 简述乐观锁以及悲观锁的区别以及使用场景、
实现
方式? InnoDB 是如何解决幻读的?
完整版)2022大厂Java八股文面试题库
各有什么
优缺点
?6.说一下什么是事务的ACID属性吧7.事务的隔离级别了解过吗?8.说说InnoDB的索引原理9.说说InnoDB的MVCC机制10.有了解过“回表”的概念吗?什么情况下会出现“回表”?11.MySQL索引的类型12.有做过...
几种LVS负载均衡方式的区别
LVS
实现
服务器集群负载均衡有三种方式,LVS—
NAT
,LVS—DR和LVS-TUN。下面简单
谈谈
这三种方式的区别: LVS-
NAT
: LVS-
NAT
方式的思路很简单,它利用调度服务器实施网络层数据欺骗,它把客户端发送到调度服务器的...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章