2017年9月25日 星期一

python Decorator Pattern

     在查python code 裡面的 "at" 符號(@) 是什麼的時候,發現初學者基本上看不懂,再加上現在OO 都學得很爛。
     所以分享一個比較容易理解的,python Decorator Pattern  範例,雖然這樣用其實根本違反 Decorator Pattern 的意義,但主要是讓人理解運行狀況。
    基本上,把她想成是對某個樣本,實際做擴充就可以了。
code:


兩個輸出都是:

Hans
tow


參考:
https://en.wikipedia.org/wiki/Decorator_pattern
https://puremonkey2010.blogspot.tw/2010/11/oo-decorator-pattern.html
http://www.hansshih.com/post/85896158975/%E8%90%AC%E6%83%A1%E7%9A%84-python-decorator-%E7%A9%B6%E7%AB%9F%E6%98%AF%E4%BB%80%E9%BA%BC

2017年9月1日 星期五

ubuntu Shadowsocks python

Shadowsocks


    Shadowsocks 的使用,必須在防火牆外部建立一個Shadowsocks server,並在本基端使用支援Shadowsocks 的本機端才可以連到外部的Shadowsocks server,因為Shadowsocks 走的是socks5協定,所以不管是瀏覽器還是應用程式要使用Shadowsocks 都需要透過本機端的port(預設1080)來連線,所以local ip 跟port主要是以要連上Shadowsocks  server的裝置為主,基本上測試過 GCP 、linode、中華VPS 都有效。



安裝:


apt-get install python-pip
pip install shadowsocks

設定:


     我通常會在自己使用者底下建立ss資料夾方便管理,如果只希望用預設值的可以參考官網,請依照自己習慣動態調整設定黨位置,但注意最後一定要用 root權限,因為會呼叫一個加密lib。

mkdir ssserver
vim  ssserver.json
   server 可以打上自己的IP,port也可以自己換,官網有提到有些VPS 服務商會讓非正常port降速可以使用常見port處理,如:443,3389...,但我會建議超過1024比較好,password為倒是時候連線的密碼,method是加密方法,aes-256-cfb 是通常ubuntu server都會內建,至於會不會被破我就不得而知了

ssserver.json


{

   "server": "0.0.0.0",
   "server_port": 8388,
   "local_address": "127.0.0.1",
   "local_port": 1080,
   "password": "passwd",
   "timeout": 300,
   "method": "aes-256-cfb",
   "fast_open": false
}

執行:

-C 是指定設定黨位置,--log-file 是特別指定log黨寫入位置,-d是背景執行
sudo ssserver -c ~/sserver/ssserver.json --log-file ~/ssserver/ss.log -d start
只要出現2017-09-01 16:07:34 INFO     starting server at 0.0.0.0:8388就是正常了,可以嘗試客戶端連線

關閉:

sudo ssserver -c ~/sserver/ssserver.json --log-file ~/ssserver/ss.log -d stop

windows client

Android client

問題排除:

    通常遇到最大的問題都是被防火牆擋住了,如果是GCP 跟中華除了本機端的防火牆之外還要特別設定外部防火牆指到VPS,而本機防火牆通常是iptable 跟 ufw。

檢查是否為防火牆擋住:

sudo cat /var/etc/syslog

如果看到[UFW BLOCK] 就是被ufw擋住了:


sudo ufw allow 8388/tcp

如果看到 iptables_INPUT_denied 就是被iptables擋住了:

1.檢查防火牆:

 sudo iptables -L -n

2.如果有reject-with icmp-port-unreachable 要先移除,不然就跳過這步驟,下面是移除input第幾個:
sudo iptables -D INPUT 3
3.新增連入iptables:

sudo iptables -A INPUT -p tcp --dport 8388-j ACCEPT
4.加回iptables:
sudo iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable