資訊安全新知分享
NEITHNET 資安實驗室
gRPC 是一個開源的遠程過程呼叫 (RPC) 框架,最初由 Google 開發,現在是 Cloud Native Computing Foundation(CNCF) 的一個項目。gRPC 被設計用於跨網絡的伺服器和客戶端之間的高效通信。gRPC 的使用場景包括分布式系統、微服務架構、大規模數據處理等。它提供了一個高效、可擴展且語言無關的 RPC 框架,使得不同語言編寫的應用程序之間可以輕鬆地進行通信。
以下介紹gRPCurl這個工具。gRPCurl 是一個可以讓開發者們更方便與 gRPC 伺服器互動的工具,類似我們在使用 curl。
如果 gRPC 伺服器有使用 reflection.proto 的話,就可以不用載入 proto 的原始檔(或 protoset)去呼叫對應的方法,另外還可以伺服器有啟用的方法顯示出來。
接下來會使用 https://gitea.neithnet.com/gitea/liean_sun/grpc_example 來做範例
go run main.go 啟動 gRPC serve (預設使用 50051 port)
grpcurl -plaintext :50051 list (server 需啟用 reflection 才會顯示)
將會把 server 有註冊的所有 service 都顯示出來
grpcurl -import-path=./proto/helloworld -proto=helloworld.proto -plaintext :50051 list
在 server 沒有啟用 reflection 時,需要指定 proto 的路徑, gRPCurl 會根據你指定 proto 檔去跟 server 比對後顯示出有註冊在 server 上的 service
grpcurl -plaintext -d ‘{“name”:”World”}’ :50051 helloworld.Greeter/SayHello
(此範例是啟用了 reflection,若 server 沒有啟用 reflection 請指定 proto 檔)
grpcurl -plaintext -d <PAYLOAD> <HOST>:<PORT> <PACKAGE>.<SERVICE>/<METHOD>
<PAYLOAD> 請按照 proto 中的 request 填入
<HOST>:<PORT> 請輸入 gRPC server 的位置 (ex: localhost:50051)
<PACKAGE> 請按照 proto 中 package 填入 (如下圖範例: helloworld)
<SERVICE> 請按照 proto 中 service 填入 (如下圖範例: Greeter)
<METHOD> 請按照 proto 中 rpc 填入 (如下圖範例: SayHello)
參考資料
- grpc go example 以及系列教程
- GitHub – fullstorydev/grpcurl: Like cURL, but for gRPC: Command-line tool for interacting with gRPC servers
- grpc-go/Documentation/server-reflection-tutorial.md at master
- https://gitea.neithnet.com/gitea/liean_sun/grpc_example
更多資安訊息及防護策略,歡迎與NEITHNET資安專家聯繫:info@neithnet.com。