ON_MESSAGE使用方法
ON_MESSAGE 响应的是自定义消息,有关自定义消息的处理请看如下步骤:
定义消息
在CCDlg类的头文件中加入如下代码:
#define WM_CUSTOMIZE WM_USER+1
头文件中加入Customize的声明:
afx_msg LRESULT Customize(WPARAM wParam, LPARAM lParam);
cpp文件中加入消息的注
ON_MESSAGE(WM_CUSTOMIZE, Customize)
加入消息响应函数实现
在CCDlg类的实现文件中加入消息响应函数的实现部分,代码如下:
void CCDlg::Customize(WPARAM wParam, LPARAM lParam)
{
CString strTittle;
strTittle.Format("自定义消息参数:x=%d,y=%d",wParam,lParam);
SetWindowText(strTittle);
}
显式地发送消息
在主框架的 帮助 主菜单中加入 自定义消息 子菜单,其ID设为ID_CUSTOMIZE,通过类向导响应该命令,函数名默认。其函数体如下:
void CMainFrame::OnCustomize()
{
POINT pos;
//将消息参数定义为屏幕坐标值
GetCursorPos(&pos);
pdlg->SendMessage(WM_CUSTOMIZE,(UINT)pos.x,pos.y);
}
MFC个人问答
MDI 程序,如何在启动时不自动建立新文档?
BOOL CPoissonApp::InitInstance()
{
......
CCommandLineInfo cmdInfo;
// Alter behaviour to not open window immediately
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
}
如何启动窗口时,主窗口和子窗口就最大化?
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT cs)
{
cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE | WS_THICKFRAME |
WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
return TRUE;
}
BOOL CPoissonApp::InitInstance()
{
......
// The main window has been initialized, so show and update it.
pMainFrame- ShowWindow(SW_SHOWMAXIMIZED);//正常显示改为 SW_SHOWNORMAL
pMainFrame- UpdateWindow();
return TRUE;
}
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT cs)
{
......
cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU |
FWS_ADDTOTITLE | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
return TRUE;
}
请问如何使用代码改变子窗口的大小?
在用MFC库开发的应用程序中, 视图是被框架窗口所围绕的一个子窗口。为了改变一个视图的大小,可以通过在视图的InitialUpdate(...)
中调用函数GetParentFrame()
来得到框架窗口的指针,然后调用函数MoveWindow()
/SetWindowPos()
来改变父窗口的大小。当父框架窗口改变大小时,视图也会自动地改变大小来适应父窗口。如下:
CFrameWnd *pFrame = this->GetParentFrame();
if (pFrame)
{
pFrame->SetWindowPos(NULL, 0, 0, 160, 160, SWP_NOZORDER);
}
ON_UPDATE_COMMAND_UI_RANGE
的用法
afx_msg void OnUpdateMenu(CCmdUI *pCmdUI);
在 cpp 文件 messgae map 处添加 ON_UPDATE_COMMAND_UI_RANGE( id2, id2, OnUpdateMenu)
,id1
和 id2
是你的菜单项的起始和最终ID,在 OnUpdateMenu(CCmdUI *pCmdUI)
中通过判断pCmdUI
的m_nID
或m_nIndex
来实现你自己的逻辑。
为 MFC 程序添加 XP 主题
C***App
的cpp中:
BOOL CFaceliftApp::InitInstance()
{
// 主题风格
InitCommonControls();
}
参考
http://hi.baidu.com/shilyx/blog/item/837fa5ec7babc62663d09f3f.html *
War has changed(MGS4)
War Has Changed
It’s an endless series of proxy battles,fought by mercenaries and machines war,and its vast consumption of human life, has become a rational,well-oiled business transaction.
War has changed.
Id-tagged soldiers carry id-tagged weapons, use id-tagged gear, nanomachines inside their bodies enhance and regulate their actions.
genetic control,information control, emotion control,battelfield control; everything is monitored, and kept under control.
War has changed.
The age of deterrence is now the age of control,averting catastrophe from weapons of mass destruction and he who controls the battlefield, controls history.
War has changed.
When the battle field is under total control, war becomes routine.
From MGS official trailer
Linux快速编辑 Shell 命令行
前言
快速编辑 Shell 命令行
想起听得最多的就是 *nux 的初学者说最烦就是 Linux / Unix 的命令行,所以就有了这个题目。如果你是个性急的人可以先尝试下文章结尾的综合练习体会一下 Shell 的快捷键,也许这样再看全文会更有趣。
其实,命令行适应了,可能比图形界面更有效率。至少对我来说是这样,我现在一看见那些所谓的 IDE 就有眼花缭乱感觉,真正用来写代码的面积都被挤到只有一包烟那么大了,呵呵。有时为找个选项花很长时间找对话框,也很痛苦吧。
为什么那么多人害怕命令行呢?
我想最大的问题就是很多人觉得命令行的输入和编辑都很“慢”,很低效。但是对于 Linux / Unix 这类从内核得到整体架构,再到哪怕是最小的一个应用小软件都以文本来支撑的系统,没有娴熟的命令行技巧确实是玩不转的。希望本文能对你提高命令行使用效率有帮助。
但是由于 Linux / Unix 的发行版实在是太多,Shell 的主流版本也有好几个,所以,本文所说的内容,可能和你的系统有出入,但是思想是一样的,在你自己的平台上摸索一下,你也会找到你的平台太下编辑命令行的技巧和规律。
另外,Shell 的很多快捷键和 VIM, Emacs 的快捷键是相通的,所以,熟练使用 Shell 快捷键,对适应 *nux 下的其他软件有很好的启示作用。
命令行的技巧除了本文提到的,还有很多,你可以自己慢慢积累,收集和体会。当然如果你经常需要输入很繁琐的命令,那么建议你自己写 Shell 脚本,定义 function, alias 等技巧来实现。
我目前使用的系统配置
内核: 2.6.14-gentoo-r5;
系统发行版: Gentoo Linux – 2005.1;
Shell 版本: Gun bash – 3.00.16
X Server: Xorg – 6.8.2;
窗口系统: Gnome – 2.10.1;
终端: gnome-terminal – 2.10.0;
现在就开始吧
一、自动补齐:[Tab]
这个技巧很多人都应该会了,就是当输入命令,目录或者是文件名的时候按 [Tab] 键。系统就会帮你补齐可能要输入的东西,如果有多个选择系统会列表出来。你可以看清楚之后再多输入一个或多个 charactor ,再按[Tab]。
实验:
$ ec
按[Tab], 补齐为:
$ echo
二、查找和执行历史命令:[Ctrl + r], [Ctrl + p], [Ctrl + n]
在终端中按捉 [Ctrl] 键的同时 [r] 键,出现提示:(reverse-i-search), 此时你尝试一下输入你以前输入过的命令,当你每输入一个字符的时候,终端都会滚动显示你的历史命令。当显示到你想找的合适的历史命令的时候,直接[Enter],就执行了历史命令。
另外, [Ctrl + p] 或 [Ctrl + n] 快速向前或向后滚动查找一个历史命令,对于快速提取刚刚执行过不久的命令很有用。
实验:
$ echo hello, world [Enter]
$ hello, world
[Ctrl + r ] (接着输入 echo)
(reverse-i-search)`ch’: echo hello,world [Enter]
$hello,world
quot三、取消本次命令输入:[Ctrl + c]
这个快捷键可以使你从一个可能你已经厌烦了的命令中安全地退出!!也许是个不值一提的小技巧,但是经验告诉我它很有用。很多 Unix 初学者会习惯性地按 [Enter] 以摆脱困境,但是说不定就会发生灾难性的事件,譬如删除了一个重要的配置文件:(
四、光标跳转快捷键:
为了方便大家记忆,加点英语助记语在后面 :)
[Ctrl + a] 跳转至命令行首 Ahead of line
[Ctrl + e] 跳转至命令行尾 End of line
[Ctrl + f] 向前跳转一个字符 jump Forward one character
[Ctrl + b] 向后跳转一个字符 jump Backward one character
[Alt + f] 向前跳转到下一个字的第一个字符
[Alt + b] 向后跳转到下一个字的第一个字符
五、编辑命令的快捷键:
[Ctrl + w] 向后删除一个字,用来对付刚刚输入的错误字很有用
[Ctrl + u] 从光标当前位置删除所有字符至行首
[Ctrl + k] 从光标当前位置删除所有字符至行尾
[Ctrl + d] 删除光标当前位置的字符
[Ctrl + y] 粘贴最后一个被删除的字
[Alt + d] 删除从光标当前位置,到当前字的结尾字符
六、配置提示;
如果你是用 Gnome 下的终端窗口 gnome-teminal ,上面的 Gnu Shell 快捷键会跟 Gnome 的窗口快捷键有冲突。
那么你需要做如下配置:
在 gnome-terminal 的菜单栏中选 Edit -] Keyboard Shortcuts … 打开 Keyboard Shortcuts 对话框,并勾选下面两个复选项 Disable all menu access keys (such as Alt+f to open File menu) Disable menu shortcut key (F10 by default) 至于 KDE 下应该怎么配 KDE 的终端窗口,请熟悉 KDE 的朋友补充一下,我很久没用 KDE 了,也没装。
quot七、综合练习;
上面列举的快捷键,练习2~3天应该就能熟练,为了大家快速理解和记忆,我们来做个小小的综合练习: 第一步 :echo
$ echo hello, world. [Enter]
我们先输入echo hello, world 这个命令,然后回车,也就看到了终端的输出:
$ hello, world. quot第二步 :[Ctrl + r]
我们试试找出历史命令 echo hello, world. ,这时,我们按[e],[c],[h]这三个键,这个历史命令大概已经找到了,
终端的显示应该是这样:
(reverse-i-search)`ech’: echo hello,world. 现在,如果[Enter]就会再一次执行这个命令,但我们现在来练习一下命令行的编辑。 quot第三步 :[Ctrl + a]
这样,我们就取出了历史命令 echo hello, world. ,并且将光标定位到行首,此时,光标应该在 echo 命令的 e 字符上高亮。
终端的显示应该是这样:
$ echo hello,world quot第四步 :[Alt + d]
删除了命令 echo, 并且光标仍然在行首,终端显示为:
$ hello, world. quot第五步 :输入命令 printf 我们尝试一下用 Posix 的系统调用 printf 来替代 shell 命令 echo,输入[p][r][i][n][t][f],此时终端显示为:
$ printf hello, world. 并且光标在 f 字符后面高亮。 quot第六步 :[Ctrl + e]
光标跳转到命令行尾部。 第七步 :[Ctrl + b]
光标后退一个字符,此时光标应处于后双引号 处高亮。 quot第八步 :输入换行转义符 \n 输入[][n] ,此时的终端显示应该为:
$ printf hello, world.\n 可以[Enter]执行了。
quot八、关于本文;
当你熟练的时候,上面的步骤应该在20秒之内就完成了吧,希望大家都能成为命令行的高手!!!
电子邮件服务的配置与应用
测试环境
VirtualBox中的Arch和主机XP,其中arch中配置有DNS、postfix、imapd,有关DNS配置见前面日志
软件介绍
- Arch中,postfix提供SMTP协议服务,imapd提供imap/pop服务
- XP中,foxmail提供邮件收发
网络环境
Arch: IP 为192.168.0.98
Postfix的配置
配置文件为 /etc/postfix/main.cfg ,通过postconf -n
得到,只要手动配置几项就好了,不配置的都按默认。
alias_database = $alias_map
alias_maps = hash:/etc/postfix/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/lib/postfix
debug_peer_level = 2
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailq_path = /usr/bin/mailq
manpage_directory = /usr/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, mail.$mydomain, www.$mydomain, ftp.$mydomain # 服务范围
mydomain = maxint.org # 域名配置
myhostname = mail.maxint.org # 主机名
myorigin = $mydomain # 后面的部分,与域名同比较好,当然与主机名同也行
newaliases_path = /usr/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = no
relay_domains = $mydestination # 邮件转发范围
sample_directory = /etc/postfix/sample
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) # 命令行登录时的提示信息
smtpd_client_restrictions = permit_sasl_authenticated
# 禁止未经过认证的客户端向postfix发起SMTP连接
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
# 对客户端发来的邮件进行过滤
smtpd_sasl_auth_enable = yes
# 启用sasl认证,对阻止广告和垃圾信息有一定作用,现在对作用实现原理还不清楚
smtpd_sasl_local_domain = ''
smtpd_sasl_security_options = noanonymous
# 禁止匿名登录方式
unknown_local_recipient_reject_code = 550
IMAPD 服务的启动
imapd的启动比较特殊,它是通过xinetd来启动的,要配置下xinetd才能实现效果。过程很简单明了,只要修改/etc/xinetd.d/
目录下的对应文件imap、ipop2、ipop3是行了。
service imap2
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/imapd
log_on_success += HOST DURATION
log_on_failure += HOST
disable =no本来是yes }
测试方法
在主机XP用foxmail收发,账号就是Arch上的用户账号,如 root@maxint.org,maxint@maxint.org。
命令行下的测试
XP下
telnet mail.maxint.org 25
再用foxmail收取
与外部的邮件收发测试
[root@arch1 ~]# telnet localhost 25 Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 mail.maxint.org ESMTP Postfix (2.4.6)
mail from:maxint@maxint.org
250 2.1.0 Ok
rcpt to:maxint@zju.edu.cn
250 2.1.5 Ok
data
354 End data with<CR><LF>.<CR><LF>mail from maxint.org
.
250 2.0.0 Ok: queued as 30950FBEC
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@arch1 ~]# tail /var/log/mail.log May 2 17:41:29 arch1 postfix/smtpd[3188]: connect from localhost.localdomain[127.0.0.1]
May 2 17:41:35 arch1 postfix/smtpd[3188]: disconnect from localhost.localdomain[127.0.0.1]
May 2 17:42:06 arch1 postfix/smtpd[3188]: warning: SASL authentication failure: OTP: auxprop backend can't store properties
May 2 17:42:06 arch1 postfix/smtpd[3188]: connect from localhost.localdomain[127.0.0.1]
May 2 17:42:43 arch1 postfix/smtpd[3188]: 30950FBEC: client=localhost.localdomain[127.0.0.1]
May 2 17:43:00 arch1 postfix/cleanup[3194]: 30950FBEC: message-id=<20080502174243.30950FBEC@mail.maxint.org>May 2 17:43:00 arch1 postfix/qmgr[3136]: 30950FBEC: from=<maxint@maxint.org>, size=373, nrcpt=1 (queue active)
May 2 17:43:01 arch1 postfix/smtp[3195]: 30950FBEC: to=<maxint@zju.edu.cn>, relay=zjuem.zju.edu.cn[10.10.8.55]:25, delay=43, delays=41/0.02/0.28/0.81, dsn=2.0.0, status=sent (250 OK:has queued)
May 2 17:43:01 arch1 postfix/qmgr[3136]: 30950FBEC: removed
May 2 17:43:06 arch1 postfix/smtpd[3188]: disconnect from localhost.localdomain[127.0.0.1]
WebMail的安装
我选择简洁实用的小松鼠网页电子邮件系统(squirrelmail),具体安装与配置就不记录了,详情参看安装目录下的INSTALL和README。要注意的是存放数据的data和attach文件夹,httpd用户可写的权限,httpd用户是哪个,可由httpd.conf文件指定,如我指定的是:
User nobody
Group nobody
data和attach文件夹的位置由,可以通过运行 path/to/squirrqlmail/config/conf.pl 脚本配置,值得一提的是squirrelmail还附带了很多小插件,可以极大地丰富WebMail的功能,更多插件可以到官方下载,而这一切都是FREE的!!
Linux下的DHCP服务配置
测试环境
VirtualBox 下的两台 Archlinux,网络配置都是 Host Interface Networking,在WINDOWS下桥接两虚拟网卡(如下图),网络桥IP为192.168.0.1,guests以这个 IP 为网关,具体实现见前面的日志。有关路由、子网掩码、广播地址、dhcp、DNS的知识,可以去百度百科查看。
guests(Arch)的网络配置:
Arch1:IP为192.168.0.98,是DNS服务器,也是DHCP服务器。
Arch2:eth0设为dhcp。
/etc/dhcpd.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name"maxint.org";
option domain-name-servers 192.168.0.98,10.0.2.3 ;
default-lease-time 600;
max-lease-time 7200;
# Use this to enble / disable dynamic dns updates globally.
ddns-update-style none;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
slightly different configuration for an internal subnet.
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.26 192.168.0.30; # dhcp分配的IP地址范围
option routers 192.168.0.1; # 默认路由(网关)
option subnet-mask 255.255.255.0;# 子网掩码
# option domain-name"maxint.org"; # 域名服务器的域名
# option domain-name-servers 192.168.0.98,10.0.2.3; # 域名服务器地址
option broadcast-address 192.168.0.255; # 广播地址
default-lease-time 600;
max-lease-time 7200;
}
测试技巧
ip route # 查看路由信息
/etc/rc.d/network restart # 重启网络,再ifconfig检查IP分配情况
在Host上,通过/var/log/messages.log(或/var/dhcp/dhcpd.lease)文件查看dhcpd服务工作情况,这里也可以看到IP分配情况。 在Guest上,通过/etc/resolv.conf文件查看DNS分配。
vsftpd的配置
Linux下常用的ftp服务器软件有wu-ftpd、proftpd、pure-ftpd和vsftpd,其中:
- wu-ftpd:年代久远了,已无人维护,漏洞多,不推荐使用。
- proftpd:配置类Apache ,支持虚拟目录
- pure-ftpd:不是很清楚
- vsftpd:本文的主角,不支持虚拟目录,但配置简单,如使用好功能也很强大
配置文件 (/etc/vsftpd.conf)
# Example config file /etc/vsftpd.conf
#
# Use this to use vsftpd in standalone mode, otherwise it runs through (x)inetd
listen=YESarch中默认配置文件,只要开启这个选项就能打开FTP服务 #
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
#anon_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using"root"for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format
#xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command"SIZE /big/file"in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_local_user=YES默认对本地用户开启chroot #chroot_list_enable=YES对列表中的本地用户开启chroot # (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the"-R"option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as"ncftp"and"mirror"assume
# the presence of the"-R"option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
guest_enable=YES虚拟帐户开启,配合PAM的pam_list_file.so模块使用,保护系统账号 guest_username=vuser
/etc/pam.d/ftp
#%PAM-1.0
#auth required pam_securetty.so #Disable remote root
#auth required pam_listfile.so item=user sense=allow file=/etc/ftpusers onerr=succeed
#auth required pam_pwdb.so shadow nullok
#auth required pam_shells.so
#account required pam_pwdb.so
#session required pam_pwdb.so
auth required pam_userdb.so db=/etc/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd_login
建立虚拟账户数据库
#vi users.txt
tom
123
jack
123这是密码
#db_load -T -t hash -f users.txt /etc/vsftpd_login.db
关于VirtualBox虚拟机的网络配置
VB而不用VM(vmware)呢?VM的网络配置不是比VB的简单得多吗?其实没什么在原因,只是最近对开源的东西热情高涨,且VB的体积比VM小得多,安装文件VB:17M,而VM6:130M+,我得承认我是洁癖男(嘿嘿~所以才喜欢Arch)。好,现在进入正题。
要求
guest对host可见,这样host就可以用ssh登录guest了,guest通过NAT与host共享上网
其中host上的external1设置:
guest(Archlinux)配置(/etc/rc.conf部分):
lo="lo 127.0.0.1"eth0="eth0 192.168.0.98 netmask 255.255.255.0 broadcast 192.168.0.255"eth1="dhcp"INTERFACES=(lo eth0 eth1)
#
# Routes to start at boot-up (in this order)
# Declare each route then list in ROUTES
# - prefix an entry in ROUTES with a ! to disable it
#
gateway="default gw 192.168.0.2"ROUTES=(!gateway)
这样guest通过192.168.0.2访问host,host通过192.168.0.98访问guest
两guest组网互连
guests的配置与上面相同,在WIN的网络连接窗口里,选中两虚拟网卡,再右击桥接即可,可实现guests、host互可见,不过guests对外部网络还是不可见的,到现在我还不知道有什么方法实现。
Linux主机下的桥接方式
还不大明白原理。
网桥工作在TCP/IP的第二层,数据链路层。它只能感知MAC地址,对IP及以上层是无法感知的。你可以把网桥想象成交换机,一般情况下有两个 口,数据在两个口之间转发,Linux下的桥接设备可以加入很多接口,真正地像一个多口的交换机,而且还支持STP( spanning tree protocol )。
参看
http://blog.ccidnet.com/blog-htm-do-showone-uid-61344-itemid-183967-type-blog.html *
http://www.linuxsir.org/bbs/showthread.php?t=293771 *