ref: https://www.hwchiu.com/ping-implementation.html
本篇文章是難得的自產文章,該文章分享一下自己觀察不同 ping 指令與不同發行版本下的實作方式,主要探討的點是 ICMP 封包是如何產生的。
就我目前認知,目前至少有三種常見方式來設定 ping 指令讓其能夠順利收送 ICMP 封包。
常見的 TCP/UDP 應用程式實際上都是讓 Kernel 幫忙處理底層的 L3/L4 封包,使用者的應用程式則是專注於資料的交換與處理,簡單的說法就是專心處理 L7 資料。
但是 ICMP 封包不同於上述的 TCP/UDP 封包,一種方式就是透過 RAW Socket 的形式自行去拼湊組裝 ICMP 格式,自行處理一切封包的處理。
RAW Socket 本身也不允許每個使用者都能輕易開啟,必須要有相關的權限才可以執行,因此一種 PING 的實作方式就是透過 SetUID 的方式,讓所有能夠執行 ping 指令的使用者會短暫瞬間提權變成 Root 的身份
也因為是 Root 就可以順利的開啟 RAW Socket。
SetUID 強大且方便,簡簡單單就可以讓使用者瞬間變成 Root,但是也因為簡單好像就安全角度來看會覺得不太嚴謹,畢竟我想要的只是一個能夠開啟 RAW Socket 的權限,你去把整個 Root 都送給我。
因此第二種實作方式就是透過 Linux Capability 來達到更細緻化的權限控管,讓任何可以執行 ping 指令的使用者都可以短暫獲得 cap_net_raw 的權限,最終順利的開啟 RAW Socket
而第三種方式則是跳脫的權限的概念,與其透過 RAW Socket 來自行打造 ICMP 封包,不如讓 Linux Kernel 幫忙處理 ICMP 封包,ping 的程式只要跟 Kernel 要求建立一個基於 ICMP 協定的 socket 即可。
透過第三種方式最終可以達到 setuid-less 的架構,ping 的應用程式再也不需要任何的特殊權限,每個使用者都可以順利執行來收送 ICMP 封包。
文章內會針對三種方式進行實驗跟觀察,對 PING 指令有興趣別忘了參考看看
「icmp ping」的推薦目錄:
- 關於icmp ping 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於icmp ping 在 BorntoDev Facebook 的精選貼文
- 關於icmp ping 在 純靠北工程師 Facebook 的最讚貼文
- 關於icmp ping 在 ICMP Ping library for Go - GitHub 的評價
- 關於icmp ping 在 ICMP Ping Won't Disable - Stack Overflow 的評價
- 關於icmp ping 在 ICMP ping - Broadcom WICED API Reference Guide - GitHub ... 的評價
- 關於icmp ping 在 ICMP and the Ping Command - YouTube 的評價
icmp ping 在 BorntoDev Facebook 的精選貼文
🔥 ดีจ้าเพื่อน ๆ ทุกคนนนน วันนี้มาพบกับสรุปสั้น ๆ กันอีกแล้ว!! กับความรู้เรื่อง ICMP อีกหนึ่ง Protocol สำคัญในการส่งข้อมูล
.
แล้วเจ้า ICMP มันคืออะไร มีรูปแบบยังไง วันนี้เรามาหาคำตอบไปพร้อมกันเลยจ้า!!!
.
✨ ICMP คือ การแจ้งหรือแสดงข้อความจากระบบ เพื่อบอกให้ผู้ใช้รู้ว่า เกิดอะไรขึ้นในการส่งผ่านข้อมูลนั้น ซึ่งปัญหาส่วนมากที่พบคือ ส่งไปไม่ได้ หรือปลายทางรับข้อมูลไม่ได้
.
ICMP นั้นยังถูกเรียกใช้งานจาก Server และ Router เพื่อแลกเปลี่ยนข้อมูลที่ใช้ควบคุมอีกด้วย
.
ICMP ทำงานควบคู่กับ IP Protocol โดยจะฝังข้อความต่าง ๆ ลงไปใน IP datagram
.
🌈 ICMP มีรูปแบบข้อความอยู่ 2 แบบ
🔸 ICMP Error Message: ข้อความแจ้งข้อผิดพลาด
🔸 ICMP Query: ข้อความเรียกขอข้อมูลเพิ่ม
.
👉 ส่วนมากนิยมนำมาเป็นเครื่องมืออย่างหนึ่งในการช่วยทดสอบเครือข่าย เช่น ใช้คำสั่ง Ping ไว้ทดสอบว่า Server ยังมีชีวิตรอดอยู่ไหมนั่นเอง!!
.
borntoDev - 🦖 สร้างการเรียนรู้ที่ดีสำหรับสายไอทีในทุกวัน
icmp ping 在 純靠北工程師 Facebook 的最讚貼文
#純靠北工程師2r9
中午午餐的時候,同桌的文書小妹在問最近很紅的中國要求盡快讓台商包機回台的事情,小妹不懂這裡面有什麼問題。
同事A:這是中國打算DDoS台灣的醫療防疫系統,當然要做好防備
同事B:還是綜合手法的DDoS攻擊,很煩。
同事C:我看到有SYN flood、ICMP flood……還有啥
同事A:還有Death Ping啊
我:UDP flood也有吧
小妹:我吃飽先走啦~~
👉 去 GitHub 給我們🌟用行動支持純靠北工程師 https://github.com/init-engineer/init.engineer
📢 匿名發文請至 https://kaobei.engineer/cards/create
🥙 全平台留言 https://kaobei.engineer/cards/show/3573
icmp ping 在 ICMP ping - Broadcom WICED API Reference Guide - GitHub ... 的推薦與評價
Functions for ICMP echo requests (Internet Control Message Protocol) This is commonly known as ping. Function Documentation. wiced_result_t wiced_ping, ( ... ... <看更多>
icmp ping 在 ICMP Ping library for Go - GitHub 的推薦與評價
A simple but powerful ICMP echo (ping) library for Go, inspired by go-fastping. Here is a very simple example that sends and receives three packets:. ... <看更多>