分類
软件

Linux 使用 Python 操作剪切板

還是那個簡繁轉換的需求, zhconv 似乎不能直接給它傳一段文字來轉換,只能轉換文件或者在 Python 中調用。

Fedora

先安裝 xclip 依賴,再安裝 pyperclip:

sudo dnf install xclip
sudo pip3 install pyperclip

然後新建一個 Python 腳本 /home/[YOURNAME]/scripts/s2t.py:

import pyperclip
from zhconv import convert

clipString = pyperclip.paste()
clipStringTC = convert(clipString, 'zh-hant')
pyperclip.copy(clipStringTC)

最後為了方便使用,給腳本設置一個別名

alias t='python3 /home/[YOURNAME]/scripts/s2t.py'

但是如果想讓別名保存下來,以後每次都能用,Fedora 需要把別名加到家目錄的 .bashrc 文件裏:

nano ~/.bashrc
alias t='python3 /home/[YOURNAME]/scripts/s2t.py'

Termux

Termux 無法使用 pyperclip 來操作剪切板,但是可以通過 Termux API 來操作。對應的 Python 這樣:

import subprocess
from zhconv import convert

clipString = subprocess.getoutput("termux-clipboard-get")
clipStringTC = convert(clipString, 'zh-hant')
subprocess.getoutput("termux-clipboard-set \'"+clipStringTC+"\'")

本文更新於 2022/07/29。

分類
软件

安卓手機把短信導出成 JSON 文本

本來打算用 Termux API 中的讀取短信功能,結果官方說谷歌不允許,所以後來找到了 hydrargyrum 開發的 Epistolaire。 Epistolaire 可以把本機的短信和彩信全部導出到 JSON 文本中,使用非常簡單。

本文更新於 2020/08/09。

分類
网站

嘗試攔截來自 Cloudflare IP 的密碼猜解

我的 WordPress 安裝了 Limit Login Attempts 插件,其中可以設置輸入錯誤密碼 m 次封鎖這個 IP n 小時,並記錄下這個 IP。本站最近有很多來自 Cloudflare IP 的錯誤登錄嘗試,於是我試圖使用下面兩個方法攔截,可惜結果證明無效。於是我使用了 OTP (One-time password)來增加暴力破解的難度,直到再次找到可行的攔截方法。我還安裝了一個修改 WordPress 登錄頁網址的插件 WPS Hide Login,應該也能有些作用。

Cloudflare Firewall

免費 Cloudflare 用戶可以創建 5 個防火牆規則,我建立了如下兩條:

(http.host in {"ft.wupo.info"} and ip.geoip.asnum in {13335})
(ip.src in {173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/12 172.64.0.0/13 131.0.72.0/22} and http.host eq "ft.wupo.info")

我隨便查了幾個 Cloudflare IP 的 AS 編號都是 13335,所以第一條就是如果 IP 的 AS 編碼是 13335 就攔截。順便推薦個我經常用的查 IP 的網站 IP-API

第二條是根據 IP 地址來封鎖,從這裡獲得 Cloudflare 的 IP

(ip.geoip.country ne "KP" and http.host eq "ft.wupo.info")

如果想根據 IP 所在國家來限制訪問也是可以的,上面的便是限制了北韓以外 IP 的訪問本站。

在 Limit Login Attempts 插件中限制 IP

這個就是一行一個填已經攔截的 IP 就可以了,可以把所有 IP 複製下來,然後粘貼到 LibreOffice Calc 中,按需要進行排序後複製出 IP 列貼回插件中就可以了。

分類
网站

WordPress 使用 OTP 增強站點安全性

一次性密碼 (One-time password)又稱動態密碼或單次有效密碼,是指計算機系統或其他數位裝置上只能使用一次的密碼,有效期為只有一次登入會話或交易。OTP 避免了一些與傳統基於密碼認證相關聯的缺點;一些實作還納入了雙因素認證,確保單次有效密碼需要存取一個人有的某件事物以及一個人知道的某件事物。——維基百科

本站使用的開源 OTP 插件是 WP-OTP。安裝啟用後在「使用者」>「個人資料」頁面,會有二維碼出現,用自己喜歡的 OTP 客戶端掃描後輸入生成的密碼就開啟了網站的 OTP 登錄。

我使用的 OTP 軟件是開源的 andOTP。安裝後會提示給 andOTP 客戶端自己設置個密碼,以保護動態密碼的安全。設置好後點擊主界面右下角的「+」,掃描 WordPress 個人資料頁的二維碼,將出現的數字填入 WordPress 後台就完成了所有的設置。

平常使用的場景是:打開 WordPress 的登錄頁,輸入賬號密碼。打開手機上的 andOTP 查看當前的動態密碼( 6 位數字)。將動態密碼也輸入登錄頁,完成登錄。

分類
软件

[18+] Hendroid 同人與變態漫畫瀏覽器

發現一個令人墮落的應用( ͡° ͜ʖ ͡°) Hendroid:Doujinshi & Hentai-Manga archiving and viewing app.

分類
软件

安卓手機使用 dnscrypt proxy

目的:未 root 的安卓 8 手機在 WiFi 和 4G 下使用 dnscrypt-proxy 2 避免 DNS 污染。

跑起來

使用 Termux 來運行 dnscrypt-proxy 2,配置方法參考Fedora使用DNSCrypt。由於手機未 root ,所以無法監聽 53 端口,可以用 5353 替代。配置成功後 dig ft.wupo.info -p 5353 @127.0.0.1 應該可以能正確返回 DNS 查詢。

使用 personalDNSfilter去 F-droid 下載)實現的本地 VPN 來修改系統的DNS查詢,它同時還能攔截廣告。配置非常簡單,只需要在DNS配置欄選中禁用 DNS 服務器查找,並在輸入框中輸入下面一行即可。

127.0.0.1::5050::UDP

日常使用

新建文件 /data/data/com.termux/files/home/scripts/dns.sh 並給予執行權限。

startDns(){
  nohup /data/data/com.termux/files/home/opt/dnscrypt/dnscrypt-proxy -config /data/data/com.termux/files/home/opt/dnscrypt/dnscrypt-proxy.toml&
  echo "starting dns"
  sleep 10
  am start --user 0 -n  dnsfilter.android/.DNSProxyActivity
  sleep 2
}
stopDns(){
  am start --user 0 -n  dnsfilter.android/.DNSProxyActivity
  sleep 8
  pkill dnscrypt-proxy
  echo "killed dns"
}

status(){
  vt1="$(ps -ef | grep dnscrypt-proxy | wc -l)"
  vt2=" "
  if [[ $vt1 = "2" ]]; then
    dnsproxyStatus="1"
    vt2="$(dig -p 5353 +short www.v2ex.com @127.0.0.1)"
  else
    dnsproxyStatus="0"
  fi  
}
if [[ $1 = "1" ]]; then
  echo "start"          
  startDns
elif [[ $1 = "2" ]]; then
  echo "restart"  
  stopDns         
  sleep 3           
  startDns  
elif [[ $1 = "0" ]]; then
  echo "stop"
  stopDns
elif [[ $1 = "s" ]]; then
  status
  echo "dns: $dnsproxyStatus | $vt2"   
fi

在 ~/.bash_profile 中增加快捷命令

alias d1='/data/data/com.termux/files/home/scripts/dns.sh 1'
alias d0='/data/data/com.termux/files/home/scripts/dns.sh 0'
alias dt='/data/data/com.termux/files/home/scripts/dns.sh s'

使用的時候,運行 d1 即可啟動 dnscrypt-proxy 服務,並且拉起 personalDNSfilter。運行 d0 則會先拉起 personalDNSfilter,此時需要手動點下 Close 退出 APP,然後會關閉 dnscrypt-proxy 服務。

本文更新於 2021/11/22。

分類
软件

簡易中文簡繁轉換 Python 庫 zhconv

zhconv 提供基于 MediaWiki 和 OpenCC 词汇表的最大正向匹配简繁转换,支持地区词转换:zh-cn, zh-tw, zh-hk, zh-sg, zh-hans, zh-hant。Python 2、3通用。

若要求高精确度,参见 OpenCCopencc-python

用起來方便準確,轉換模式若是 zh-tw 會進行地區詞轉換,如將「软件」轉換為「軟體」。而使用 zh-hant 則只轉換簡繁,如將「软件」轉換為「軟件」。

pip install zhconv
from zhconv import convert
print(convert('他說「我幹什麼不干你事。」', 'zh-cn'))
#他说“我干什么不干你事。”
print(convert('计算机软件', 'zh-tw'))
#計算機軟體
print(convert('计算机软件', 'zh-hant'))
#計算機軟件

命令行工具

python -mzhconv [-w] {zh-cn|zh-tw|zh-hk|zh-sg|zh-hans|zh-hant|zh} < input > output
#如
python -mzhconv zh-hant <山东合村并居的真实情况.txt> 山東合村並居的真實情況.txt

歡迎大家使用我在 Heroku 上部署的在線中文轉換工具

本文更新於 2020/12/31。