Author: 赵 汐桃

ShadowsocksR 协议插件文档

由于网络环境愈加恶劣,文章复制至 Github 原文,已备不时之需。

概要

用于方便地产生各种协议接口。实现为在原来的协议外套一层编码和解码接口,不但可以伪装成其它协议流量,还可以把原协议转换为其它协议进行兼容或完善(但目前接口功能还没有写完,目前还在测试完善中),需要服务端与客户端配置相同的协议插件。插件共分为两类,包括混淆插件和协议定义插件。

现有插件介绍

1.混淆插件

此类型的插件用于定义加密后的通信协议,通常用于协议伪装,部分插件能兼容原协议。

plain:表示不混淆,直接使用协议加密后的结果发送数据包

http_simple:并非完全按照http1.1标准实现,仅仅做了一个头部的GET请求和一个简单的回应,之后依然为原协议流。使用这个混淆后,已在部分地区观察到似乎欺骗了QoS的结果。对于这种混淆,它并非为了减少特征,相反的是提供一种强特征,试图欺骗GFW的协议检测。要注意的是应用范围变大以后因特征明显有可能会被封锁。此插件可以兼容原协议(需要在服务端配置为http_simple_compatible),延迟与原协议几乎无异(在存在QoS的地区甚至可能更快),除了头部数据包外没有冗余数据包,客户端支持自定义参数,参数为http请求的host,例如设置为cloudfront.com伪装为云服务器请求,可以使用逗号分割多个host如a.com,b.net,c.org,这时会随机使用。注意,错误设置此参数可能导致连接被断开甚至IP被封锁,如不清楚如何设置那么请留空。服务端也支持自定义参数,意义为客户端仅能填写的参数列表,以逗号分割。
本插件的高级设置(C#版、python版及ssr-libev版均支持):本插件可以自定义几乎完整的http header,其中前两行的GET和host不能修改,可自定义从第三行开始的内容。例子:
baidu.com#User-Agent: abc\nAccept: text/html\nConnection: keep-alive
这是填于混淆参数的内容,在#号前面的是上文所说的host,后面即为自定义header,所有的换行使用\n表示(写于配置文件时也可直接使用\n而不必写成\n,换行符亦会转换),如遇到需要使用单独的\号,可写为\\,最末尾不需要写\n,程序会自动加入连续的两个换行。

Read more

Mac 终端命令代理工具

这篇文章已不再适用,因为找到了更好的透明代理叫Proxifier。

官网地址:https://www.proxifier.com/

注册码:P427L-9Y552-5433E-8DSR3-58Z68

————-以下是废物—————————

公司网络服务器是一台 Mac mini Server(坑是自己挖的),然后最近要做一个透明网关代理用于公(ke)司(xue)业(shang)务(wang),然后研究 pfctl 研究到快疯了,这破玩意儿太 TMD 不友好了,而且在研究了一天后发现这货根本无法实现透明代理~~~

然后就各种心灰意冷之后突然看到一片曙光,原来有一个叫 ProxyChains 的神器。。。

好了,就是这里:https://github.com/rofl0r/proxychains-ng

安装 Mac

brew install proxychains-ng

配置文件

vim /usr/local/etc/proxychains.conf

OSX 上 pfctl 的简单配置笔记

OS X 上没有iptables,在10.10以后以pf取代ipfw。相比于iptables,pf一般使用配置文件保存防火墙规则,语法规范上更严谨,但是配置也更复杂、规则冗长。本文记录pf的简单配置方法。

cat /etc/pf.conf,可看到以下已有内容:(忽略注释部分)

scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"

anchor可理解为一组规则的集合。默认情况下,这里的几行anchor都是苹果留的place holder,实际上没有active的规则。
/etc/pf.conf在以后的OSX更新中可能会被覆盖,最好可以另外建立一个自定义的pf.conf。
配置文件必须按照Macros, Tables, Options, Traffic Normalization, Queueing, Translation, Packet Filtering的顺序。
更详细的说明参考pf.conf man page
添加一个anchor。修改/etc/pf.conf如下:

scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
nat-anchor "custom"
rdr-anchor "com.apple/*"
rdr-anchor "custom"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
anchor "custom"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "custom" from "/etc/pf.anchors/custom"

建立anchor规则文件/etc/pf.anchors/custom,内容为具体规则。
常用的规则:

屏蔽IP入站TCP连接并记录:

block in log proto tcp from 192.168.1.136 to any

转发入站TCP连接到另一本地端口:

rdr inet proto tcp from any to any port 8081 -> 127.0.0.1 port 80

经测试,rdr无法转发到另一台外部主机上(man page的示例,只可以转发到internal network),内核开启net.inet.ip.forwarding=1也无效。如需转发到另一个外网IP,需要配合mitmproxy的透明代理

NAT,路由vlan12接口上(192.168.168.0/24)的出口包,经由非vlan12的接口转换到外部地址(204.92.77.111),并允许vlan12之间的互相访问:

nat on ! vlan12 from 192.168.168.0/24 to any -> 204.92.77.111

使配置文件生效

pfctl -evf /etc/pf.conf

原文地址:https://blog.chionlab.moe/2016/02/01/use-pf-on-osx/

Laravel PHP 多条件数据库查询

有时候搜索要用到比如select * from user where id > ? and (pid = ? or uid = ? )
可以使用如下方法:

$users = User::where('id','>','10')
->where(function($q1) use($pid,$uid){
$q1->orWhere('pid',$pid)
->orWhere('uid',$uid);
})->get();

简化一下就是这样:
$users = User::where('id','>','10')->where('enable' , 1)-get();

修复 ss-panel v3 无法使用 SMTP 发送邮件的问题 /解决QQ邮箱拦截 Mailgun 邮件

首先要说,有条件的,尽量使用 Mailgun 发送客信,因为 Mailgun 真的是非常好的邮件服务器,高效率而且有完善的分析和报告系统。然后国内某些无耻的邮件服务商相互勾结,恶意拦截 Mailgun 发送的邮件,由于国内部分运营商认为 Mailgun 邮件包含大量垃圾邮件,所以对 IP 限制很死,导致邮件无法正常送达客户。

为了解决这一问题,又不想屈服于国内的垃圾邮件服务提供商,可以暂时通过 smtp 发送邮件来解决问题(如果邮件量巨大的时候,千万别这么做,很容易 iP+域名 被阻止)。然后你会发现即便当你配置了 ss-panel .env 中的 smtp 信息,你依然无法通过 smtp 发送邮件(人家作者也备注了,本来就不再提供 smtp 支持了),那么你可以按如下方法,修复这一问题。

找到 ss-panel 程序目录 ./app/Services/Mail/Smtp.php 文件第27行:

$mail->SMTPSecure = 'tls';

将其修改为:

if(Config::get('smtp_ssl') == 'true'){
$mail->SMTPSecure = (Config::get('smtp_port') =='587'?'tls':'ssl');
}

保存,然后在 .env 文件中配置 smtp 参数,并且把 MailDriver 设置为 smtp,用你的游览器访问你的网站链接 ./admin/test/sendmail,测试一下是否能够发信了?

smtp 修复方案来源于 ss-panel v3 魔改版,感谢作者 kjukjuatnk.

使用 Nginx 解決 Google Analytics 无法统计大陆访问数据被墙的问题

由於眾所周之的原因,Google Analytics 在大陸地區總是「不太穩定」,且無其他可真正比肩者。故而需要通過海外服務器作為反向代理以解決此種問題。同時為統計結果之準確計,必須確保用戶IP等信息得以透明傳輸。

解決方案

nginx配置文件:

server {
listen 80;
listen 443 ssl spdy;
server_name analytics.hellomac.com.cn;
ssl_certificate /etc/letsencrypt/live/www.hellomac.com.cn/privkey.pem;
ssl_certificate_key /etc/letsencrypt/live/www.hellomac.com.cn/privkey.pem;
location /ga_proxy {
proxy_set_header X-real-ip $remote_addr;
rewrite ^/ga_proxy/(.*)$ /$1?$args&uip=$remote_addr;
proxy_pass http://www.google-analytics.com;
break;
}
location /analytics.js {
default_type text/html;
subs_filter_types text/css text/xml text/javascript;
subs_filter 'www.google-analytics.com' 'analytics.example.com/ga_proxy' g;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Referer https://www.google-analytics.com;
proxy_set_header Host www.google-analytics.com;
proxy_pass https://www.google-analytics.com;
proxy_set_header Accept-Encoding "";
}
}

Read more

iOS 上最简单的 Shadowsocks 客户端教程 / Wingy 设置教程

2019-11-3 更新:
由于 HelloMac Shadowsocks使用了新的加密技术,请前往官方网站查看配置教程及注册账号,谢谢。

前一段时间出了一个 Potatso 教程,但是因为 Patatso 功能太多,大家觉得太复杂,而且软件是需要付费的。所以今天再出一个免费的 Wingy 教程。
Wingy 是一个免费的 iOS Shadowsocks 客户端,其软件体积很小,占用资源也少,而且设置及其简单,其实这个软件的设置是全自动的,完全不需要教程,这个教程也更多的是指引大家如何注册 HelloMac Shadowsocks 服务。

首先,你需要购买 HelloMac Shadowsocks 账户,文章末尾有二维码可以扫码购买,也可以从你的服务商处购买获取更多优惠。
然后,你会收到 HelloMac 官方发来的注册链接,点击链接进入注册界面。

img_0267
Read more

最完整的 iOS Shadowsocks 教程 / Potatso 土豆丝设置教程

现在已经有更新更好用的 iOS Shadowsocks 客户端 Wingy,本文不再维护,要了解 Wingy 的配置说明,请看本站教程:
iOS 上最简单的 Shadowsocks 客户端教程 / Wingy 设置教程

由于 Suger 被下架,Shadowsocks 不能后台保持,导致很长一段时间在 iOS 上使用 SS 翻墙成了一个很痛苦的问题,现在 Potatso 带着全新功能,完美支持 Shadowsocks,自动区分国内外流量,支持后台连接保持,4G / WiFi 切换不会断线,这是我试用过的最棒的 iOS 上支持 Shadowsocks 的软件,下面就来说以下设置步骤。

首先当然是你的去 App Store 购买软件了,写此文时这个软件卖 45 元,之前便宜些。

IMG_0139

下载好软件以后打开设置。

Read more

各平台最新版 Shadowsocks 客户端下载

由于 Shadowsocks 主页被墙,所以在这里提供最新版软件下载,所有软件来源均来自 Shadowsocks 官方镜像,请根据您的操作系统选择合适的版本下载。

Windows 8 or above

Newest Version:
最新版:
Shadowsocks 3.4.2.1
旧版本:
Shadowsocks 3.3.2

Windows 7

(不再更新)
Shadowsocks-Qt5:
最新版:
SS 2.7.0 Win 32 Version
SS 2.7.0 Win 64 Version
旧版本:
SS 2.6.1 Win 32 Version
SS 2.6.1 Win 64 Version

Mac OS X

GUI Client:
最新版:
ShadowsocksX-NG 1.3.2
旧版本:
ShadowsocksX 2.6.3
Command-line Client: (支持网内其他设备共享)
brew install shadowsocks-libev

Linux

GUI Client:
Shadowsocks-Qt5
Command-line Client:
pip install shadowsocks

Android

最新版:
Shadowsocks 3.3.1
旧版本:
Shadowsocks 3.0.4
Shadowsocks 2.10.4

iOS

Wingy App Store (免费,扫码设置,强烈推荐)
Potatso App Store (软件费用45元,功能丰富,有需要可购买)

Shadowsocks 官方主页:https://shadowsocks.org/

ARM 与 X86 架构的区别[转]

文章转载,但原文出处不明,觉得写的不错,贴过来备用。

这里简单来谈一下,ARM和X86之间为什么不太具有可比性的问题。要搞清楚这个问题首先要明白什么是架构,之前也有很多人提到了架构不同,但架构是什么意思?它是一个比较抽象的概念,不太容易用几句话就解释清楚。我们要明白CPU是一个执行部件,它之所以能执行,也是因为人们在里面制作了执行各种功能的硬件电路,然后再用一定的逻辑让它按照一定的顺序工作,这样就能完成人们给它的任务。也就是说,如果把CPU看作一个人,首先它要有正常的工作能力(既执行能力),然后又有足够的逻辑能力(能明白做事的顺序),最后还要听的懂别人的话(既指令集),才能正常工作。而这些集中在一起就构成了所谓的“架构”,它可以理解为一套“工具”、“方法”和“规范”的标准。不同的架构之间,工具可能不同,方法可能不同,规范也可能不同,这也造成了它们之间的不兼容——你给一个意大利泥瓦匠看一份中文写成的烹饪指南,他当然不知道应该干什么了。

如果还看不懂,没关系,我们继续。从CPU发明到现在,有非常多种架构,从我们熟悉的X86,ARM,到不太熟悉的MIPS,IA64,它们之间的差距都非常大。但是如果从最基本的逻辑角度来分类的话,它们可以被分为两大类,即所谓的“复杂指令集”与“精简指令集”系统,也就是经常看到的“CISC”与“RISC”。属于这两种类中的各种架构之间最大的区别,在于它们的设计者考虑问题方式的不同。我们可以继续举个例子,比如说我们要命令一个人吃饭,那么我们应该怎么命令呢?我们可以直接对他下达“吃饭”的命令,也可以命令他“先拿勺子,然后舀起一勺饭,然后张嘴,然后送到嘴里,最后咽下去”。从这里可以看到,对于命令别人做事这样一件事情,不同的人有不同的理解,有人认为,如果我首先给接受命令的人以足够的训练,让他掌握各种复杂技能(即在硬件中实现对应的复杂功能),那么以后就可以用非常简单的命令让他去做很复杂的事情——比如只要说一句“吃饭”,他就会吃饭。但是也有人认为这样会让事情变的太复杂,毕竟接受命令的人要做的事情很复杂,如果你这时候想让他吃菜怎么办?难道继续训练他吃菜的方法?我们为什么不可以把事情分为许多非常基本的步骤,这样只需要接受命令的人懂得很少的基本技能,就可以完成同样的工作,无非是下达命令的人稍微累一点——比如现在我要他吃菜,只需要把刚刚吃饭命令里的“舀起一勺饭”改成“舀起一勺菜”,问题就解决了,多么简单。
Read more

ABOUT

老赵的个人博客,关于 Mac, iPhone, iPad, iPod等产品的软件和硬件技术交流。也讨论Linux/UNIX技术,服务器运维技术等。

2025 年 1 月
 1234
567891011
12131415161718
19202122232425
262728293031  

Powerd by WordPress on Xserve
Xserve 2009
@2012-2024 HelloMac Copyright