`

西厢记之 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
分享到:
评论

相关推荐

    体育课评分系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程.zip

    体育课评分系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程 项目启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS

    【东证期货-2024研报】短期关注天气能否触发惜售.pdf

    研究报告

    客运自助售票小程序 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程.zip

    客运自助售票小程序 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程 项目启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS

    一个完整yolov8整合包.zip

    一个完整yolov8整合包yolov8-一体机一个完整yolov8整合包参考仓库https://github.com/z1069614715/objectdetection_scriptB站教学视频https://www.bilibili.com/video/BV15g4y157MF/

    解决CAM350导入提示“找不到首标题%,载入停止”

    解决CAM350导入gerber提示“找不到首标题%,载入停止” 把文件放到gerber上一层或gerber层,运行此bat命令即可

    【浙江大学-2024研报】2024大学生生成式人工智能应用现状与思考.pdf

    行业研究报告、行业调查报告、研报

    使用yolov7训练自己的数据集.zip

    使用yolov7训练自己的数据集pytorch-yolov7使用yolov7训练自己的数据集参考https://github.com/WongKinYiu/yolov7

    毕业设计&课设_宠物寄养管理系统:计算机毕设项目.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    毕业设计&课设_房产中介信息管理系统.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    机电一体化系统中机器学习应用的最终项目.zip

    机电一体化系统中机器学习应用的最终项目交通标志检测-Tensorflow-YOLOv3-YOLOv4与 Syed Imad 合作完成的机电一体化系统中机器学习应用的最终项目 ( https://github.com/syed019 )关于任何识别系统都有两个主要任务检测(在输入图像上找到物体的位置和大小)和分类(将检测到的物体分类为子类)。这两项任务通常都使用单个检测/分类模型(如 YOLO 或 SSD)完成,其中输入图像用边界框和相应的类别标记。但是,标记和训练此类数据集需要大量时间和精力。因此,该项目的主要目标是仅检测一个主要类别(标志),并集成定制的卷积神经网络来对检测到的物体进行分类(子类,如限速、停车标志等)。这样,我们只需要训练一次检测模型来检测一个主要类别,而可以根据任务要求训练多个分类模型来对检测到的物体进行分类。输出实时检测对已保存图像进行检测 设置和要求OpenCV(版本 4)PythonNumpyTensorFlow喀拉拉YOLO 实现对于这个项目,由于时间限制,我们决定使用公开可用的数据集(德国交通标

    Yolov3的Pytorch版本实现模板检测.zip

    Yolov3的Pytorch版本实现模板检测YOLOV3-火​​灾探测csdn githubYolov3的Pytorch版本实现模板检测,其具体效果如下要求环境windows10编程语言python编程工具pycharm所需的包requirements.txt火车1.安装包本次需要的包在requirements.txt中,通过 pip install -r requirements.txt即可。2.所需体重文件$ cd weights/$ bash download_weights.sh进入weights目录下,运行sh文件,即可下载本次所需权重,即darknet53.conv.74,yolov3.weights,yolov3-tiny.weights3.修改配置文件信息$ cd config/$ bash create_custom_model.sh <num_classes>进入config目录。执行bash create_custom_model.sh <num_classes>,其中num_classes为类别参数,根据

    毕业设计&课设_女装商店管理系统:Java 毕设项目.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    使用 yolov4 进行头盔(安全帽)检测.zip

    Yolov4-deepsort-头盔检测使用darknet 框架YOLOv4 模型训练的头盔(安全帽)检测器。测试环境Windows 10 x64 2020 (build 19041.388)NVIDIA RTX 2070 SuperCUDA 10.1 / CuDNN 7.6.5Python 3.7.7 x64tensorflow 2.2.0 GPU受训重量Google 云端硬盘放入体重文件./configs要使用自己的数据集进行训练,你应该自己使用darknet。并且需要更改一些参数使用数据集roboflow.ai 公共数据集+ 约 100 张图片依赖项Pythonopencv-python、numpy、scikit-image在图像上绘制框和文本TensorFlow 2.2.0使用DeepSORT模型来跟踪对象matplotlib创建颜色图CUDA 10.1 / CuDNN 7.6.5暗网用于 yolov4 物体检测dark.dll, pthreadVC2.dll (windows)预编译(我不确定它是否可以在不同的机器上运行

    【五矿期货-2024研报】油脂周报:需求受抑制,阶段调整.pdf

    研究报告

    运算放大器和比较器基础知识及电气特性详解

    内容概要:本文详细介绍了运算放大器和比较器的基本原理及其内部电路结构。内容涵盖了运算放大器和比较器的定义、内部电路、绝对最大额定值、电气特性、相位延迟、振荡、可靠性和响应时间等方面。通过具体的公式和实例,阐述了它们的工作机制和技术细节。 适合人群:具有电子工程背景的专业人士,尤其是从事模拟电路设计的技术人员。 使用场景及目标:适用于理解和设计运算放大器和比较器的应用电路,帮助读者掌握其关键技术和参数,优化电路性能。 其他说明:文中提供了大量图表和实例,以便读者更好地理解和应用相关理论。同时,还详细介绍了如何解决一些常见问题,如振荡、失真和噪声等问题。

    基于uniapp的奶茶店点餐微信小程序+基于SpringBoot和Vue的管理后台

    基于uniapp的奶茶店点餐微信小程序+基于SpringBoot和Vue的管理后台,含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。该项目可以直接作为毕设、期末大作业使用,代码都在里面,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行! 基于uniapp的奶茶店点餐微信小程序+基于SpringBoot和Vue的管理后台基于uniapp的奶茶店点餐微信小程序+基于SpringBoot和Vue的管理后台基于uniapp的奶茶店点餐微信小程序+基于SpringBoot和Vue的管理后台基于uniapp的奶茶店点餐微信小程序+基于SpringBoot和Vue的管理后台基于uniapp的奶茶店点餐微信小程序+基于SpringBoot和Vue的管理后台基于uniapp的奶茶店点餐微信小程序+基于SpringBoot和Vue的管理后台基于uniapp的奶茶店点餐微信小程序+基于SpringBoot和Vue的管理后台基于uniapp的奶茶店点餐

    YOLOC 是将不同的模块组合起来构建不同的物体检测模型,包括 YOLOv3、YOLOv4、Scaled-YOLOv4、YOLOv5、YOLOv6、YOLOv7、YOLOX、YOLOR、PPY.zip

    YOLOC 是将不同的模块组合起来构建不同的物体检测模型,包括 YOLOv3、YOLOv4、Scaled_YOLOv4、YOLOv5、YOLOv6、YOLOv7、YOLOX、YOLOR、PPYOLO、PPYOLOEYOLOC介绍 YOLOC正在组合不同的模块来构建不同的对象检测模型。结合一些模块和技巧来改进YOLO检测模型,使用不同数据集的效果不一致。需要通过具体的实验进行尝试和验证YOLOC中的支持的模块有主流 YOLOv3 模型网络结构主流YOLOv4模型网络结构主流 Scaled_YOLOv4 模型网络结构主流YOLOv5模型网络结构主流 YOLOv6 模型网络结构主流 YOLOv7 模型网络结构主流 YOLOX 模型网络结构主流 YOLOR 模型网络结构 PicoDet模型网络结构变压器架构的主干、颈部、头部改进了变压器系列的骨干、颈部、头部注意系列的脊椎、颈部、头部基于anchor-free和anchor-based的检测器FPN、PANet、BiFPN等结构CIoU、DIoU、GIoU、EIoU、S

    (完整数据)县域农产品产量面板数据2000-2021年

    ## 数据指标说明 资源名称:2000-2021年县域农产品产量面板数据 区域范围:全国各县区 时间范围:2000-2021年 格式:Excel 数据量:近30w 指标:县域代码、县域名称、所属地级市、所属省份、产品种类或名称、单位、产量

    【五矿期货-2024研报】锰硅周报:宏观情绪仍为主要矛盾,价格跟随做宽幅震荡,继续关注12月份会议.pdf

    研究报告

    基于 NCNN 的 YOLOv5,YOLOv7,YOLOv8 检测和姿势推理的 Android 库.zip

    基于 NCNN 的 YOLOv5/YOLOv7/YOLOv8 检测和姿势推理的 Android 库基于NCNN的 YOLOv5/YOLOv7/YOLOv8 检测/姿势推理的 Android 库支持yolov5、 edgeai-yolov5、 yolov7、 yolov8系统Android 5.0+(21)English 中文如何1 下载.aar文件2 将.aar 文件放入 app/libs 目录中3 编辑 app/build.gradleimplementation files('libs/yolo_mobile_release_xxxxyyzz_v.*.aar')4 将ncnn.bin和.param放入assets目录5 创建名为'yolo_cfg.json'的新文件{ "name": "yolov8n", "input_size": 384, "param": "yolov.param", "bin": "yolo.bin", "box_thr": 0.5, "iou_thr": 0.5, "nkpt":

Global site tag (gtag.js) - Google Analytics