SpechtLite 的简单使用

  1. SpechtLite 取出源码编译,或者直接下载其预编译好的 SpechtLite.app;
  2. SpechtLiteConf 下载 SpechtLiteConf.zip 并解压缩到 ~/.SpechtLite
  3. 修改 ~/.SpechtLite/Conf.yaml 中 adapter1 adapter2 adapter3 中至少一个配置;
  4. 运行 SpechtLite.app,从菜单中选中 ConfSet as system proxy

这个方案和Mac OS X 到达世界任意角落的一个解决方案概述中使用的 Privoxy 相比,支持 SOCKS Proxy 代理后的按照规则分流。因此也免去了在 Mac OS X 上给 Telegram 单独设置代理服务器的繁琐设置。
更重要的是它支持基于域名、目标 IP 的地理位置、IP 地址范围等规则的分流。

#http-proxy, #https-proxy, #macos, #mmdb, #shadowsocks, #socks-proxy, #specht

如何获得中国电信宽带接入时所使用的 VoIP 鉴权密码

在配置 HUAWEI SmartAX MA5675 的过程中,需要用到一些信息,可以从电信提供的以太网无源光纤接入用户端设备(EPON ONU)(EPON 上行悦me网关)的 telecomadmin(该管理帐号的密码可以询问中国电信安装工程师获得,但是如果你询问关于 VoIP 鉴权密码,那么安装工程师就不懂了,我估计这些配置信息是自动下发的) 的管理界面获得。但是管理界面对于 VoIP 鉴权密码的显示是星号,要获得该密码的明文有两种方式,抓包或者使用隐藏的配置备份链接地址。

方法一:抓包

可以使用浏览器(Safari、Chrome 等)的网络数据查看来获得,该管理界面是通过 Javascript 调用一个地址获得一段 JSON 数据,里面有明文的密码,然后 Javascript 再将密码等信息填入了界面的相应的输入框内。
该 JSON 的 URL 大致为
http://192.168.1.1/voipBasicGet.json?timeStamp=1478659409929&serviceState=1&ifList=1&voipBasicCfg=1&tableInfo=1
得到的 JSON 文件内容大致为:

{
 "serviceState": {
  "isRuning": "1",
  "lanNetworkSection": "192.168.1.0",
  "lanSubnetMask": "255.255.255.0"
 },
 "ifList": [
  "LAN",
  "epon0.1"
 ],
 "voipBasicCfg": {
  "wanIfName": "epon0.1",
  "voiceAccountIsWritable": "1",
  "primaryProxyAddr": "sh.ctcims.cn",
  "primaryProxyPort": "5060",
  "primaryOutProxyAddr": "BAC04.nq.sh.ctcims.cn",
  "primaryOutProxyPort": "5060",
  "secondaryProxyAddr": "sh.ctcims.cn",
  "secondaryProxyPort": "5060",
  "secondaryOutProxyAddr": "BAC04.nq.sh.ctcims.cn",
  "secondaryOutProxyPort": "5060",
  "primarySipRegAddr": "sh.ctcims.cn",
  "primarySipRegPort": "5060",
  "secondarySipRegAddr": "sh.ctcims.cn",
  "secondarySipRegPort": "5060",
  "localSipPort": "5058"
 },
 "tableInfo": [
  {
   "extension": "+8621????????",
   "authName": "+8621????????@sh.ctcims.cn",
   "userAuthKey": "????????????????????",
   "enableLine": "1"
  }
 ]
}

方法二:使用隐藏的配置备份链接地址

在管理界面能看到的链接地址点击进去的将配置备份到 USB 存储设备的这个功能备份出来的文件是加密的,我们无能为力。但是,该设备有一个隐藏的地址可以下载明文的配置信息,地址为 http://192.168.1.1/backupsettings.html (假设你的设备使用了默认 IP 地址,另外该地址访问需要先以 telecomadmin 帐号登录),在该页面点击 Backup Settings 按钮就会从 http://192.168.1.1/backupsettings.conf 下载明文的配置文件。下载到的文件格式为 XML,其中可以看到明文的 VoIP 鉴权密码等信息。XML 节点 SIP -> AuthPassword 的内容即为明文的鉴权密码。

本文测试设备为上海贝尔股份有限公司生产的型号为 E-140W-P 的 EPON ONU,测试环境为上海电信。

#china-telecom, #e-140w-p, #epon, #ma5675

How to convert jpg to png on macOS

$ sudo port install ImageMagick
$ mogrify -format png /path/*.jpg

#imagemagick, #jpeg, #jpg, #macos, #macports, #mogrify, #png

FreeBSD 上 sshguard-pf 的使用

前置条件:已安装配置好 PF。

本文所使用的软件版本:

  • FreeBSD 10.3-RELEASE
  • sshguard-pf 1.6.4
# 安装 sshguard-pf
$ pkg install sshguard-pf

# 启用 sshguard
$ /usr/local/etc/rc.d/sshguard rcvar | sed s/NO/YES/ >> /etc/rc.conf

# 配置 PF
$ vi /etc/pf.conf
table <sshguard> persist
block in quick proto tcp from <sshguard>

# 重启 PF
$ pfctl -Fa -f /etc/pf.conf

# 启动 sshguard
$ service sshguard start

# 地址白名单
$ vi /usr/local/etc/sshguard.whitelist
# comment line (a '#' as very first character)
#   a single IPv4 and IPv6 address
1.2.3.4
2001:0db8:85a3:08d3:1319:8a2e:0370:7344
#   address blocks in CIDR notation
127.0.0.0/8
10.11.128.0/17
192.168.0.0/24
2002:836b:4179::836b:0000/126
#   hostnames
rome-fw.enterprise.com
hosts.friends.com

# 重启 sshguard
$ service sshguard restart

# 查看 sshguard table 的内容
$ pfctl -t sshguard -T show

# 删除 sshguard table 中的某条记录
$ pfctl -t sshguard -T del 1.2.3.4

Mac OS X 到达世界任意角落的一个解决方案概述

Across the Great Wall, we can reach every corner in the world.
network

  1. 操作系统的系统偏好设置(系统偏好设置->网络->高级…->代理)里设置 Web 代理(HTTP)安全 Web 代理(HTTPS)Privoxy 监听的端口 127.0.0.1:8118
  2. SSH tunnel 负责建立 Socks5 代理,监听 127.0.0.1:1080 端口,采用 autosshLaunch Daemon 实现。
  3. tor 负责建立匿名隧道,监听 127.0.0.1:9050 端口,使用 127.0.0.1:1080 端口作为上级代理,用来访问暗网 *.onion,参考Mac OS X 上安装 tor 并配置为自动启动
  4. Privoxy 监听 127.0.0.1:8118 端口,负责分发 HTTP/HTTPS 请求。
    注意,Privoxy 3.0.22 以前的版本不支持 RFC5789 中定义的 HTTP PATCH 方法,不过如果 PATCH 是在 HTTPS 里则没有问题;Privoxy 3.0.22 增加了对 HTTP PATCH 的支持。
    1. gfwlist 或者用户自定义域名列表中的域名,分发到 SSH tunnel 建立的 Socks5 代理(127.0.0.1:1080)。
      使用 gfwlist2privoxygfwlist 和用户自定义域名列表转换成 Privoxy 的 action 配置文件,配置到 crontab 中定时执行。参考:Mac OS X 上 gfwlist2privoxy 的使用
    2. *.onion 域名分发到 tor 建立的 Socks5 代理服务器(127.0.0.1:9050)。
    3. user.action 中配置需要过滤的广告规则,和中国电信 HTTP 劫持所用到的域名。
  5. ZeroNet 连入网络使用(always)工作在 127.0.0.1:9050 端口的 tor
  6. dsocks 用来为不支持设置代理服务器的应用程序单独设置代理,比如 telegram,参考在 Mac OS X 上给 Telegram 单独设置代理服务器

#autossh, #dsocks, #gfwlist, #gfwlist2privoxy, #launch-daemon, #mac-os-x, #onion, #privoxy, #telegram, #tor, #zeronet

Mac OS X 上 gfwlist2privoxy 的使用

Network Diagram

本文中的软件使用 MacPorts(2.3.4) 安装。

安装 Privoxy(3.0.21)、py-pip(8.1.2)、gfwlist2privoxy(1.0.3)

$ sudo port install privoxy py-pip
$ sudo pip install gfwlist2privoxy

查找 gfwlist2privoxy 的安装路径

$ find /opt -iname 'gfwlist2privoxy'
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/gfwlist2privoxy
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/gfwlist2privoxy
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/gfwlist2privoxy-1.0.3-py2.7.egg-info

配置 Privoxy

生成空文件:

$ sudo touch /opt/local/etc/privoxy/gfwlist.action

修改文件所有者:

$ sudo chown privoxy:privoxy /opt/local/etc/privoxy/gfwlist.action

修改文件权限:

$ sudo chmod 660 /opt/local/etc/privoxy/gfwlist.action

允许当前用户修改该文件,便于后续使用当前用户的 crontab 定时生成该文件:

$ sudo chmod +a "${USER} allow read,write" /opt/local/etc/privoxy/gfwlist.action

查看文件权限:

$ ls -le /opt/local/etc/privoxy/gfwlist.action
-rw-rw----+ 1 privoxy  privoxy  62526 Sep  6 00:00 /opt/local/etc/privoxy/gfwlist.action
 0: user:YOURNAME allow read,write

在文件 /opt/local/etc/privoxy/config 的行 actionsfile user.action 下一行追加 actionsfile gfwlist.action,原文件会备份为 /opt/local/etc/privoxy/config.bak。注意这个命令就是写作三行的:

$ sudo sed -i '.bak' '/actionsfile user.action/a\ \
actionsfile gfwlist.action\
' /opt/local/etc/privoxy/config

对比原文件和修改后的文件,确保上述命令被正确执行:

$ sudo diff -ruN /opt/local/etc/privoxy/config.bak /opt/local/etc/privoxy/config
--- /opt/local/etc/privoxy/config.bak
+++ /opt/local/etc/privoxy/config
@@ -370,6 +370,7 @@
actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile default.action # Main actions file
actionsfile user.action # User customizations
+actionsfile gfwlist.action
#
#
# 2.5. filterfile

删除备份文件

$ sudo rm /opt/local/etc/privoxy/config.bak

启动 Privoxy

$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.Privoxy.plist

生成 gfwlist.action 文件

下载 gfwlist 并生成 gfwlist.action 文件。其中 127.0.0.1:1080 是监听在本地 1080 端口的 socks5 代理服务器,至于如何建立一个 socks5 代理服务器并不在本文讨论的范畴。
/opt/local/etc/privoxy/gfwlist.action修改后不需要重启 PrivoxyPrivoxy 会自动应用修改。

$ mkdir -p ~/bin/
$ echo "\!this is a user defined rule" >> ~/bin/user_rule.txt
$ echo "ip.cn" >> ~/bin/user_rule.txt
$ /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/gfwlist2privoxy -f /opt/local/etc/privoxy/gfwlist.action -p '127.0.0.1:1080' -t socks5 --user-rule ~/bin/user_rule.txt

可以将这个命令加入 crontab 中定时执行,使用命令crontab -e编辑当前用户的 crontab
添加一条记录,这里的例子是每天0点执行一次:

#minute	hour	mday	month	wday	command
0	0	*	*	*	/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/gfwlist2privoxy -f /opt/local/etc/privoxy/gfwlist.action -p '127.0.0.1:1080' -t socks5 --user-rule ~/bin/user_rule.txt > /dev/null 2>&1

测试

测试 socks5 代理服务器正在监听 1080 端口:

$ telnet 127.0.0.1 1080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

测试通过 socks5 代理服务器访问 ip.cn

curl -x 'socks5://127.0.0.1:1080' ip.cn
当前 IP:x.x.x.x 来自:xxxxxx xxx

测试通过 Privoxy 访问 ip.cn 分流到了 socks5 代理服务器。我们已经把 ip.cn 添加到了 user_rule.txt,因此下述命令输出结果应该和上述命令一致:

$ curl -x 'http://127.0.0.1:8118' ip.cn
当前 IP:x.x.x.x 来自:xxxxxx xxx

使用

在操作系统的系统偏好设置(系统偏好设置->网络->高级…->代理)里设置 Web 代理(HTTP)安全 Web 代理(HTTPS)为 Privoxy 监听的地址 127.0.0.1:8118

#gfwlist, #gfwlist2privoxy, #privoxy

#mac-os-x, #macports

#curl

从腾讯视频批量下载电视剧集

curl -s -b cookies.txt 'http://v.qq.com/x/cover/nwpc69jp1freit0/i0017wafvwo.html' \
| pup 'div.mod_episode span.item a json{}' \
| jshon -a -e href -u -p -e text -u -p -e title -u \
| paste -s -d '\t\t\n' - \
| awk -F\t '{system("you-get -c cookies.txt -o Darker2 -O \""$2"-"$3".mp4\" \"http://v.qq.com"$1"\"")}'

文件 cookies.txt 可以通过 Google Chrome 的扩展 cookies.txt 来导出,当然如果视频需要 VIP 才能观看,需要用 VIP 用户登录后再导出。

pup 是用来解析 HTML 的命令行工具。pup 'div.mod_episode span.item a json{}'会将播放列表里的链接解析出来处理成 JSON 格式输出到 stdout

jshon 是用来解析 JSON 的命令行工具。

you-get 是一个视频下载的命令行工具。

#awk, #cookies-txt, #curl, #jshon, #json, #paste, #pup, #qq, #video, #you-get