Saturday, April 28, 2018

用 cowsay 讓終端機充滿智慧

0. 準備工作
apt-get install fortune cowsay cconv

1. 程式碼 Cowsay.sh
#!/usr/bin/env bash

PATH=$PATH

SLEEP=6

declare -A CS

MAXEM=0
for e in `ls /usr/share/cowsay/cows/*.cow | sed 's/\.cow//' | awk 'BEGIN{FS="/"};{print $NF}'`
do
        CS[$MAXEM]="$e"
        MAXEM=$((MAXEM+1))
done

while [ 1 ];
do
        clear
        S=$(( RANDOM % 52 ))
        S=$((S+SLEEP))
        F="$S"
        FACE=""
        if [ $F -gt $MAXEM ]; then
                F=$(( F % MAXEM ))
                FACE=${CS[$F]}
        else
                FACE=${CS[$F]}
        fi
        date +"%Y/%m/%d %H:%M:%S"
        /usr/games/fortune | cconv -f UTF8-CN -t UTF8-TW | sed -r "s/\x1B\[[0-9;]*[mK]//g" | /usr/games/cowsay -f $FACE
        sleep $S
done

2. 執行
chmod a+x Cowsay.sh
./Cowsay.sh
bash Cowsay.sh

阿宅桌面時鐘 ASCII 版

請先安裝 toilet
# apt-get install toilet

然後執行
watch -n 1 "date +\"%Y-%m-%d %H:%M:%S\" | toilet"


Ubuntu 12 升級 16 意外直達 18 感想

話說之前將一台迷你筆電從 12 經過 14 升級 16 一切順利.
就來將自己的一號機筆電從好多年的 12 升級 16. 這台唯一的升級難度是有使用加密使用者目錄, 如果不小心就會毀掉使用者目錄, 這也是之前猶豫不升級版本的主因.

首先使用外接磁碟備份重要資料.

接著就使用 do-release-upgrade 從 12 升級 14. 一切順利登入而且正確輸入密碼解開使用者目錄. 一鼓作氣繼續升級到 16.

沒想到災難開始, 一路開始抱怨一堆套件不能安裝. 硬著頭皮繼續下去, 到最後還出現完成升級但是無法安裝一堆套件. 直接結束後重新開機就直接 kernel panic.

這時發揮堅持的精神, 放棄新安裝的核心改用舊版開機, 很好, 可以看到終端機登入畫面.
登入後發現無法自動連接網路, 這難不了我, 使用 ifconfig 大法手動來.
網路終於通了, 繼續堅持再執行 do-release-upgrade 還是一樣慘兮兮. 甚至想到之前將雲端VM從 14 升級 16 只改了 apt source 的方法, 然後 apt-get update; apt-get upgrade 後重新開機還是一樣.
這下傻了, 不會要重新安裝系統吧?!

還好此時靈光乍現, 不給升級就改用 update-manager -d. 可是現在是終端機界面哪來的 GUI WM. 死馬當活馬醫, 使用 startx 上場, 雖然 menu bar 通通失蹤, 可是有桌面啊! 立馬按下右鍵開個 GUI 下的終端機執行 update-manager -d. 看到有新版可以更新, 太讚了. 直上 18.04 LTS.
一切順利完成. 重新開機後看到登入畫面一整個感動. 而且大部分安裝的套件都沒消失, 只有 VirtualBox 等已在二號機安裝完成的套件不見蹤影. 更重要的是加密使用者目錄沒消失.

就這樣消耗兩個晚上, 最後想起來之前順利完成是使用更新管理員.
請愛用 update-manager -d

安裝簡易的電報送訊息機器人 Telegram bot

0. 安裝 telegram 設定帳號 UACCT

1. 加入 @BotFather
BotFather is the one bot to rule them all. Use it to create new bot accounts and manage your existing bots.

About Telegram bots:
https://core.telegram.org/bots
Bot API manual:
https://core.telegram.org/bots/api

Contact @BotSupport if you have questions about the Bot API.


UACCT:
/start

BotFather:
I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual.

You can control me by sending these commands:

/newbot - create a new bot
/mybots - edit your bots [beta]
/mygames - edit your games [beta]
...

2. 新增 bot
UACCT:
/newbot

BotFather:
Alright, a new bot. How are we going to call it? Please choose a name for your bot.

UACCT:
p****y

BotFather:
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

UACCT:
botusername_bot

BotFather:
Done! Congratulations on your new bot. You will find it at t.me/pipboy88_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:
5*******2:A*********************************w

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

3. 測試 API
3.1. 查詢我是誰
https://api.telegram.org/bot5*******2:A*********************************w/getMe
回應
{"ok":true,"result":{"id":5*******2,"is_bot":true,"first_name":"p****y","username":"botusername_bot"}}

3.2. 加入 bot 聊天並取得聊天室編號
https://api.telegram.org/bot5*******2:A*********************************w/getUpdates
{
  "ok": true,
  "result": [
    {
      "update_id": 5*******0,
      "message": {
        "message_id": 41,
        "from": {
          "id": CHAT_ID,
          "is_bot": false,
          "first_name": "UACCT_DESCRIPTION",
          "username": "UACCT",
          "language_code": "zh-TW"
        },
        "chat": {
          "id": CHAT_ID,
          "first_name": "UACCT_DESCRIPTION",
          "username": "UACCT",
          "type": "private"
        },
        "date": 1524858545,
        "text": "hbbvoebbvebwber"
      }
    }
  ]
}

3.3. 送出第一則訊息
https://api.telegram.org/bot5*******2:A*********************************w/sendMessage?chat_id=CHAT_ID&text=Hello+World

3.4. 送訊息 script
3.4.1. 先安裝 packages
apt-get install jq cconv fortune fortune-zh

3.4.2. 送訊息程式 tgsendmsg.sh
#!/usr/bin/env bash

PATH=$PATH

TS=`date +"%s.%N"`
LOGPATH="/PATH/to/tglog"
LOG="$LOGPATH/LogFilename.log"

BOTTK="5*******2:A*********************************w"
CHATID="CHAT_ID"

mkdir -p $LOGPATH
touch $LOG
chown -R 0755 $LOGPATH

if [ -n "$1" ]; then
        MSG="$1"
        shift
else
        echo "Usage: $0 \"Message\""
        exit 1
fi

TM=`curl --progress-bar --data-urlencode "chat_id=$CHATID" --data-urlencode "text=$MSG" "https://api.telegram.org/bot$BOTTK/sendMessage"`
echo "$TM" | jq
echo "$TS $TM" >> $LOG

3.4.3. 呼叫送出訊息 MyMSG.sh
#!/usr/bin/env bash

PATH=$PATH

Z="Asia/Taipei"

HR=`TZ=":$Z" date +"%H"`
HR=`echo "$HR" | sed 's/^0//'`
echo $HR

if [ $HR -eq 6 ]; then
        /root/tgsendmsg.sh "Good Morning 早安"
        FTZH=`/usr/games/fortune-zh | cconv -f UTF8-CN -t UTF8-TW`
        MSG=""
        for d in $FTZH
        do
                MSG="$MSG $d"
        done
        MSG=`echo "$MSG" | sed -r "s/\x1B\[[0-9;]*[mK]//g"`
        /root/tgsendmsg.sh "$MSG"
fi

if [ $HR -eq 12 ]; then
        /root/tgsendmsg.sh "Good Afternoon 午安"
        FT=`/usr/games/fortune | cconv -f UTF8-CN -t UTF8-TW`
        FT=`echo "$FT" | sed -r "s/\x1B\[[0-9;]*[mK]//g"`
        /root/tgsendmsg.sh "$FT"
fi

if [ $HR -eq 18 ]; then
        /root/tgsendmsg.sh "Good Night 晚安"
        FT=`/usr/games/fortune | cconv -f UTF8-CN -t UTF8-TW`
        FT=`echo "$FT" | sed -r "s/\x1B\[[0-9;]*[mK]//g"`
        /root/tgsendmsg.sh "$FT"
fi

接下來就發揮想像力把能串接的掛上去, 也能多開幾隻 bot 送不同類型的訊息.

Monday, December 04, 2017

IBM X200s 改裝 Intel 5300 無線網卡

無線網路卡買的是 Intel Wifi link 5300
由於有鎖網卡, 請選擇支援自己筆電型號的網卡
直接將原無線網卡取代. 使用旁邊的卡槽無法正常找到網路卡.

在 /boot/loader.conf 加上下列設定在開機時載入核心模組
if_iwn_load="YES"

在 /etc/rc.conf 加入下列設定啟動無線網卡
wlans_iwn0="wlan0"
ifconfig_wlan0="WPA DHCP"


Sunday, December 03, 2017

FreeBSD 11.1 local_unbound 設定

為何想要用 local_unbound? 主要是為了 DNSSEC 檢驗能從本機開始檢查,
既然各軟體要外掛實在是有難度. 所以就安裝本機快取並使用已經啟動
DNSSEC 檢查的 cache DNS.

以下就是簡單的啟動步驟:
設定檔 /etc/rc.conf
local_unbound_enable="YES"

local_unbound 設定檔目錄 /var/unbound
root@bsd11x200s:/var/unbound # ls -la
total 36
drwxr-xr-x   3 unbound  unbound     8 Dec  3 23:08 .
drwxr-xr-x  26 root     wheel      26 Dec  3 21:27 ..
drwxr-xr-x   2 unbound  unbound     3 Dec  3 23:07 conf.d
-rw-r--r--   1 root     unbound   193 Oct 11 09:54 control.conf
-rw-r--r--   1 root     unbound   104 Dec  3 22:56 forward.conf
-rw-r--r--   1 root     unbound   189 Oct 11 09:54 lan-zones.conf
-rw-r--r--   1 unbound  unbound  1252 Dec  3 23:08 root.key
-rw-r--r--   1 root     unbound   389 Oct 11 09:54 unbound.conf

設定轉送查詢的 cache DNS
root@bsd11x200s:/var/unbound # cat forward.conf
# Generated by resolvconf

forward-zone:
name: "."
forward-addr: 8.8.8.8
forward-addr: 192.168.xxx.xxx

設定一些 unbound 參數
root@bsd11x200s:/var/unbound # cat conf.d/options.conf 
server:
    num-threads: 3
    interface: 0.0.0.0
    access-control: 127.0.0.0/8 allow
    harden-glue: yes
    harden-dnssec-stripped: yes
    harden-below-nxdomain: yes
    harden-referral-path: yes


啟動服務
root@bsd11x200s:/var/unbound # service local_unbound  start

root@bsd11x200s:/var/unbound # cat /etc/resolv.conf

nameserver 127.0.0.1
options edns0


測試
(1) host
root@bsd11x200s:/var/unbound # host www.google.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases: 

www.google.com has address 216.58.200.36
www.google.com has IPv6 address 2404:6800:4008:801::2004

(2) nslookup 
root@bsd11x200s:/var/unbound # nslookup www.google.com 127.0.0.1
Server: 127.0.0.1
Address: 127.0.0.1#53

Non-authoritative answer:
Name: www.google.com
Address: 172.217.160.100
Name: www.google.com
Address: 2404:6800:4008:801::2004

(3) Dig 測試 DNSSEC
root@bsd11x200s:/var/unbound # dig +dnssec @127.0.0.1 www.icann.org A

; <<>> DiG 9.11.2 <<>> +dnssec @127.0.0.1 www.icann.org A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65414
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;www.icann.org. IN A

;; ANSWER SECTION:
www.icann.org. 3566 IN CNAME www.vip.icann.org.
www.icann.org. 3566 IN RRSIG CNAME 7 3 3600 20171214150526 20171123111933 7500 icann.org. i5KCfOv/+c/xIaRxmQrqTItEtlGkTe9RWoh2gKh5Rh/a431n2CLLNiZ2 8xpuDXoqb2KQlAz4JBhyydFb2ilPCJIPXFbiQbUksuDV6zHdYu+PzlUC hbxRkBhRD2CIPOc227igVbp3io4oTqlzaja4P0gq268yoVEOPb2/2sSs DzFDV80=
www.vip.icann.org. 29 IN A 192.0.32.7
www.vip.icann.org. 29 IN RRSIG A 7 4 30 20171208095813 20171201095813 6887 vip.icann.org. k4FaKFgAcblg0yRPMyP1TvNcXmgI9d1GXM4YQ9jelGeCro2I+OQW+BFg OKQgmjcnh3M7NiZBW2vQQF000iKWS938B/YeiODQuun+kv9ANaiCEipD /0FFkjecpgwuMCCy2ommmRsWSlv4484Sdw7KRW8S28SZj8jonCqzIDct rVQ=
www.vip.icann.org. 29 IN RRSIG A 7 4 30 20171208095813 20171201095813 4532 vip.icann.org. FoSTut3HaWz1SEHtxReWh7IuOHOv4kCAEIuz1zPQPQVvNDU6WHenVF4h YSJOSLgyLwZ9P1MsH8PGPJEpCJr6jOR1Gl7QF24UezSj5PXnoinPLyjG Zm8/3DcM6UcrZhwmm9wRTSOuGv+LAmiU9Ab0WUfKEKR/vMnj4qn5HR+Y QOI=

;; Query time: 315 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 03 23:24:36 CST 2017
;; MSG SIZE  rcvd: 598

至於想要了解什麼是 DNSSEC 請先看 

以下是 TLD 支援 DNSSEC 的現況

Sunday, August 27, 2017

用 R 分析 log

有時間再來慢慢講用 R 分析 log 的學習過程. 以下是分析經過 Z-Score normalization 的結果.





在 VirtualBox 使用 crochet 製作 Pine64 可用的 FreeBSD 12.0-CURRENT 影像檔

安裝 VM 請注意硬碟記憶體給大一點, 可以製作大一點的影像檔.
硬碟建議使用 32 GB 記憶體 4GB. 

安裝VM完成後請參考 https://github.com/freebsd/crochet 安裝
請編輯 board/Pine64/setup.sh 調整 IMAGE_SIZE 到 3000 以上避免問題
製作出開機影像檔後, 請使用 dd if=IMG of=/dev/SDCARD_DEVICE bs=10240 寫入記憶卡

開機後請安裝 gpart 參考 https://www.freebsd.org/doc/handbook/disks-growing.html
使用 gpart 調整 mmcsd0 後再使用 service growfs onestart 調整大小.

root@pine64:~ # df -h
Filesystem        Size    Used   Avail Capacity  Mounted on
/dev/mmcsd0s2a     29G    2.7G     24G    10%    /
devfs             1.0K    1.0K      0B   100%    /dev
/dev/mmcsd0s1      64M    128K     64M     0%    /boot/efi
/dev/md0           29M     24K     26M     0%    /tmp
/dev/md1           14M     64K     13M     0%    /var/log
/dev/md2           11M    8.0K     10M     0%    /var/tmp





Monday, December 12, 2016

[非教學文] 在 android 手機上 linux deploy 執行 Linux

前題: 一隻已經 root 過的閒置手機及較大的儲存空間.
硬體: Ramos mos1(買到已經完成 root 及安裝 xposed)
軟體: linux deploy + piggy helper

其實安裝設定都不難, 網路上文章看看就能完成. 
一開始玩得蠻開心的. 但是為了寶可夢, 開始尋找能暫時關閉 root 的軟體, 找到了 root switch. 結果關掉 root 時忘記勾選還原狀態, 直接重啟動. 杯具就發生了. root 消失了. 更慘的是寶可夢還是不能玩.

於是開始踏上尋找 root 的旅程, 一直想要直接 app 一鍵 root, 但這隻有點冷門, 找了半天找上 kingo root, 還是無法直接用 app root. 只好動用 windows 版 adb root. 總算將 root 找回來. 如果有使用冷門手機想要 root 可以參考一下這個一鍵 root 軟體. 確定可以 root ramos mos1 及 紅米.

目前已經解決 linux deploy SSH 連線及 VNC 連線問題. 接下來要尋找如何製作自己的 container, 目標看能不能安裝 FreeBSD 上去??? 另外也安裝了 kalitop10 可以學習使用 kali 套件.

參考資料:
1. http://nitroxenon.com/android-linux
2. https://www.kali.org/tutorials/kali-linux-android-linux-deploy/
3. https://github.com/meefik/linuxdeploy

Wednesday, February 17, 2016

GMail IPv6 收信開始檢查正反解及 SPF

股狗啊! 真是搞不懂你. 為啥前天靜悄悄的將 GMail IPv6 的正反解檢查還有 SPF 開起來. 被用戶通知怎麼郵件轉送都會收不到. 只好先跳回用 IPv4 送信. 又要再加一個偵測項目了.

Wednesday, November 18, 2015

首登百岳及首露

人生第一座百岳獻給 合歡北峰, 而且將第一次露營獻給 小溪營地.

第一天登場的就是落日餘暉


來張超廣角度的風景


永遠記得小溪營地美麗星空伴隨冷冽寒風, 但是隔天清晨日出溫暖明亮.


小溪營地上北峰


首登百岳紀念照, 不好意思佔據版面, 只好讓北峰獨照.



風起雲湧, 正是觀賞時.




回首來時路, 但願能再次重逢.



Tuesday, August 04, 2015

8/1~2(六日)~砂卡礑步道>七星潭>花蓮賞鯨>白楊步道健走


砂卡礑步道>七星潭>花蓮賞鯨>白楊步道健走

CVE-2015-5477 Named DoS

最近這個代誌很大條. 負責 DNS 伺服器的管理員們趕快更新吧! 

這是 100% 可以擊倒的, 只要權威主機被多掛幾台, 就會有一堆網站受影響. 


手邊也拿到攻擊的程式, 接下來研究看看.


 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-5477

Sunday, October 05, 2014

用台灣的本土文化交流就是這麼歡樂 - 台灣三太子

誰說文化交流一定要用那些繼承過來文謅謅的中國文化, 用台灣的本土文化交流就是這麼歡樂.



以下內容轉錄自 YouTube, 版權為創作者所有.



Friday, September 26, 2014

Bash CVE-2014-6271 和 CVE-2014-7169 漏洞暫時解法

今天收到長官指示要看這一篇

Bash Shell 漏洞威脅不小於 Heartbleed!Unix-Like 作業系統請儘速更新


才剛升級完成, 也做出第一版的升級原始碼給抓不到 RPM 的機器. 就又收到同事的晴天霹靂.

  Bash Shellshock Command Injection Vulnerability (CVE-2014-6271 and CVE-2014-7169)


真是雙重打擊效(笑)果好?!

目前現況: EL6 可以直接升級, 但是只解決 6271. FreeBSD 9 及 10 使用 ports 升級也是一樣. 只有 Ubuntu 的更新版本可以直接修掉 6271 及 7169. 小弟自己從 GNU 下載並且已經上好 patch . 接著再從 Ubuntu 中挖出 patch 檔. 成果就放在雲端硬碟中, 歡迎大家取用.

目前測試過的平台 EL6 x86_64, EL5 x86_64. FreeBSD 尚未測試. (要不是剛好要去當工作人員, 應該可以更早做出來)

檔案在此 https://drive.google.com/folderview?id=0B1TOrKgNeD45N0VxQWZ1c1JrU0U&usp=sharing

PS: 由於這是應急沒有經過官方完整測試的版本, 請勿上到重要的環境. 後果請自負.
PS2: 解法是由高手找出來的, 不要問我喔!甘溫.

服用方法很簡單
1. 解開壓縮檔
2. 到目錄下 ./configure
3. make
4. make install
5. 程式會將 bash 安裝到 /usr/local/bin
6. 測試沒問題請想辦法蓋掉 /bin/bash
收工

祝 大家有個忙碌的週末. ^^;;;

Sunday, August 03, 2014

掃描子網路下的主機是否有開啟服務埠口

這個計畫的目的是找出子網路下有哪些主機提供服務, 目前只有簡單的偵測 Ping(ICMP), Web(80), DNS(open resolver), SSH(22), SMTP(25). 未來將陸續增加偵測服務的項目. 雖然已經有 nmap 等優秀軟體, 不過仍舊希望能發展出簡易的程式, 更希望能匯聚更多偵測點讓資料搜集時間縮短. 接下來將開始設計資料庫結構及提供查詢的API.

目前尚有資料來源的問題, 就是各國網段清單. 目前是從 ip2nation 計算出網段. 但是這個資料並不是即時資料, 所以如果有哪位大德知道去哪找免費的清單, 請不吝告訴在下.

專案網址: https://github.com/jengyic/IP_Research

Thursday, June 26, 2014

嘗試將大量的 IPv4 位址放在記憶體且快速找到

首先, 這是個緊急的需求, 所以沒時間慢慢磨演算法. 第一時間想到的是變成無符號整數放到陣列, 初始化時使用 quick sort 排序, 搜尋使用 binary search. 果真是太嫩了, 實作出來之後, 效能非常普通.

陣列搜尋

好吧! 只好拿出記憶用起雜湊表, 雜湊函數十分簡單. 第一版: 取高低 16 bits 進行 XOR 取得 bucket 位置, 再建立單向鍊結串列. 第二版為了有效縮短串列, 使用 24 bits 進行 XOR.

第二版

測試數據為從某台 TLD NS 的某一段時間所有來訪的 IPv4 (524,860筆), 搜尋測試為 100,000 次(命中與不命中次數為 1:1, 唯一缺點就是沒有每次跑雜湊函式, 有空再來重作一次測試). 測試結果如下.

測試結果

結論是適合的演算法比較重要, 繼續尋找更快的演算法.

題外話: printf 真是超級耗時的, 可以從不輸出資料的測試結果看出.

Saturday, October 19, 2013

目錄下大量檔案 piconv 轉碼的簡易 shell script

之前為了將一些 Big-5 資料庫檔案轉成 UTF-8 用過 iconv 但是遇到某些字元就會出錯無法完成翻譯。後來找到 piconv 可以完整將所有資料庫匯出檔案轉碼。今天為了看 SGU Season 1 找到簡體字幕,沒想到用 piconv 一樣沒出錯完成轉碼。

Google雲端硬碟公開分享 檔名 piconvTrans.sh

Friday, April 12, 2013

個人的網路架構

個人的網路架構, 大致上都是用廉價的產品兜出來. 總算有時間整理一下資料.