我们在使用GNS3学习网络知识的时候,经常会用到一款体积小巧,但功能强大的 PC仿真软件:VPCS(Virtual PC Simulator),它与GNS3真可谓天作之合。
为了方便大家学习和使用该软件,我查阅了很多外文资料(中文资料很少且介绍浅显),将其翻译为中文登于本帖,甚至在谷歌里找到了可能是该作者写的中文PDF,放在文末供大家下载。
VPCS下载:https://sourceforge.net/projects/vpcs/?source=directory
VPCS可以模拟多达9台PC,当你在Dynamips中研究Cisco或Juniper路由器时,可利用VPCS对其ping或trace路由(例如验证可达性和ACL),也可以ping或trace其他主机/路由器。
VPCS还可以通过UDP管道或Unix Tap接口发送和接受基于TCP和UDP协议的ping包(默认是ICMP协议)。
VPCS不是传统的PC,它只是一个运行在Linux或Windows上的程序,只能使用很少的网络命令,但消耗资源也很少(每个实例仅消耗4MB的RAM),这样你就不用拿路由器或VMware虚拟机来模拟PC去ping了。
VPCS支持DCHP,同时也是Tlenet服务器。
如果在启动时指定了scriptfile(脚本文件),那么vpcs会读取该文件并执行其中的命令;如果没有指定"scriptfile,vpcs将在当前目录读取并执行名为 "startup.vpc "的文件;退出时会把之前打过的命令保存为vpcs.hist,前提是当前目录有写权限。
VPCS在9个连续的UDP端口上监听消息,并在9个连续的 UDP 端口上发送消息。默认情况下,VPC 侦听 UDP 端口 20000到20008,并在UDP端口30000到30008 上发送消息。每个UDP端口对(20000/30000、20001/30001...20008/30008)代表一个虚拟PC,虚拟PC的编号为1到9。
可以从GNS3的设备列表里把VPCS拖入工作区,直接就可以使用,但本文介绍另一种方法:独立使用VPCS,使其与GNS3拓扑里的路由器通信。
进入GNS3安装目录,默认是C:\Program Files\GNS3\vpcs,双击vpcs.exe,进入vpcs的命令行界面,打入问号,能查看到所有支持的命令,翻译如下:
实验开始:有如下拓扑,我们的目标是通过VPCS模拟出2台PC,分别接在2台交换机上互ping:
运行C:\Program Files\GNS3\vpcs\vps.exe,在命令行界面打入show命令:
上图意味着2件事:
1、要发送给VPC的数据连接到本地20000端口;从VPC发送出去的数据连接到本地30000端口。
2、最多虚拟出9台PC,直接输入数字切换。
给VPCS配上地址,再show,可见VPC1已经有了地址:
在GNS3的设备列表里拖出一朵云(注意别和NAT设备的云图标弄混了,两者图标一模一样):
直接点击Add,端口被添加到了右边,可见云的本地端口30000已经被添加,这是VPC要连接到的远程端口,而云的远程口20000正好是VPC的本地端口。现在把交换机和云连接,注意连接到UDP tunnel1:
至此,VPC1可以ping通网关10.0.0.1,也可以ping通直连路由器的下一跳12.0.0.2:
现在配置VPC2。在VPCS里打入2,切换到VPC2,配置地址后再show:
可见2个端口号是20001和30001,于是再拖出一朵云,按照上面的端口号配置:
交换机连接到UDP tunnel2以后,VPC2就可以ping通VPC1了:
最后的拓扑如下,实现了VPCS模拟2台PC互ping的目标:
VPCS的命令行
VPCS启动时的命令行参数解释,例如vpcs -v
OPTIONS
-h, --help
显示命令行选项,然后退出
-v
显示版本信息,然后退出
-R
禁止中继功能
[-i] num
指定VPCS所虚拟的PC的数量,最多9台。如省略本参数,VPCS将以9台虚拟PC启动。如果num为1,就如GNS3调用VPCS时那样,引用其他PC的命令将具有受限选项,并且提示将不显示PC编号。
-p port
以守护进程(daemon process)的身份运行VPCS,在TCP指定的端口上监听。作为守护进程,VPCS不向用户提供命令行接口,但可以通过telnet或netcat(nc)等TCP流应用程序远程访问命令行界面。一旦守护进程启动,就没有终止程序的内部机制,必须通过发送系统信号9来终止程序,通常使用命令kill -9 PID(其中PID是VPCS实例的进程ID)来终止程序
-m num
默认情况下,9个VPC使用9个连续的MAC地址,默认是00:50:79:66:68:00。本选项将num添加到基本MAC地址的最后一个字节。在此过程中,如果任何增量导致最后一个字节超过0xFF,它将增加到0x00。
[-r] FILENAME
读取和执行脚本。
如果指定了FILENAME,VPCS在启动时会读取并执行FILENAME中的命令。FILENAME必须是VPCS脚本文件格式。默认情况下,如果启动VPCS的目录中存在一个名为startup.vpc的文件,那么当VPCS启动时将被读取并执行。如果最后一个参数是 FILENAME,那么 -r 选项是可选的。
-e
Tap模式(仅Linux,使用 /dev/tapx)。
在支持/dev/tapx接口(Unix/Linux)的系统上,以tap模式而不是UDP模式运行VPCS。在tap模式下,IP数据包通过 /dev/tapx 接口发送和接收,而不是通过UDP流。通常情况下,/dev/tapx接口只对root用户开放,这意味着VPCS也需要以root用户(sudo vpcs -e)才能使用tap模式。
[-u]
UDP模式。这是默认选项,不是必需的,但与-e选项关联时才包含该选项。默认情况下,VPCS会在指定的UDP端口发送和接收IP数据包。默认侦听UDP端口20000,发送到端口127.0.0.1:30000。侦听和发送端口可以使用-s,-c和-t选项进行设置。
UDP Mode Options
-s port
本地UDP端口,默认20000。
port 指定了VPCS用来监听消息的端口号。默认情况下,VPCS使用UDP端口20000到20008来监听消息。通过使用 -s 选项改变VPCS监听的端口,会导致从端口指定的端口开始使用9个连续的 UDP 端口。
-c port
远程UDP端口。VPCS将数据包串流到从127.0.0.1:30000开始的9个UDP端口。本选项允许你将数据包串流到从端口指定的基本端口号开始的另一组9个端口。
-t ip
远程主机IP。默认情况下,VPCS将数据包传输到从127.0.0.1:30000开始的9个UDP端口。本选项允许您将数据包流式传输到由IPv4地址ip指定的远程主机。通常情况下,远程主机将运行 dynamips,其云连接配置为连接到该主机的IP地址。
TAB Mode Options
-d device
设备名称,只有当-i设置为1时才有效。
Hypervisor Mode Options
-H port
以hypervisor模式运行,监听由port指定的TCP端口。在hypervisor模式下,你可以用telnet连接这个控制端口,启动或停止VPCS实例。
例子
无命令行选项
如果不带任何参数启动VPCS,VPCS将在当前目录中查找脚本startup.vpc。如存在即运行。命令行:vpcs
使用另一个文件启动VPCS
若以名为alternate.vpc 的脚本文件启动VPCS,请使用文件名作为参数:vpcs alternate.vpc
运行9台以上的虚拟PC
假设需要9台以上的虚拟PC,所以你希望在本地主机上运行VPCS的第2个实例,你必须考虑:
1、第2个实例的VPCS的MAC地址必须不同。
2、第2个实例的“local”(本地)或监听UDP端口号必须与第1个实例不同。
3、第2个实例的远程UDP端口号必须与第1个实例不同。
因为默认的本地监听端口是20000,默认的远程端口是30000,因此需要用本地监听端口20009(或更高)和远程端口30009(或更高)来启动VPCS。你还希望基本MAC地址至少偏移9以避免任何冲突。在这种情况下,你将使用下命令:
vpcs -s 20009 -c 30009 -m 9
运行9台以上虚拟机的更好方法是使用Hypervisor模式。在Hypervisor模式下,vpcs将自动处理MAC地址和UDP端口号的递增,因此这里没有冲突。
基本接口
VPCS为用户提供一个命令行界面(除非 -p 选项调用了守护模式)。界面提示通过括号中的VPC号指示9台虚拟机中的哪个当前有焦点。如:
VPCS[1]>
括号内的数字1表示VPC 具有焦点,任何产生的流量都将从VPC 1发送,基本命令将与VPC 1相关。
注意:使用 -i 1选项启动时,VPC1始终具有焦点,提示符不显示括号内的 VPC号,例如:
VPCS>
支持的基本命令:
?
显示帮助
! COMMAND [ARG ...]
使用可选的arg(S)作为参数调用OS命令。
digit
直接输入数字以切换到VPC号,范围1至9。
ARP [digit|all]
是show arp的简写,显示VPC号的arp表(默认为当前VPC)或所有的VPC的arp表。
clear ip|ipv6|arp|neighbor|hist
清空IPv4/IPv6、arp/邻居缓存、命令行历史记录。
例子:clear ip #清空了地址/掩码,网关,DNS,DHCP
dhcp [OPTIONS]
是ip dhcp的简写,尝试通过DHCP获取IPv4地址、掩码、网关和DNS。
disconnect
退出telnet会话(守护模式)
echo TEXT
输出文本
help
显示帮助
history
是show history的简写,显示历史记录。
IP ARG .... [OPTION] ....
配置当前VPC的IP地址。
ARG ......:
地址 [掩码] [网关]
地址 [网关] [掩码]
设置VPC的IP,默认网关和网络掩码。默认IPv4掩码是/24,IPv6是/64。
例如:IP 10.1.1.1.1.70/26 10.1.1.1.1.65
将VPC的IP设置为10.1.1.70,网关设置为10.1.1.65,掩码设置为255.255.255.192
在tap模式下,tapx的ip是子网的最大主机ID。在上面的例子中,tapx的
ip是10.1.1.1.126。掩码可以写成 /26、26、255.255.255.192。
auto 尝试使用SLAAC获取IPv6地址、掩码和网关。
dhcp [OPTION] 试图通过DHCP获取IPv4地址、掩码、网关和DNS
-d 显示DHCP数据包解码
-r 续订DHCP租约
-x 释放DHCP租约
dns ip 设置DNS服务器的ip,如果ip为“0”则删除。
domain NAME 将本地域名设置为NAME。当使用支持名字的命令
时,域名将被添加到主机名中。例如:域名设置为example.com,
那么命令ping abcd将导致VPCS尝试解析abcd.example.com这个
名字。
load [FILENAME]
从FILENAME加载配置/脚本文件。如果文件名以“.vpc”结尾,则可以省略“.vpc”。如果省略了FILENAME,那么startup.vpc 将被加载(如果存在)。加载文件时,文件的每一行都作为VPCS命令执行;如果echo标志的状态为on,那么命令在执行前会回传到控制台,但以下情况除外:
⏲ 如果命令以“ @”符号为前缀,例如:@set echo color red
⏲ 如果是echo命令
⏲ 如果是sleep命令
注意:如果echo为on,命令sleep 0将被回显;Ctrl+C可中断运行中的脚本。
请参见set echo和show echo。
ping HOST [OPTION ...]
用ICMP(默认值)或TCP/UDP来ping网络上的HOST,HOST可以是一个IP地址或名称。
Options:
-1 ICMP模式,默认
-2 UDP模式
-3 TCP模式
-c count 包数,默认为5
-D 设置 "不分段"位
-f FLAG 设置Tcp头部FLAG| C| E | U | A | P | R | S | F
Bits| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
-i ms 发送的每个数据包之间等待ms毫秒
-l size 数据大小
-P protocol 在ping数据包中使用IP协议
1 - ICMP(默认),17 - UDP,6 - TCP
-p port 目的端口
-s port 源端口
-t ttl 设置ttl,默认为64
-t 发送数据包,直到被Ctrl+C打断为止
-w ms 等待毫秒数以接收响应
注1. 使用名称需要设置DNS。
注2. 使用Ctrl+C停止该命令。
quit
退出本程序。
relay ARG ...
配置UDP端口之间的数据包中继。
relay命令使VPCS成为虚拟配线架,可以在其中使用本命令动态改变连接。使用VPCS作为虚拟配线架需要三个步骤。
1. 必须使用relay port port命令定义一个relay hub port。
2. 远程NIO_UDP连接(GNS3中的云连接)使用这个hub port作为远程端口,以确保每个NIO_UDP连接都有一个唯一的本地端口。本地端口号将被用来 "修补 "连接)。VPC 实例可以使用命令设置 rport port 作为其远程端口。
3. 使用以下命令完成 "打补丁"。
relay add [ip1:]port1 [ip2:]port2,port1和port2是步骤2中使用的本地端口号。
ARG:
add [ip1:]port1 [ip2:]port2
中转IP1和IP2之间的数据包
del [ip1:]port1 [ip2:]port2
删除中继规则
DEL id
删除中继规则
dump [on|off]
将中继数据包转发到文件中
port port
设置中继HUB端口
show
显示中继规则
注:IP1和IP2默认为127.0.0.1。
rlogin [ip] port
远程登录到ip主机上的端口(相对于主机PC),例如:
要连接到运行在本主机的端口2000上的虚拟路由器的控制台,请使用rlogin 2000,要远程登录到远程主机10.1.1.1的端口2004,请使用rlogin 10.1.1.1 2004
save [FILENAME[.vpc]]
将配置保存到脚本文件:FILENAME.vpc。如果文件名中没有“.”,则添加“.vpc”扩展名。如果省略文件名,则配置将保存到startup.vpc。
set ARG ...
设置主机名,连接的端口,ipfrag状态,dump选项和echo选项
ARG:
dump FLAG[[FLAG]...] 设置此VPC的packet dump flags(数据包转储标志)
FLAG:
all 匹配所有的数据包(包括进入的包)
detail 显示协议
file 将数据包转储到文件'vpcs[id]_yyyymmddHHMMSS.pcap'
off 清除所有FLAG
mac 显示硬件MAC地址
raw 显示前40个字节
举例:set dump raw #显示数据包的前40字节
ping 23.0.0.1 #发出ICMP包
发出和回应的包结构如下:
echo on|off|color ... 设置执行脚本文件时使用的echo flag(回显标志)的状态,或使用可选的BGCOLOR将文本的颜色设置为FGCOLOR。set echo color clear 命令会将颜色重置为默认值。颜色列表:black, red, green, yellow, blue, magenta, cyan, white
lport port 设置本地端口
mtu value 设置MTU值
pcname NAME 设置当前VPC的主机名
rport port 远程端口
rhost ip 远程主机的IPv4地址
show [ARG ...]
显示ARG指定的信息。
ARG:
arp [digit|all] 显示某个VPC或所有VPC网络的arp表
dump [digit|all] 显示某个VPC或所有VPC的dump flags(转储标志)
echo 显示echo flag(回显标志)的状态,参见set echo ?
history 列出命令历史记录
ip [digit|all] 显示某个VPC的IPv4详细信息,包括VPC名称、IP地址、
掩码、网关、DNS、MAC、lport、rhost:rport和MTU
ipv6 [digit|all] 显示IPV6的详细信息,其余同上
i 显示接口信息
version 显示版本信息
注1:如果没有ARG,则显示所有VPC的关键信息。
注2:如果没有给出arp/dump/ip/ipv6参数,将显示当前VPC的信息。
sleep [seconds] [TEXT]
打印文本并暂停脚本执行的秒数,如果值为零或不存在,就按键继续。未提供任何参数时的默认文本:Press any key to continue。
trace HOST[OPTION ...]
打印数据包到网络主机的路径,主机可以是ip地址或名称。
Options:
-P protocol 跟踪使用IP协议的数据包
1-icmp,17-udp(默认),6-tcp
-m ttl 最大的ttl,默认为8
注1:使用名称需要设置DNS。
注2:使用Ctrl + C停止命令。
version
show version的简写
VPCS script file format(脚本文件格式)
包含有效VPCS命令的任何文本文件都可以用作vpcs脚本文件。
以#字符开头的行将被视为注释而被忽略。
视echo flag的状态,在执行脚本时可以显示每行的命令,也可不显示,默认是echo off状态,也就是不显示命令行。
以@为前缀的命令不会回显。
除了始终回显的sleep 0命令外,echo和sleep命令从不回显。
命令文件可以利用echo和sleep命令来创建某种形式的交互式脚本。
脚本文件可以随时按Ctrl + c中止执行,但由于BUG的存在,不能在脚本里存在ping HOST -t命令,因为当按下Ctrl + c停止ping时,脚本也会被中止执行。
HYPERVISOR INTERFACE
当使用-H port选项启动vpcs时,vpcs将在hypervisor模式下作为守护进程启动。
要访问VPCS hypervisor界面,您需要启动telnet会话,以使用-H选项指定的端口号。例如,如果使用vpcs -H 20000命令启动VPCS,就会在本地IP地址(127.0.0.1)上打开一个端口号为20000的telnet会话。
该模式将提供一个替代接口,以允许用户创建和终止多个VPCS会话,这些会话始终作为守护进程运行,并且必须通过外部telnet应用程序,或使用vpcs hypervisor会话中的telnet或rlogin命令来访问。
在VPCS hypervisor模式下,支持的命令是:
help | ?
显示帮助
disconnect
退出telnet会话
list
列出vpcs的进程和id
quit [-f]
停止所有vpcs进程和hypervisor,-f强制退出而不提示
stop id
停止id号对应的vpcs进程
rlogin [ip] port
与telnet相同
telnet [ip] port
Telnet到ip的端口号 (默认127.0.0.1)
vpcs [parameters]
Start vpcs daemon with parameters.
使用参数启动vpcs守护程序
典型的VPCS hypervisor会话可能会运行以下内容:
$ vpcs -H 20000
~$ telnet 127.0.0.1 20000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HV > vpcs
100-VPCS started with -p 20001 -s 20000 -c 30000
HV > rlogin 20001
Connect 127.0.0.1:20001, press Ctrl+X to quit
NOTES: you will be back to the starting point, NOT THE LAST,
if using Ctrl+X to quit.
Welcome to Virtual PC Simulator, ...
VPCS[1] disconnect
Good-bye
Disconnected from 127.0.0.1:20001
HV >
注意,上例的VPCS实例从hypervisor接口中启动时,它产生了一个VPCS守护进程,在TCP端口20001上监听,为了访问这个进程,使用rlogin命令在20001端口与该实例发起会话。但还可以在另一个shell实例的127.0.0.1 20001端口启动另一个独立的telnet会话。
注意:一旦你完成了vpcs会话,你可以使用disconnect命令或使用Ctrl+X键组合退出。如果你有嵌套的rlogin会话,Ctrl+X会返回到hypervisor,disconnect会让你在嵌套中返回一级。
BUGS
IPv6只实现了基本功能,并不完整。
ping HOST -t命令(必须用Ctrl+c终止)不能在vpcs脚本文件中使用,因为当按Ctrl+c停止ping时,也会中止脚本文件的执行。
如有问题、bug、疑问、需要改进、补丁等,请发邮件给作者。
作者:Paul Meng
文档作者:Chris Welsh
版权声明
VPCS是免费的软件,根据 "BSD "许可证的条款发布。
可以在vpcs.sf.net上找到源代码和许可证。
更多信息请访问wiki.freecode.com.cn。
最后,从google找到了疑似作者本人写的中文PDF说明文档,传到了网盘。
链接: https://pan.baidu.com/s/1qZqOgOyGREa6nMGJ5D9fhA 提取码: fsdr