路由器刷入OpenWrt固件

暑假剁手了一台rMBP但没有以太网接口,为了省钱就需要一个无线路由器,之前曾了解到路由器可以刷OpenWrt后装上ShadowSocks实现自动科学上网,于是就在集训的时候从马云家买了一个二手的TP-Link TL-WR703N刷上OpenWrt在机房给笔记本供网。

TL-WR703N

由于这货只有一个网口,当路由器自动获取IP地址后,就进不去192.168.1.1的管理界面了,虽然能上网,但每次换网线接头的时候都要捅菊花抹掉原来的设置。因此只有使用静态IP时才能正常使用这种路由器。这学期开学后发现家里有一个Netgear WNR2200在吃灰,于是就把它拿到学校刷上了OpenWrt放宿舍给各种无线设备供网。

WNR2200

刷入固件

OpenWrt是一个适合于嵌入式设备的Linux发行版。它提供了一个可添加软件包的可写的文件系统,使用者可以自由的选择应用程序和配置,并且可以使用一些适合某方面的应用的软件包来定制设备。

准备工作

路由器

首先你要拥有一台可以刷入OpenWrt的路由器,至于OpenWrt支持那些设备,请到Supported Devices页面查看。本文以WNR2200为例。

固件

前往Download下载最新的对应设备的固件。注意固件列表里一半会有两种后缀:squashfs-factory.imgsquashfs-sysupgrade.img,如果是从原厂固件刷到OpenWrt请用前者,如果是从OpenWrt升级请用后者。还有一种可能文件名以NA结尾,可能是代表North America,基本上与不带NA的没什么区别。

环境

还需要一台有以太网接口的电脑和一根网线,电脑操作系统不限,但是Windows需要提前开启TFTP(因为这个功能系统默认是关闭的),具体操作就是进入控制面板-程序-程序和功能

开启TFTP

打开打开或关闭Windows功能窗口,在里面把TFTP挑上钩,之后就可以开始了。

刷入固件

刷机有风险,操作需谨慎!
刷机有风险,操作需谨慎!
刷机有风险,操作需谨慎!
重要的事说三遍

首先要将路由器与电脑用网线相连(在后面的设置中网线是必要的),然后进入到路由器管理界面。

有的原厂固件是可以直接升级成OpenWrt的,因此首先进入路由器管理界面,找到固件升级的选项,选择下好的OpenWrt固件上传就可以了,我之前刷TL-WR703N时是可以直接上传的,上传完成重启后就算是刷完了。但我后来刷WNR2200时遇到了不认固件的情况(可能是因为原厂固件的版本问题),于是只好用TFTP的方式上传固件,这就是之前为什么要打开Windows中TFTP功能的原因。

如果从原厂管理界面中直接上传固件成功,请直接进入下一节;若不认固件,请执行以下步骤:

  • 关闭路由器电源,用笔尖捅住“Restore Factory Settings”菊花键不放。

  • 打开路由器电源,这时电源黄灯开始闪烁,这时依然不要松开RESET键,直到电源灯变为绿色长亮(或闪烁?)才可松手(可能有的路由器的表现不一样,达到类似效果即可),这时路由器已经进入了tftp模式。

  • 将电脑的IP设为192.168.1.2,子网掩码设为255.255.255.0,将电脑与路由器的1号LAN口用网线相连。

  • 从终端进入到要刷的固件所在目录中,假设固件名叫openwrt.img,如果在Windows下则使用命令:

      tftp -i 192.168.1.1 PUT "openwrt.img"
    

    如果在OS XLinux下则在终端里键入tftp,之后使用以下命令:

      connect 192.168.1.1
      binary
      rexmt 1
      timeout 60
      put "openwrt.img"
    

    稍等片刻,路由器的灯会出现各种变化,直到电源灯又恢复长绿状态(不同路由器或许不同),说明上传完成了。

  • 重启路由器,不出意外之后应该可以通过网页访问192.168.1.1LuCI管理界面了。

开启无线

较新的OpenWrt应该已经自带LuCI图形化界面了,因此直接浏览器打开192.168.1.1就可以看到类似如下界面:

LuCI

当然咯,第一次登入肯定是要先设密码的,毕竟也算是一个Linux系统:

更改密码

OpenWrt默认是关闭无线网络的,所以到Network-Wifi下面启用即可:

启用Wifi

之后设置SSID和密码就可以通过无线方式连接了。

基本设置

既然要装上软件,自然要从互联网获取,那么路由器当然要联网咯。先到Network-Interfaces设置WAN口的上网方式,这点和普通路由器没有什么差别,这里不再赘述。

如果觉得英文LuCI使用不便,也可以到System-Software下找到一个叫luci-i18n-base-zh-cn的包装上就行了,当然首先要Update lists一下,之后到System-System下切换成普通话再刷新一下就变成中文界面了。

设置中文

当然,以后要装的部分软件也可以通过上面这种方式安装,但由于有的包官方源里没有,我们在下面使用一种更通用的方法——从命令行安装。

OpenWrt归根结底还是一个Linux发行版,所以Linux命令在这里依然适用。

我们还是通过SSH登录:

ssh [email protected]

输入之前设置的密码后,就会看到OpenWrt特有的终端界面:

BusyBox v1.23.2 (2015-07-25 15:09:46 CEST) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 CHAOS CALMER (15.05, r46767)
 -----------------------------------------------------
  * 1 1/2 oz Gin            Shake with a glassful
  * 1/4 oz Triple Sec       of broken ice and pour
  * 3/4 oz Lime Juice       unstrained into a goblet.
  * 1 1/2 oz Orange Juice
  * 1 tsp. Grenadine Syrup
 -----------------------------------------------------
[email protected]:~# 

先更新一下软件源(和LuCI中的软件包刷新列表是一样的):

opkg update
opkg list-installed
opkg list

然后就可以按照自己的需求安装要用的软件了。

Read More +

使用aria2多线程下载

aria2是一款轻量级多线程的命令行下载工具,支持HTTP/HTTPSFTPSFTPBitTorrentMetalink等多种下载方式。程序支持Mac OS X、Linux、Windows等多平台。

这个下载器最大的优点就是多线程。最开始接触它的时候是因为在Mac下下载百度云的资源非常不方便,不借助其他工具只能通过浏览器下载,而且一个线程速度超慢,一不小心就会下载失败。后来从知乎上看到这个神器,用了金坷垃速度一千八

下载安装

首先到GitHub下载对应系统的安装文件进行安装;如果在macOS下也可以通过homebrew安装:

brew install aria2

配置文件

先新建一个配置文件叫aria2.conf

mkdir ~/.aria2
vi ~/.aria2/aria2.conf

放在这个目录下的主要原因是可以在启动时不再指定其配置文件的位置。然后编辑它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Basic Options
dir=/Users/$USER/Downloads
input-file=/Users/$USER/.aria2/session.dat
log=/Users/$USER/.aria2/aria2.log
max-concurrent-downloads=15
max-connection-per-server=15
check-integrity=true
continue=true

# BitTorrent/Metalink Options
bt-enable-lpd=true
bt-max-open-files=16
bt-max-peers=8
dht-file-path=/opt/var/aria2/dht.dat
dht-file-path6=/opt/var/aria2/dht6.dat
dht-listen-port=6801
#enable-dht6=true
listen-port=6801
max-overall-upload-limit=0K
seed-ratio=0

# RPC Options
enable-rpc=true
rpc-allow-origin-all=true
rpc-listen-all=true
rpc-listen-port=6800
#rpc-secret=123456
#rpc-secure=true

# Advanced Options
daemon=true
disable-ipv6=true
#enable-mmap=true
force-save=true
file-allocation=none
log-level=warn
max-overall-download-limit=0K
save-session=/Users/$USER/.aria2/session.dat
always-resume=true
split=10
min-split-size=10M

# Pan.baidu.com
user-agent=netdisk;5.2.6;PC;PC-Windows;6.2.9200;WindowsBaiduYunGuanJia
referer=http://pan.baidu.com/disk/home

配置文件中所有$USER要改成自己的用户名,dir参数设置的是下载路径,也可以按自己的习惯更改;input-filesave-session参数是指定session(保存下载进度)的存储位置,如果没有那个文件可以手动创建:

touch session.dat

log参数指定log路径,会自动生成。这时可以通过aria2c命令启动服务了。可以通过ps aux | grep aria2c命令检查是否启动成功。如果没有正常启动可以检查一下log。

开机启动

若要配置macOS开机启动,可以在~/Library/LaunchAgents下创建一个plist文件homebrew.mxcl.aria2.plist,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>homebrew.mxcl.aria2</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>Program</key>
<string>/usr/local/opt/aria2/bin/aria2c</string>
</dict>
</plist>

配置GUI

由于aria2是一个命令行工具,所以在没有其他辅助的情况下需要通过命令行来操作。具体使用方法请参阅aria2.github.io

为了更加便于使用,GitHub上的ziahamza开发了一个WebUI,可以通过网页界面来操作aria2:

WebUI

简单来说就是打开http://ziahamza.github.io/webui-aria2/就能使用了。也可以将项目源码下载下来放到本地或者放到自己的服务器上来用,比如http://aria.shintaku.cc/

打开以后如果右上角出现:

连接成功

就说明连接成功了,这时就可以直接输入下载链接下载了。

如果连接不成功请到Setting-Connection Setting检查端口是不是6800,并且确保6800端口没被别的服务占用:

连接设置

百度网盘插件

百度网盘如果使用普通下载的话可能得到的是一个临时的链接?不能断点续传,所以需要一个叫BaiduExporter的Chrome插件像百度云的客户端一样获取地址。如果Chrome商店被墙了也可以到GitHub上直接下载crx文件手动添加。

添加成功后再打开百度云会发现多了一个导出下载按钮:

导出下载

打开设置,按照如下设置:

导出设置

其中User-agent需要设置为netdisk;5.2.7;PC;PC-Windows;6.2.9200;WindowsBaiduYunGuanJiareferer设置为http://pan.baidu.com/disk/home,将aria2伪装成百度云管家来解除限速。

应用后选择百度云上的文件,通过导出下载-ARIA2 RPC

下载成功

这时再通过WebUI查看应当已经有新添加的任务以一千八的速度在下载了。

Read More +

VPS搭建ShadowSocks服务

由于校园网的资费坑得一逼,况且有流量限制,这种感觉甚是让人不爽。之前曾看到郑老湿和陈老湿在VPS搭上VPN免流量上网,后来又在开源课上受到杜老师的启发,决定通过ShadowSocks代理后的IPv6教育网实现免流量上网

ShadowSocks是一个安全的socks5代理,它通过客户端以指定的密码、加密方式和端口连接服务器,成功连接到服务器后,客户端在用户的电脑上构建一个本地socks5代理。使用时将流量分到本地socks5代理,客户端将自动加密并转发流量到服务器,服务器以同样的加密方式将流量回传给客户端,以此实现代理上网。

服务器端

搭建服务

SSH登录到VPS服务器后要使用pip安装ShadowSocks,所以先装pip

如果服务器是基于Red Hat的系统(CentOS等等),使用命令:

yum install python-setuptools && easy_install pip

如果是基于Debian的系统(Ubuntu等等),使用命令:

apt-get install python-pip

之后通过pip安装ShadowSocks:

pip install shadowsocks

安装完成后,在/etc/下新建一个叫shadowsocks.json的配置文件,内容如下:

1
2
3
4
5
6
7
8
9
{
"server" : "::",
"server_port" : 8388,
"local_address" : "127.0.0.1",
"local_port" : 1080,
"password" : "PASSWORD",
"timeout" : 300,
"method" : "rc4-md5"
}

其中"server"一栏之所以填"::"是为了同时监听IPv4/v6两个端口,因为本文的需求中我们需要双栈连接,如果VPS没有IPv6功能或仅是为了搭梯子用,这里面填写一个IPv4的地址就可以了。"password"栏填写自己要设置的密码。至于"method"加密方式一栏,主流的有rc4-md5aes-256-cfb等等,据说前者速度快,后者更安全,可以根据个人喜好自行权衡。

如果有多个用户需要使用而不想都使用一套端口和密码,可以如下写成多端口配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"server" : "::",
"local_address" : "127.0.0.1",
"local_port" : 1080,
"port_password":
{
"8388":"PASSWORD0",
"8389":"PASSWORD1",
"8340":"PASSWORD2"
},
"timeout" : 300,
"method" : "rc4-md5"
}

启动服务

保存配置文件后就可以通过以下命令启动和停止ShadowSocks服务了:

ssserver -c /etc/shadowsocks.json --fast-open -d start
ssserver -d stop

如果发现开启服务后连接不上,可以停用防火墙试一下。

要是觉得以上命令太长难于记忆,可以在~/.bashrc里加入alias:

1
2
alias ssstart='ssserver -c /etc/shadowsocks.json --fast-open -d start'
alias ssstop='ssserver -d stop'

保存后记得使用source ~/.bashrc命令应用配置,这样就可以每次通过ssstartssstop命令启动或停止服务了。

在CentOS7以后可以用systemd的方式启动Shadowsocks,先新建启动脚本/etc/systemd/system/shadowsocks.service

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Shadowsocks

[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json
ExecStop=/usr/bin/ssserver -d stop

[Install]
WantedBy=multi-user.target

然后就可以通过systemctl start shadowsocks启动了,并通过systemctl enable shadowsocks设置开机自启。

性能优化

现在我们要祭出TCP加速神器——锐速了。

锐速是一款免费的TCP底层加速软件,可以便捷地完成服务器网络的优化,配合ShadowSocks效果甚好。

首先要去锐速官网注册。然后在服务器上通过以下命令下载安装:

wget http://my.serverspeeder.com/d/ls/serverSpeederInstaller.tar.gz
tar xzvf serverSpeederInstaller.tar.gz
bash serverSpeederInstaller.sh

安装过程中需要填写刚注册的账号密码等,一路回车安装结束。

之后还要编辑配置文件/serverspeeder/etc/config,修改以下参数:

1
2
3
4
advinacc="1"
maxmode="1"
rsc="1"
gso="1"

保存后重启服务就可以了:

service serverSpeeder restart

目前锐速不再开放使用,想用的同学可以到91云寻找新大陆。

本地客户端

首先确定你可以获取到IPv6地址,最简便的方法就是打开六维空间测试一下,如果可以打开就说明没问题。

Windows

Shadowsocks for Windows

macOS

ShadowsocksX

Linux

Shadowsocks-Qt5

也可以按照类似服务端的命令行方式进行启动,将ssserver改成sslocal即可。

Android

Shadowsocks for Android

如果能上Google Play也可以从应用商店直接安装。

OpenWrt

shadowsocks-libev

各种平台上的服务器配置按照之前服务器端的设置填写即可,但是server地址记得填写IPv6的,然后设成全局代理。

这时Google一下自己的IP,如果地址确实是VPS的地址,就可以开始愉快的上网了。

Read More +

Digital Ocean开通VPS

目前使用体验较好的VPS服务商大概有LinodeConoHaDigital OceanVultr等等,由于GitHub的Student Developer Pack有DO家的50美刀优惠,但到了三个月后才申请下来,由于注册时已经输过优惠码所以就坑了,于是本文使用的是DO的服务。

注册DO帐号

通过邀请地址注册的新账户将获得10美刀的优惠。

按照步骤填完个人信息后,需要绑定支付方式并往新账户里充5美元来激活DO账户。个人建议先绑定PayPal账户,至于PayPal如果没有信用卡的话,绑定储蓄卡也是可以的,个人亲测学校办的交行卡可用。

激活账户后,如果你有GitHub教育优惠就使用它给的优惠码,如果没有可以搜一个最近的10美元或20美元优惠码,注意这样的优惠码只能输一次

输入优惠码

账户余额基本就有15美元了,这足够使用最便宜的套餐3个月了。

新建服务器

首先要给服务器取一个Hostname,按个人喜好随意命名。

然后选择套餐,我选择的是最便宜的$5套餐,包含512M的内存、20G的SSD和1000G流量每个月。

选择配置

数据中心任意选择,考虑到国际光缆的走向,建议选择位于美国西海岸或者亚太地区的,我选择的是旧金山机房。

选择镜像的时候选一个自己熟悉的系统就可以了,也可以选择带一键安装应用的,按需选择即可。

选择配置

附加选项里记得选上IPv6,因为在本文的需求中这是必不可少的。

SSH公钥可以现在添加,也可以以后再添加。之后点创建就可以等着创建完成了。DO宣传最少只用55秒就可以创建完成,但是我好像用了几分钟的样子?

创建成功后,就会进入到这个VPS的管理界面,从设置中可以看到你的公网地址。同时DO会发送首次登录的密码到你的邮箱中,请注意查收。姑且将这台服务器的地址记作IP,然后就可以在DO提供的网页版控制台或本地终端SSH登录了:

ssh [email protected]_host

成功登录后,首先要求更改root密码。如果希望以后本机登录不再输入密码,可以将本地的公钥上传到服务器端:

cat ~/.ssh/id_rsa.pub | ssh [email protected]_host 'cat >> .ssh/authorized_keys'

如果本地~/.ssh目录下没有id_rsa这样的文件,可以使用ssh-keygen命令在该目录下生成。这样以后每次ssh连接时就不用再输密码了,然后就可以随意折腾了。

Read More +

Qt5.5程序的打包与发布

因为要做C++软件实习的大作业,所以选择了易于上手的Qt作为图形化界面程序开发框架,IDE自然就是Qt Creator了。但是Qt程序的打包发布却是不接地气,因为依赖实在是太多了。有的时候加好依赖后在自己的开发环境上可以运行,但脱离开发环境却依旧报

This application failed to start because it could not find or load the Qt platform plugin “windows”.

无法加载qwindows

甚至

Runtime
于是现在亟待解决的问题就是如何能够找到所有所需依赖并能够将其打包引用。

查找依赖工具

通过阅读官方文档发现,Qt里面内置了一个dll依赖性检查工具——windeploy.exe。这个程序应当在~/Qt/Qt5.5.0/5.5/mingw492_32/bin/下,通过命令提示符执行它可以得到使用方法:

C:\Users\Shintaku>C:\Qt\Qt5.5.0\5.5\mingw492_32\bin\windeployqt.exe
Please specify the binary or folder.

Usage: C:\Qt\Qt5.5.0\5.5\mingw492_32\bin\windeployqt.exe [options] [files]
Qt Deploy Tool 5.5.0

The simplest way to use windeployqt is to add the bin directory of your Qt installation 
(e.g. <QT_DIR\bin>) to the PATH variable and then run:
  windeployqt <path-to-app-binary>
If ICU, ANGLE, etc. are not in the bin directory, they need to be in the PATH variable. 
If your application uses Qt Quick, run:
  windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>

Options:
  -?, -h, --help             Displays this help.
  -v, --version              Displays version information.
  --dir <directory>          Use directory instead of binary directory.
  --libdir <path>            Copy libraries to path.
  --debug                    Assume debug binaries.
  --release                  Assume release binaries.
  --release-with-debug-info  Assume release binaries with debug information.
  --force                    Force updating files.
  --dry-run                  Simulation mode. Behave normally, but do not
                             copy/update any files.
  --no-plugins               Skip plugin deployment.
  --no-libraries             Skip library deployment.
  --qmldir <directory>       Scan for QML-imports starting from directory.
  --no-quick-import          Skip deployment of Qt Quick imports.
  --no-translations          Skip deployment of translations.
  --no-system-d3d-compiler   Skip deployment of the system D3D compiler.
  --compiler-runtime         Deploy compiler runtime (Desktop only).
  --no-compiler-runtime      Do not deploy compiler runtime (Desktop only).
  --webkit2                  Deployment of WebKit2 (web process).
  --no-webkit2               Skip deployment of WebKit2.
  --json                     Print to stdout in JSON format.
  --angle                    Force deployment of ANGLE.
  --no-angle                 Disable deployment of ANGLE.
  --list <option>            Print only the names of the files copied.
                             Available options:
                              source:   absolute path of the source files
                              target:   absolute path of the target files
                              relative: paths of the target files, relative
                                        to the target directory
                              mapping:  outputs the source and the relative
                                        target, suitable for use within an
                                        Appx mapping file
  --verbose <level>          Verbose level.

Qt libraries can be added by passing their name (-xml) or removed 
by passing the name prepended by --no- (--no-xml). Available libraries:
bluetooth clucene concurrent core declarative designer designercomponents
enginio gui qthelp multimedia multimediawidgets multimediaquick network nfc
opengl positioning printsupport qml qmltooling quick quickparticles quickwidgets

script scripttools sensors serialport sql svg test webkit webkitwidgets
websockets widgets winextras xml xmlpatterns webenginecore webengine
webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput geoservices

Arguments:
  [files]                    Binaries or directory containing the binary.

发现当windeploy有一个参数为二进制文件时,会在其所在目录下生成该文件所依赖的所有文件。

提取依赖文件

于是我们可以在任意目录下新建一个文件夹,然后将Qt编译生成的可执行文件复制到新文件夹下。
接下来在命令提示符里执行windeploy yourProgram.exe便可以将其所需依赖加入到新文件夹中了。

> C:\Qt\Qt5.5.0\5.5\mingw492_32\bin\windeployqt.exe Library.exe
Library.exe 32 bit, release executable
Adding Qt5Svg for qsvgicon.dll
Direct dependencies: Qt5Core Qt5Gui Qt5Sql Qt5Widgets
All dependencies   : Qt5Core Qt5Gui Qt5Sql Qt5Widgets
To be deployed     : Qt5Core Qt5Gui Qt5Sql Qt5Svg Qt5Widgets
Updating Qt5Core.dll.
Updating Qt5Gui.dll.
Updating Qt5Sql.dll.
Updating Qt5Svg.dll.
Updating Qt5Widgets.dll.
Updating libGLESV2.dll.
Updating libEGL.dll.
Updating D3Dcompiler_47.dll.
Creating directory iconengines.
Updating qsvgicon.dll.
Creating directory imageformats.
Updating qdds.dll.
Updating qgif.dll.
Updating qicns.dll.
Updating qico.dll.
Updating qjp2.dll.
Updating qjpeg.dll.
Updating qmng.dll.
Updating qsvg.dll.
Updating qtga.dll.
Updating qtiff.dll.
Updating qwbmp.dll.
Updating qwebp.dll.
Creating directory platforms.
Updating qwindows.dll.
Creating directory sqldrivers.
Updating qsqlite.dll.
Updating qsqlmysql.dll.
Updating qsqlodbc.dll.
Updating qsqlpsql.dll.
Creating C:\Users\Shintaku\Desktop\release\translations...
Creating qt_ca.qm...
Creating qt_cs.qm...
Creating qt_de.qm...
Creating qt_fi.qm...
Creating qt_fr.qm...
Creating qt_hu.qm...
Creating qt_it.qm...
Creating qt_ja.qm...
Creating qt_ko.qm...
Creating qt_lv.qm...
Creating qt_ru.qm...
Creating qt_sk.qm...
Creating qt_uk.qm...

强烈建议在此文件夹下运行一下程序试试,因为这个工具并不一定能将所有必需的依赖加进来,这时运行极有可能还会报
系统错误
如果这样,请移步~/Qt/Qt5.5.0/5.5/mingw492_32/bin下找到缺少的.dll文件将它们移到新文件夹下。经过这步检查,在开发环境下应该可以正常运行可执行文件了。

修改引用路径

这时请把这个文件夹拷贝到其他运行环境上测试程序是否能成功运行:如果可以成功运行,那么请跳过这一步;如果不能成功运行,而且依旧报

This application failed to start because it could not find or load the Qt platform plugin “windows”.

则说明程序没有成功引用到动态链接库,这时应当修改源代码。
找到工程中的main.cpp文件,在主函数开头中加入一句

1
QApplication::addLibraryPath(".");

重新编译并替换新文件夹中的.exe文件,再放到其他运行环境上就应该可以成功引用到链接库了。

打包程序发布

这时我们就可以打包程序了。我使用的是一款叫做Enigma Virtual Box的封装工具,这个软件的名字和当年图灵破译的英格玛机一样。
软件装好后运行,从主界面选择输入目标文件和输出文件的路径,然后在下面Files里添加所有需要的链接库
添加文件
然后有一个Files Options里可选是否压缩文件,压缩后会比较小,然后点Process就行了
压缩文件
不久后会在选择的输出路径中生成最终打包好的程序,大功告成。

Read More +

GoAgent科学上网攻略

目前该项目已停止维护,并被开发者删除。有兴趣的童鞋请参考我fork下来的3.2.3版本

翻出长城,我有思想准备。是要触及一些人的利益,是会触及一些人的利益,是会有不同的观点和看法的,而且,已经形成防火长城的这些机构社会联系蛮广泛的,是有舆论能力的。我们敢于翻墙,也就是说呀,像古人讲的,“敢同恶鬼争高下,不向霸王让寸分”,就是要有这种精神。在此呢,你比如说,也有不少人给Google泼脏水,包括给Twitter、给Facebook泼脏水。甚至,说到一〇四师从广场上路过,怎么开59式坦克,一派胡言!我感到非常气愤,啊,一派胡言。

嗯,方滨兴,啊,本来是,这个工程院,这个很早以前就认可的院士,在北邮期间,当时当校长就当得很成功。清华著名教授唐泽圣,啊,那是他的老师,啊,对他非常欣赏。结果,有的这些头衔,就是怕说,担心会不会有人给人家造谣,说他通过当校长还想出点名,把他的几个职位一朝就全辞掉了,啊那是前年的事儿了,就全不干了。现在就几乎啊,嗯,在工程院,就是与病魔做一做斗争,啊,我对他做出的这种牺牲我都很感动的,啊。

具体GoAgent怎么用呢,请参照以下步骤:

创建GAE应用

登录GAE

GoAgent是使用跨平台语言Python开发、基于GPL自由软件协议的代理软件。它利用Google App Engine (GAE)的服务器充当代理。因此要使用GoAgent就需要一个Google帐户,前往GAE登录(有Google账号或者关联Google的账号直接登录即可,比如我的Google帐号就是hotmail的邮箱,深藏功与名)。

其实这一步就是需要翻墙的,有些人到这一步就因为无法翻墙登陆不了GAE,从而无法使用GoAgent,陷入了死循环。

创建应用

成功登录后就可以点击上图中的Create Application创建新应用。每个账户可以创建至多25个应用(现在网上说10个的都是几年前的版本了)。

首次创建还要验证一下手机号,格式为+86XXXXXXXXXXX,不久会收到一条验证短信,把验证码填进去就可以激活GAE账号了。

接下来就可以创建应用了,填入二级域名的Appid和应用名称。Appid要求为6~30个字符,可以包含小写字母、数字和-,必须以字母开头,不得以-结尾。[your_appid].appspot.com就是你的应用地址了。Appid一定要牢牢记住。

创建新应用

每一个应用提供1GB的流量,月流量是60GB(传出带宽是1GB/天,传入带宽1GB/天),虽然有如此的限制,但只是上网页用起来毫无压力,从来没有用超过呢。如果觉得一个应用的每天1G不够用,可以多创建几个。

本地配置

下载GoAgent客户端

GoAgent的项目主页已经从Google Code转移到GitHub了,但是GitHub上的项目也被移除了,所以还想尝试的童鞋请到我fork的分支上下载GoAgent 3.2.3

GitHub上的GoAgent项目

可以把这个项目clone到本地:

git clone https://github.com/liangzhenduo0608/goagent

或者Download ZIP并解压出来。

上传Python服务

进到server目录下,Windows用户以管理员身份运行uploader.bat,Mac/Linux用户用Python运行uploader.py,按照提示依次填入Appid、Email地址和口令(如果app创建时开启了两步验证,口令需要填入两步验证设置的密码,但现在创建的app基本上都跳过设置两步验证了,所以填邮Google帐户密码就行了)。上传成功会出现如下界面:

警告:建议先启动 goagent 客户端或者 VPN 然后再上传,如果您的 VPN 已经打开的话,请按回车键继续。

===============================================================
 GoAgent服务端部署程序, 开始上传 gae 应用文件夹
 Linux/Mac 用户, 请使用 python uploader.py 来上传应用
===============================================================

请输入您的appid, 多个appid请用|号隔开
注意:appid 请勿包含 ios/android/mobile 等字样,否则可能被某些网站识别成移动设备。
APPID: your_appid
Application: your_appid
Host: appengine.google.com
Rolling back the update.
Email: your_google_account
Password for your_google_account: 
Application: your_appid; version: 1
Host: appengine.google.com

Starting update of app: your_appid, version 1
Scanning files on local disk.
Cloning 1 static file.
Cloning 3 application files.
Compilation starting.
Compilation completed.
Starting deployment.
Checking if deployment succeeded.
Deployment successful.
Checking if updated app verion is serving.
Completed update of app: your_appid, version 1

上传成功,请不要忘记编辑proxy.ini把你的appid填进去,谢谢。按回车键退出程序。

验证是否成功也可以打开https://[your_appid].appspot.com/_gh/查看状态,像下面一样就说明成功了:

GoAgent Python Server 3.2.0 works, deployed at 2015-01-08 23:33:33

这里请注意一下,如果你用的是老版本的goagent比如2.x.x的域名后缀应为*.appspot.com/2,而新版本的3.x.x的域名后缀应为*.appspot.com/_gh/,因此之前用老版本而现在更新到新版本的用户需要重新上传。

配置proxy.ini

这一步做的就是上一步终端中最后一行说的,修改/local/proxy.inigae下的appidpassword并保存:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[gae]
enable = 1
appid = your_appid
password = your_password
path = /_gh/
mode = https
ipv6 = 0
sslversion = TLSv1
window = 7
cachesock = 1
headfirst = 1
keepalive = 0
obfuscate = 0
validate = 0
transport = 0
options =
regions =

启动服务

运行GoAgent

如果以上步骤都正确的话,Windows以管理员身份运行local下的goagent.exe了,Mac/Linux用户用Python运行proxy.py,应该会出现如下界面:

------------------------------------------------------
GoAgent Version    : 3.2.3 (python/2.7.1 gevent/1.0 pyopenssl/0.13.1)
Listen Address     : 127.0.0.1:8087
GAE Mode           : https (TLSv1)
GAE APPID          : your_appid
Pac Server         : http://192.168.1.101:8086/proxy.pac
Pac File           : file:///goagent-3.0/local/proxy.pac
------------------------------------------------------ 

如果没有出现其他警告或错误,就说明配置成功了。

安装Chrome插件

GoAgent可以设置全局代理,也可以设置浏览器代理。因此下面提供的是使用Chrome浏览器插件代理的方法。

从Chrome浏览器打开Proxy SwitchyOmega并添加到浏览器。如果被墙了就到GitHub下载crx文件手动添加。在其配置界面Import/Export里把/local/SwitchyOptions.bak导入进去:

导入配置

可以从浏览器右上角小圈圈插件那切换各种模式:

  • Direct是不通过代理直接连接
  • GoAgent是完全通过代理访问
  • Auto Switch是自动切换,根据设置判定哪些网站通过代理,哪些网站不通过代理。

个人比较倾向使用自动切换模式,也比较省流量,也防止有些内地的网站因为代理而打不开。也可以在Switch rules里添加需要自动代理的网站。

导入证书

打开chrome设置-管理证书-受信任的根证书颁发机构,将/local/CA.crt导入到进去:

导入证书

至此,以后每次需要代理的时候只要运行goagent.exeproxy.py就行了,此时你就可以通过Google公司加州山景城的服务器畅游墙外的世界了。

这个大家啊,如果,对翻墙有什么想法,有什么看法,尽可以提。我觉得,我相信,广大记者朋友,是客观的。这个也欢迎大家,有机会,到墙外去,墙外人非常热心,而且这些年的这个发展,这个大家团结一致、同心同德,已经取得了很大的进步。我相信,我们这些这个记者朋友们,你们对今天翻墙,放出干货的报道,会是客观的,准确的。好,谢谢大家。

Read More +