[雜記]測試ngrok 是否可以轉傳TCP 封包?
Test ngrok forward TCP packet .
Author:Lau Dai
Date:2020/07/16
今天上班仍然是忙碌的一天,下班後有學員突然問我說 ngrok 是否可以從外部接收資料,並且轉傳回原本的內部Web Service。
當下認為應該是可行的,畢竟外部都可以發送 request 到 Web Service 且可以拿到respone了,應該是沒有道理不能互通。
秉持著好奇的精神,加上我對於 WebService 的 respone 實在不懂,因此直接幹更底層的 socket 來實作看看,當下使用 Python code 確實可以得到外部傳入的資料。但回家後愈想愈不對勁,因為我的 client 端好像沒有 bind 到 ngrok 提供的 reverse tunnel IP,因此趕快回家實作看看,明天再跟學員解釋。((抖
準備的材料有
- ngrok的帳號(為了使用 ngrok 的服務,記憶中以前應該不用註冊才對)
- ngrok 程式
- socket client / server (在此使用nc command,快速方便且又不用寫code XD)
- linux (非必要,純粹是linux比較習慣)
- tmux(非必要,純粹是方便、好看)
- peek(用來錄製gif圖檔)
實驗步驟
- 先在本地bind一個TCP Server (此實驗中port設定為8888)
- 檢查是否成功在本機bind TCP Server
- ngrok 反向代理TCP protocol(※注意 指令是 ngrok tcp {your port},而非ngrok http {your port})
- client 端發送 TCP 封包
- 檢查 Server 端是否有收到封包
相關對應指令如下:
指令可以依照上方的解釋與下方的附圖一同觀看,這樣就可以理解了。
nc -l 8888netstat -tlunp |grep 8888
./ngrok tcp 8888test -n "2300" | nc -w1 {ip} {port}
結論
實驗結果與想像中的是一樣的,ngrok確實可以將資料回傳至原本的 Server 端,此次可算是實驗成功。OSI7層還在慢慢的做中學當中,這樣至少不會愧對於學校的老師了吧(XD
其他
在寫這篇文章時,意外看到tmux文章的後台資料,沒想到tmux的第一篇文章竟然有23個拍手,突然間感受到以前在讀其他作者的文章說讀者要給作者回饋的感受,第一次看到這麼多人有回饋真的會感動,雖然之前沒有說下篇會何時更新,但有人回饋後我至少比較會有動力繼續研究與撰寫,減少我冨樫的時間(哈