Python float和decimal

2   1381 轉為簡體

在Windows上打包Python腳本時遇到一個需求,將浮點數轉成字符數組,比如輸入1.001,得到[‘1′,’0′,’0′,’1’]

一開始想當然地用了:

version = 2.001

v = list(str(int(version * 1000)))

發現好像哪裡不對,得到的v是[‘1’, ‘0’, ‘0’, ‘0’]。想了一想應該是浮點數的精度問題,因為一看version * 1000 = 1000.9999999999999

所以有這麼幾種解決方法:

v = list(str(int(round(version * 1000))))

或者:

v = list(str(version).replace(“,”, “”) + “000”)[:4]

或者用decimal模塊,decimal是固定小數點位數的,用的是十進制乘除法,所以(在設定的位數內)不會產生誤差:

from decimal import getcontext, Decimal

getcontext().prec = 4

v = list(str(Decimal(version) * 1000))

需要注意的是decimal會自動轉換科學計數法,可以用”%d” % Decimal(d)來得到原始值。

 

啟用yoooo.us

10   1544 轉為簡體

準備把之前用的一套(山寨)cdn用到博客和其他一堆亂七八糟的站上面,用了yoooo.us(4個o)來做cname。主要現在的yooooo.us還依賴cloudflare的服務沒法搬,所以另外註冊了一個放到cloudxns上根據運營商區分解析。現在電信走的是idcf;聯通移動和港澳台小夥伴是vultr日本;國外是cc的lax。韓國kt用來做冗餘。

所以對於你們來說,每次打開我的博客的時候,可以至少省一個字節的流量了。

被害妄想症如何保護服務器安全

15   1111 轉為簡體

自從有次過海關的時候電腦被TSA開包檢查硬盤還掉下來了之後,我的被害妄想症就越來越沒救了。

這篇文章假設有人可以物理接觸你的電腦,以及你所在的網絡不可信,這種情況下應該怎麼保護你的服務器數據安全。

 

  • 使用代理登錄SSH以隱藏服務器IP。如果有多台服務器,選擇一個位置最近的做跳板機,加密它的文件系統(OpenVZ再見)。設置另外機器的hosts.deny和hosts.allow為僅允許跳板機IP登錄;如果使用不支持tcpwrapper的服務如dropbear,需手動設置iptables。
  • 登錄跳板機的方式要和登錄另外機器的方式不同。
    • 使用密碼+google authenicator登錄跳板機,然後通過公鑰登錄別的機器。設置跳板機的sudo需要密碼,且設置為不同於當前賬戶的密碼;方法是在/etc/passwd中添加一行toor:x:0:0:root:/root:/usr/sbin/nologin,使用passwd修改toor的密碼,在/etc/sudoers中添加一行Defaults        runas_default=toor, runaspw。
    • 使用密鑰A登錄跳板機,使用另一個密鑰B登錄別的機器。密鑰B應保存在本地,通過ssh-agent轉發到跳板機。不同設備上的密鑰B可以設置不同的passphrase。dropbear不支持ed25519,而ecdsa據都市傳說可能存在NSA的後門。
  • 每三個月更換一次密鑰。
  • 保證密鑰的passphrase的強度;不使用任何雲服務保存密碼和密鑰;如果實在記性太差,在本地AES加密一次,然後做好偽裝(比如將二進制密文附到圖片文件之後或壓縮文件之前,[密文|!Rar…] 或 [\xFF\xD8…\xFF\xD9|密文])。
  • 設置fail2ban。
  • 監控跳板機/var/log/wtmp中的登錄IP。
  • 如果沒有必要,關閉SSH和其他各類開放端口。
  • 所有明文服務儘可能走tls。如果客戶端支持SNI,配置假證書以防止被猜測域名。可以使用lua-resty-sniproxy

歡迎交流

ipip.tk地理位置查詢

0   981 轉為簡體

基於OpenResty ,MaxMind GeoIP數據庫和從bgp.he.net生成的ASN數據庫,因為沒有經緯度的需求所以沒有顯示。下文有源代碼的鏈接,如果需要可以自行修改加上經緯度或者將輸出變為JSON等。

使用方法

查詢當前IP地理位置

$ curl https://ipip.tk/
x.x.x.x
Country, City
ASN number

查詢當前IP

$ curl https://ipip.tk/ip
x.x.x.x

查詢指定IP的地理位置

$ curl https://ipip.tk/74.125.203.199
74.125.203.199
United States, Mountain View
AS15169 Google Inc.

查詢域名的地理位置

$ curl https://ipip.tk/www.google.com.hk
74.125.203.199
United States, Mountain View
AS15169 Google Inc.

查詢域名的IP

$ curl https://ipip.tk/www.google.com.hk/ip
74.125.203.199

查詢域名的IP和CNAME(如果存在)

$ curl https://ipip.tm/www.google.com.hk/dns
www-wide.l.google.com 74.125.203.199

源代碼

在這裡https://gist.github.com/fffonion/44e5fb59e2a8f0efba5c1965c6043584

需要ngx_http_geoip_module, echo-nginx-module, lua-nginx-module,安裝libgeoip,並將maxmind的舊版geoip數據庫放在/usr/share/GeoIP

通過bgp.he.net生成ASN數據庫

Read More

離線下載一條龍

9   1188 轉為簡體

因為怕死 遵紀守法,所以不在自家bt下新番和劇。目前的架構是這樣的,造福一下海外黨

  1. 一個offshore的DMCA不敏感的服務器。RSS爬取某兩個網站添加磁力鏈接到deluge。nginx添加一個下載目錄的location,記得要https,並且給default_server加上假證書,參見這篇博客
  2. 家裡一個樹莓派或者類似的硬件,運行aria2,開放aria2 rpc端口到公網,加上token。或者ssh轉發aria2的端口到一個跳板機。
  3. deluge使用execute插件,在Torrent Complete事件執行shell腳本添加到家裡的aria2,並且設置pause值為true。
  4. 樹莓派crontab半夜執行aria2.unpauseAll開始下載