[雜記]測試ngrok 是否可以轉傳TCP 封包?

Lau Dai He
3 min readJul 16, 2020

--

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,因此趕快回家實作看看,明天再跟學員解釋。((抖

準備的材料有

  1. ngrok的帳號(為了使用 ngrok 的服務,記憶中以前應該不用註冊才對)
  2. ngrok 程式
  3. socket client / server (在此使用nc command,快速方便且又不用寫code XD)
  4. linux (非必要,純粹是linux比較習慣)
  5. tmux(非必要,純粹是方便、好看)
  6. peek(用來錄製gif圖檔)

實驗步驟

  1. 先在本地bind一個TCP Server (此實驗中port設定為8888)
  2. 檢查是否成功在本機bind TCP Server
  3. ngrok 反向代理TCP protocol(※注意 指令是 ngrok tcp {your port},而非ngrok http {your port})
  4. client 端發送 TCP 封包
  5. 檢查 Server 端是否有收到封包

相關對應指令如下:

指令可以依照上方的解釋與下方的附圖一同觀看,這樣就可以理解了。

nc -l 8888netstat -tlunp |grep 8888
./ngrok tcp 8888
test -n "2300" | nc -w1 {ip} {port}
此次實驗步驟詳細圖

結論

實驗結果與想像中的是一樣的,ngrok確實可以將資料回傳至原本的 Server 端,此次可算是實驗成功。OSI7層還在慢慢的做中學當中,這樣至少不會愧對於學校的老師了吧(XD

其他

在寫這篇文章時,意外看到tmux文章的後台資料,沒想到tmux的第一篇文章竟然有23個拍手,突然間感受到以前在讀其他作者的文章說讀者要給作者回饋的感受,第一次看到這麼多人有回饋真的會感動,雖然之前沒有說下篇會何時更新,但有人回饋後我至少比較會有動力繼續研究與撰寫,減少我冨樫的時間(哈

--

--

Lau Dai He
Lau Dai He

Written by Lau Dai He

Less is more. 2021/08/01起,主要會紀錄各種技術的精華重點文章,方向可能是Pyhton, Linux, WIndows等都有可能。文章內容精簡為主,搭配少部份的個人情感抒發等。(inspired by 路人甲的世界​-知乎作者)

No responses yet