级别: 中级 【相关文章:Windows常用网络命令】
【扩展阅读:cisco catalyst 6509问】 【扩展信息:昨晚10时全国互联网群发性故障 多省不能】麻利辉
研究生, 电子科技大学计算机学院研究生部 2004 年 11 月 本文将介绍 tun/tap 驱动的使用并分析虚拟网卡 tun/tap 驱动程序在 linux 环境下的设计思路。简介
虚拟网卡tun/tap驱动是一个开源项目,支持很多的类unix平台,openvpn与vtun都是基于它实现隧道包封装。本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在linux环境下的设计思路。tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。利用tun/tap 驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中。开源项目openvpn ( http://openvpn.sourceforge.net)与vtun( http://vtun.sourceforge.net)都是利用tun/tap驱动实现的隧道封装。
使用tun/tap驱动
在linux 2.4内核版本及以后版本中,tun/tap驱动是作为系统默认预先编译进内核中的。在使用之前,确保已经装载了tun/tap模块并建立设备文件: #modprobe tun #mknod /dev/net/tun c 10 200参数c表示是字符设备, 10与200分别是主设备号与次设备号。
这样,我们就可以在程序中使用该驱动了。
使用tun/tap设备的示例程序(摘自openvpn开源项目 http://openvpn.sourceforge.net,tun.c文件)
int open_tun (const char *dev, char *actual, int size) { struct ifreq ifr; int fd; char *device = "/dev/net/tun"; if ((fd = open (device, o_rdwr)) < 0) //创建描述符 msg (m_err, "cannot open tun/tap dev %s", device); memset (&ifr, 0, sizeof (ifr)); ... 下一页