Jason Lee

The fastest way to achieve success is to first help others succeed

tcp

TCP連線狀態之意義

TCP連線狀態之意義:(謝謝善心人士) LISTEN:表示等待從任何遠端 TCP 和 port 而來的連結要求。 SYN-SENT:表示在送出連結要求後,等待與其相對應的連結要求。 SYN-RECEIVED:表示在接收並傳送出連結要求後,等待連結要求認可的確認。 ESTABLISHED:表示一個 open connection ,在資料收到後可傳送給 user ,這是在連結的資料傳輸階段中的一個標準狀態。 FIN-WAIT-1:表示等待從遠端 TCP 而來的連結終止要求,或等待先前送出的連結終止要求的認可。 FIN-WAIT-2:表示等待從遠端 TCP 而來的連結終止要求。 CLOSE-WAIT:表示等待從本地 user 而來的連結終止要求。 CLOSING:表示從遠端 TCP 而來的連結終止要求之確認。 LAST-ACK:表示等待先前傳送給遠端 TCP 的連結終止要求之確認。 TIME-WAIT:表示等待一段足夠長的時間,以確保遠端的 TCP 已接收到他的連結終止要求的確認。 CLOSED:表示已不再處於連結狀態。
1 min read
ddos

slow-http-attack

slow http 攻擊主要的手法就是故意一直傳送 header 或 body 給 server, 讓 server 一直接收 request header or request body, 這樣的目的是要一直佔據 server 的 connection 讓 server 的可用 connection 數減少,這也是常看到的 DDOS 攻擊手法之一 我們可以用 slowhttptest 工具來檢測自己的 server 1. 在 ubuntu 下的安裝 sudo apt-get update sudo apt-get install slowhttptest 2. 模擬一直傳送 request header slowhttptest -c 1000
1 min read
linux

WinSCP 使用一般 user 帳號登入使用 sudo 傳檔

有時候在用 WinSCP 傳檔時遇到只能用一般 user 帳號登入系統(root 帳號被停用),傳檔到目的地卻發現沒有權限,常常就是先傳到自己的 home 目錄,然後在用 cli 使用 sudo 權限將檔案複製到目的地,現在不用這麼麻煩囉,只要以下幾個步驟,就可以在 WinSCP 傳檔囉: 1. 打開 WinSCP 的站台管理員,選擇你要編輯的站台 2. 按下編輯(Edit)->進階(Advanced…) 3. 在 環境(Environment)->SFTP 頁面,於 SFTP 伺服器(SFTP Server) 的欄位手動輸入「sudo /usr/lib/sftp-server」*ps1
1 min read
golang

Golang 時區

time 的時區 Golang 裡面取現在時間 now := time.Now() println("now", now.String()) 這樣會得到now 2016-08-09 19:21:24.0960724 +0800 CST ,這代表 golang 的 time 裡面有包含 timezone 的資訊了 時區轉換 如果想把現在的時區轉換到不同的時區,同時時間要改變,例如:我想把現在 UTC + 8 (台北時間)改成 UTC-4 (美東時間) package main import "time" func main() { now := time.Now() println("now", now.String(
1 min read
nuget

nuget.config per project

我們常常開發一個項目會在公司架設自己的 nuget server,然後透過內部的 nuget server 來發布一些共用的 packages。但我們應該怎麼做讓每個項目知道這個內部的 nuget server 路徑呢? 其實只需要把 nuget.config 放在 sln 相同階層就好了。 Here's another example: if you have a solution file C:\Projects\CustomerA\AwesomeSolution\AwesomeSolution.sln, all NuGet clients will load configuration values from: C:\Projects\CustomerA\AwesomeSolution\NuGet.config C:\Projects\CustomerA\
1 min read
git

delete a file from git repository's history

有時候剛開發軟件的時候,會不小心把一些比較敏感的資料存進 GIT 裡面,例如: 密碼等等,即使我們把檔案刪除了,在 GIT 裡面的 history 也會看到,所以我們該如何徹底刪除呢? PS. 這邊只能用 bash 裡面的 git command 1 把Rakefile 改為你想刪除的檔案名稱 git filter-branch --force --index-filter \ 'git rm --cached --ignore-unmatch Rakefile' \ --prune-empty --tag-name-filter cat -- --all 2. push to git git push origin --force --all References: http://stackoverflow.com/questions/
1 min read
systemd

Systemd Journal

從 centos7 開始,改用 systemd-journald 來記錄 system 的 log 了。 那我們要如何設定 journal 使用的空間大小呢? journal 有兩種儲存方式,一種是 memory,另外一種是 disk。預設會兩種都會自己看系統的資源來決定空間大小, memory: 10% 或是 4G ,看系統目前有效的值看哪個比較小系統就會用哪個 首先打開 journald 的設定檔 nano /etc/systemd/journald.conf journalctl -u systemd-journald 1. 要查詢 systemd 下面的一個 unit 的 log $journalctl -u {service} 2. systemd 的 log
1 min read
systemd

Create systemd unit file

我們需要程序一直在背後執行,當 process 因為不明的原因死掉後,必須要有人可以自動從起它,這就是這邊我們用 systemd 的目標。 1. 首先建立一個 service 的 unit file 2. 把他複製到 /lib/systemd/system (需要有寫入的權限喔, 例如: root) 3. 啟動 ( enable) 我們的 service $ sudo systemctl enable application.service 4. 開始服務 $service application.service restart 如果想重啟 systemd 而不 reboot 的話,sudo systemctl daemon-reload Systemd Unit example [Unit]
1 min read
git

Microsoft TFS 轉 GIT

今天剛好把 TFS 版本控制轉移到 GIT 來 (包含全部過往的紀錄),順便筆記一下。 1. 我們是透過一個 open source工作來轉移 https://github.com/git-tfs/git-tfs 2. 首先先透過 choco 來下載 choco install gittfs 3. git tfs clone http://tfs:8080/tfs/DefaultCollection $/some_project ,當時讓我最不懂的地方是後面的 $/some_project,原本以為是本地端的路徑,經研究後才知道那是指 server 上 tfs 專案的位址,然後她會把項目,拷貝到當前目錄。 Reference: https://github.com/git-tfs/
1 min read
golang

golang test

執行全部的 test cases $ go test 執行單一一個 test case 假設我想執行 TestABC() 這個 test case $ go test -run TestABC 執行單一檔案裡面的全部 test case 假設我有一個 router_test.go,而我想跑裡面全部的 test cases,首先我們必須先把裡面全部 test case 名稱統一改成 TestRouter 開頭,例如 TestRouterABC,這樣做的原因是因為之後我們要用 regular expression 來執行 $ go test -run "TestRouter." 執行上面的 command 後(記得在TestRouter後面是有一個點的),全部由 TestRouter 開頭的
1 min read
tcp

TCP 連線數

TcpTimedWaitDelay TCP的 TIME_WAIT 狀態是指TCP/IP 必須經過多久,才能釋出已關閉的連線及重複使用它的資源。在 Windows 的環境下預設是4分鐘,Ubuntu 的預設是 60秒 (Linux 下則會依據不同 Distribution 版本而有不同的預設值,但都可以調整其時間長短 )。如果程式在短時內會建立大量的Http請求,不管事接收或發送,可以藉由縮減這個項目的值,TCP/IP 可以更快釋出已關閉的連線,提供更多資源給新的連線。 在 windows 下面的修改方式 1. 啟動 regedit 指令,瀏覽至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters 登錄次機碼,建立名稱為 TcpTimedWaitDelay 的新 REG_DWORD 值。 2. 將值設為十進位
2 min read