`

西厢记之 Ubuntu Linux下编译安装西_厢_计_划

阅读更多

 

 

介绍:

 

由于众所周知的原因,我们上网的时候经常会遇到连接重置的情况,西_厢_计_划(west-chamber)是一个旨在通过技术手段解决此类问题的开源项目。项目主页:http://code.google.com/p/scholarzhang

 

为便于说明而不带来问题,我把重置连接的系统称之为maxtrix,就是电影《黑客帝国》中的那个,你懂的。

 

我花了几天的时间把程序编译并安装成功,不过使用的时候发现访问网站成功率不高。试了几个网站,youtube(可连,但不稳定),blooger(一段时间能上),facebook(一段时间能上),twitter(不能上)。查看TCP,虽然程序能够按照既定方案“注入”TCP报文段,但是经常还是重置连接,目前还不能找到是何原因。

 

虽然如此,我仍然相信开发者会不断完善这个项目,与matrix战斗到底,因此我 把在Ubuntu Linux下的安装过程和方法拿出来,以供爱好者参考。

 

注意:阅读本文,需要对Linux系统及其防火墙netfilter有一定的了解,且务必先阅读官方的安装和使用说明文档,否则会难以理解。

 

---------------------------------------------------------------------------------------

 

介绍一下安装前的环境:

环境是在VirtualBox 4.x上搭建的全新虚拟机。

ubuntu desktop 10.10

linux kernel 2.6.35-28-generic

iptables v1.4.4

 

安装过程一波三折,分别两次编译不同版本的代码,最后成功。

第一次编译的代码是官网给出的下载 west-chamber-20100405.tar.bz2,

第二次是从SVN签出的最新的代码,版本REV106。

如果你和我有接近的环境,并想直接安装成功的话,可以直接跳到第二段。

 

 

第一次编译安装过程:

------------------------------------------------------------------------

 

从项目主页下载源代码包:west-chamber-20100405.tar.bz2

解压缩后按照INSTALL文件中的步骤安装

 

 

./autogen.sh
./configure CFLAGS="..." --prefix=/usr ...
make && sudo make install
 

 

执行到make的时候出错

make  all-recursive

make[1]: Entering directory `/home/username/gfw/west-chamber-20100405'

Making all in extensions

make[2]: Entering directory `/home/username/gfw/west-chamber-20100405/extensions'

if [ -n "/lib/modules/2.6.35-22-generic/build" ]; then make -C /lib/modules/2.6.35-22-generic/build M=/home/username/gfw/west-chamber-20100405/extensions modules; fi;

make[3]: Entering directory `/usr/src/linux-headers-2.6.35-22-generic'

 CC [M]  /home/username/gfw/west-chamber-20100405/extensions/compat_xtables.o

In file included from /home/username/gfw/west-chamber-20100405/extensions/compat_xtables.c:21:

/home/username/gfw/west-chamber-20100405/extensions/compat_xtnu.h:87: warning: ‘struct xt_match_param’ declared inside parameter list

/home/username/gfw/west-chamber-20100405/extensions/compat_xtnu.h:87: warning: its scope is only this definition or declaration, which is probably not what you want

/home/username/gfw/west-chamber-20100405/extensions/compat_xtnu.h:103: warning: ‘struct xt_target_param’ declared inside parameter list

/home/username/gfw/west-chamber-20100405/extensions/compat_xtables.c:193: warning: ‘struct xt_target_param’ declared inside parameter list

/home/username/gfw/west-chamber-20100405/extensions/compat_xtables.c: In function ‘xtnu_target_run’:

/home/username/gfw/west-chamber-20100405/extensions/compat_xtables.c:207: error: dereferencing pointer to incomplete type

/home/username/gfw/west-chamber-20100405/extensions/compat_xtables.c:216: warning: passing argument 2 of ‘nt->target’ from incompatible pointer type

/home/username/gfw/west-chamber-20100405/extensions/compat_xtables.c:216: note: expected ‘const struct xt_target_param *’ but argument is of type ‘const struct xt_target_param *’

/home/username/gfw/west-chamber-20100405/extensions/compat_xtables.c: In function ‘xtnu_register_target’:

/home/username/gfw/west-chamber-20100405/extensions/compat_xtables.c:294: warning: assignment from incompatible pointer type

/home/username/gfw/west-chamber-20100405/extensions/compat_xtables.c:299: warning: assignment from incompatible pointer type

make[4]: *** [/home/username/gfw/west-chamber-20100405/extensions/compat_xtables.o] Error 1

make[3]: *** [_module_/home/username/gfw/west-chamber-20100405/extensions] Error 2

make[3]: Leaving directory `/usr/src/linux-headers-2.6.35-22-generic'

make[2]: *** [modules] Error 2

make[2]: Leaving directory `/home/username/gfw/west-chamber-20100405/extensions'

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory `/home/username/gfw/west-chamber-20100405'

make: *** [all] Error 2

 

看错误信息是无法找到xt_match_param的结构体定义,感觉像是xtables的头文件的问题,

于是查看/lib/modules/2.6.35-28-generic/build/include/下的linux/netfilter/x_tables.h发现其中没有xt_match_param这个结构体定义。

再查看extensions/compat_xtnu.h,发现其中已有xt_match_param的定义,而且位于出错位置之前,怎么会找不到呢,再仔细一看,

其中有这么一句:

 

 

#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 27)
 

 

原来代码中判定内核版本小于2.6.27才可以编译,我的内核是2.6.35,可能新的内核把这几个定义结构体改名了,那我就简单修改试试看:

加上代码把我的内核版本加上去:

 

#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 27) || LINUX_VERSION_CODE == KERNEL_VERSION(2, 6, 35)
//把原代码块中两个新内核没有的定义移过来
#endif
 

把内核中没有的两个定义加上去,再make,编译通过。

再按照官方给的方法执行ipset成功。

再执行iptables设定防火墙规则时发生错误: Input/output error.

怀疑是ipset版本问题,尝试编译安装最新版本ipset:

 

wget http://ipset.netfilter.org/ipset-6.3.tar.bz2
tar jxvf ipset-6.3.tar.bz2
cd ipset-6.3.tar.bz2/
./authogen.sh
./configure --prefix=/usr
make
 

make的时候产生错误信息:

configure: error: The kernel source directory /lib/modules/2.6.35-28-generic/build is not patched with netlink.patch to support ipset

看来这个版本的内核无法安装最新的ipset,这条路看来行不通。

先不管,重新编译iptalbes和xtables-addons-common试试看:

 

 

wget http://netfilter.org/projects/iptables/files/iptables-1.4.10.tar.bz2
tar jxvf iptables-1.4.10.tar.bz2 
cd iptables-1.4.10
./configure --prefix=/usr -libexecdir=/lib -libdir=/lib -sbindir=/sbin 
make && sudo make install 


wget http://downloads.sourceforge.net/project/xtables-addons/1.34/xtables-addons-1.34.tar.xz
xz -d xtables-addons-1.34.tar.xz
tar xvf xtables-addons-1.34.tar
cd xtables-addons-1.34
./configure -prefix=/usr -libexecdir=/lib -libdir=/lib -sbindir=/sbin 
make && sudo make install 
 

 

 

编译完成后重新编译west-chamber,再执行iptables 配置,发生错误:

iptables: target "ZHANG" has version "libxtables.so.2", but "libxtables.so.5" is required.

iptables: match "gfw" has version "libxtables.so.2", but "libxtables.so.5" is required.

iptables: match "gfw" has version "libxtables.so.2", but "libxtables.so.5" is required.

 

第一次尝试安装失败。

 

 

 

 

第二次编译安装:

----------------------------------------------------------------------------------------------------------

从第一次的安装情况推测,可能是源代码太老,于是从SVN签出最新代码(REV106),开始编译安装:

 

 

cd west-chamber-src/
./autogen.sh
./configure --with-xtlibdir=/lib --prefix=/usr --libexecdir=/lib
make && sudo make install
 

 

 

在这之前先编译安装iptables和xtables-addons:

 

 

cd iptables-1.4.10
./configure --prefix=/usr -libexecdir=/lib -libdir=/lib -sbindir=/sbin 
make && sudo make install 

cd ../xtables-addons-1.34
./configure --prefix=/usr -libexecdir=/lib -libdir=/lib -sbindir=/sbin 
make && sudo make install 
 

 

不过很不幸,还是出现之前的错误:

iptables: target "ZHANG" has version "libxtables.so.2", but "libxtables.so.5" is required.

iptables: match "gfw" has version "libxtables.so.2", but "libxtables.so.5" is required.

iptables: match "gfw" has version "libxtables.so.2", but "libxtables.so.5" is required.

 

 

把/lib/libxtables.so.2.0.0删除,再运行iptables设置,发现新的错误:

/lib/xtables/libxt_ZHANG.so: libxtables.so.2: cannot open shared object file: No such file or directory

/lib/xtables/libxt_ZHANG.so: libxtables.so.2: cannot open shared object file: No such file or directory

iptables v1.4.10: Couldn't load target `ZHANG':/lib/xtables/libipt_ZHANG.so: cannot open shared object file: No such file or directory

 

Try `iptables -h' or 'iptables --help' for more information.

/lib/xtables/libxt_gfw.so: libxtables.so.2: cannot open shared object file: No such file or directory

iptables v1.4.10: Couldn't load match `gfw':/lib/xtables/libipt_gfw.so: cannot open shared object file: No such file or directory

 

Try `iptables -h' or 'iptables --help' for more information.

/lib/xtables/libxt_gfw.so: libxtables.so.2: cannot open shared object file: No such file or directory

iptables v1.4.10: Couldn't load match `gfw':/lib/xtables/libipt_gfw.so: cannot open shared object file: No such file or directory

 

这说明west-chamber编译的有问题,它引用了版本2的iptables库,但是最新的iptable库是版本5。

思考了一下,觉得是因为iptables版本太高(1.4.10),但是iptables-dev是低版本的(1.4.4),编译west-chamber的时候按照低版本的编译的,因此产生了不匹配。

考虑把iptables弄回1.4.4版本再试试,但是没找到降版本方法,于是直接把系统恢复成刚安装的状态(我是虚拟机,直接恢复,很快~~)。

 

这次直接编译west-chamber,不编译最新的iptables和xtables-addons-common.

顺利通过! :)  这时再执行iptables命令时就不提示错误信息了。

 

 

 

使用结果

---------------------------------------------------------------------------------------------------------

 

安装启动成功后用以下命令查看防火墙状态

$ sudo iptables -L -n -v

可以看到三条规则已经设置正确。

Chain INPUT (policy ACCEPT 189 packets, 29303 bytes)

 pkts bytes target     prot opt in     out     source               destination         

    0     0 ZHANG      tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:80 flags:0x17/0x12 state ESTABLISHED match-set NOCLIP src 

    0     0 LOG        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:80 state ESTABLISHED gfw LOG flags 0 level 6 prefix `gfw: ' 

    0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:53 state ESTABLISHED gfw 

 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         

 

Chain OUTPUT (policy ACCEPT 274 packets, 204K bytes)

 pkts bytes target     prot opt in     out     source               destination         


打开Wireshark开启抓包,打开浏览器,尝试访问www.blogger.com,显示连接被重置。查看wireshark,可以看到以下内容:

wireshark抓取blogger.com的包

 

我现在还不能分析清楚什么原因,要分析这个除了了解TCP之外,还要了解GFW,并且有一些想象力的。继续努力~

 

 

  • 大小: 67.3 KB
分享到:
评论

相关推荐

    读书考试题库_西厢记.doc

    读书考试题库_西厢记.doc

    2022西厢记赏析期末考试答案收集.pdf

    《西厢记》是中国古代文学中的一部经典戏曲作品,主要讲述了书生张生与相国千金崔莺莺的爱情故事。该剧历经多个版本的演变,其中《王西厢》和《董西厢》是最具影响力和研究价值的两个版本。 1. 《西厢记》的源头...

    调腔《西厢记》考论

    调腔是流行于浙东一带的高腔剧种,新昌县档案馆和...调腔《西厢记》存在明刊本所常见的曲文分唱现象,并在剧本上受到《南西厢记》影响,且曲文具有一定的版本价值。调腔《西厢记》演出历史悠久,具有较高的艺术和研究价值。

    西厢记的读后感 《西厢记》读后感:古典浪漫爱情的终结

    西厢记的读后感 《西厢记》读后感:古典浪漫爱情的终结

    2022西厢记赏析期末考试答案文件.pdf

    《西厢记》是中国古代戏曲中的经典之作,源自唐代元稹的小说《莺莺传》。该剧由元代剧作家王实甫创作,讲述了张生与崔莺莺的爱情故事,经历了诸多波折后最终得以圆满。《西厢记》不仅在文学上有着深远的影响,而且在...

    《西厢记》之崔莺莺人物形象分析.pdf

    "《西厢记》之崔莺莺人物形象分析" 《西厢记》是元代汉族戏曲剧本,是我国古典喜剧的现实主义杰作,对后来以爱情为题材的小说、戏剧创作影响很大,被誉为“ 西厢记天下夺魁”。崔莺莺是《西厢记》的女主角,她的...

    西厢记赏析答案

    ### 西厢记赏析知识点详解 #### 元杂剧的形成与发展 - **形成时期**:元杂剧作为成熟的戏剧形式出现于元代(选项C)。这一时期的戏曲文化融合了前代的艺术成果,并在此基础上形成了独特的艺术风格。 - **雏形特征*...

    读书考试题库西厢记.doc

    《西厢记》是中国古典戏曲中的经典之作,由元代戏剧家王实甫创作,被誉为“文采派”语言艺术的巅峰。这部作品的主题鲜明,讲述了主人公X君瑞(又称张生)与X莺莺(又称崔莺莺)在封建礼教束缚下,历经波折,最终争取...

    读书考试题库西厢记.pdf

    《西厢记》便是其中之一,它以其丰富的情感描绘、华美的曲词和深刻的社会批判,被后人赞誉为中国古典戏曲“文采派”的巅峰之作。这部作品不仅是元代杂剧的经典,更是中华文化的骄傲,至今仍对文学和戏剧创作产生着...

    西厢记赏析期末考试答案.pdf

    《西厢记》是中国古典戏曲中的经典之作,由元代剧作家王实甫创作,讲述了张生与崔莺莺的爱情故事。该剧深受后世赞赏,有许多版本和解析,包括《董西厢》等变体。以下是对《西厢记》及相关知识点的详细阐述: 1. **...

    2017西厢记赏析期末考试答案.pdf

    《西厢记》,作为中国古代文学史上的经典之作,自其诞生之日起便承载了丰富的文化内涵与深刻的社会意义。它起源于唐代元稹的小说《莺莺传》,后经过改编,形成了诸多版本,其中以王实甫的《王西厢》与董解元的《董...

    连环画作品《西厢记》

    《西厢记》是中国古代文学中的经典之作,主要讲述了书生张君瑞与相国之女崔莺莺的爱情故事。这个故事虽然源于唐代元稹的小说《莺莺传》,但其核心内容和艺术形式则深受金代董解元的《西厢记诸宫调》影响。这部作品...

    西厢记和罗密欧及朱丽叶之比较谈.doc

    《西厢记》和《罗密欧与朱丽叶》是两部跨越时空的爱情经典,分别代表了中国元代和英国文艺复兴时期的戏剧巅峰。这两部作品虽然在结局和文化背景上存在显著差异,但都在探讨着爱情的力量,以及社会环境对个人情感的...

    2017西厢记赏析期末考试答案.doc

    【西厢记】是中国古代戏曲中的经典之作,源自唐代元稹的小说《莺莺传》。?西厢记?的故事情节历经多个版本的演变,最著名的版本是由元代戏曲家王实甫创作的杂剧。这个故事讲述了张生(生)与崔莺莺(莺莺)之间的爱情...

    2017年西厢记赏析期末考试答案解析.doc

    5. **历史背景**:元杂剧的黄金时代在至元、元贞年间,这个时期的《西厢记》以其独特的艺术魅力成为了戏曲的经典之作。 6. **文化影响**:“调笑转踏”是宋代的歌舞表演形式,反映了当时的文化娱乐。《录鬼簿》则是...

    2020西厢记赏析期末考试答案整理.pdf

    《西厢记》是中国古典戏曲中的经典之作,源自唐代元稹的小说《莺莺传》。该剧讲述了书生张生与相国小姐崔莺莺之间的爱情故事,经过多个版本的演变,尤其是王实甫的《西厢记》和董解元的《董西厢》两个重要版本,使得...

    西厢记--------------------------.pdf

    王实甫正是在这样的历史条件下,创作出了《西厢记》。这部作品不仅是对爱情自由的向往,也是对封建礼教束缚的挑战。作者借助戏剧这一形式,展示了青年男女对于纯真爱情的追求和对封建婚姻制度的反抗。 人物塑造方面...

    2017西厢记赏析期末考试答案参照.pdf

    2017西厢记赏析期末考试答案参照.pdf

    浅析【西厢记】中的语言美探究.doc

    《西厢记》作为元代戏曲家王实甫的代表作,不仅因其曲折生动的故事情节受到人们的喜爱,更因其在语言运用上的高超技艺而在中国古典文学史上占据了举足轻重的地位。本篇浅析文章将围绕《西厢记》的语言美进行探究,...

    从《西厢记》译本中解读中庸文化与典籍翻译策略修改-论文.zip

    中庸文化是中国传统文化的核心之一,强调适度、和谐与平衡,这种思想在《西厢记》中有着深刻的体现。在翻译过程中,译者必须理解并把握这种文化内核,以便在异文化交流中避免过度直译或意译,使译文既能保留原作的...

Global site tag (gtag.js) - Google Analytics