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 指令有興趣別忘了參考看看
同時也有2部Youtube影片,追蹤數超過5,470的網紅老闆,來點寇汀吧。Boss, CODING please.,也在其Youtube影片中提到,[老闆,來點寇汀吧。] #直播預告 #週四寫程式系列 - 寫個鍛鍊英文的即時互動遊戲吧 這週四(5/10)晚上十點整準時在Youtube上直播~ . 在這次直播中會來聊些Vue+socket.io相關的整合經驗, 聊聊最近製作互動裝置藝術使用socket做實時整合的被雷故事,以及來快速解析別人資料...
「socket程式」的推薦目錄:
- 關於socket程式 在 矽谷牛的耕田筆記 Facebook 的最佳解答
- 關於socket程式 在 軟體開發學習資訊分享 Facebook 的最佳解答
- 關於socket程式 在 軟體開發學習資訊分享 Facebook 的最佳解答
- 關於socket程式 在 老闆,來點寇汀吧。Boss, CODING please. Youtube 的精選貼文
- 關於socket程式 在 TechaLook 中文台 Youtube 的最佳貼文
- 關於socket程式 在 [問題] 關於socket程式與TCP觀念- 看板C_and_CPP 的評價
- 關於socket程式 在 簡單的socket programming 入門筆記。 - GitHub 的評價
- 關於socket程式 在 TCP Socket Programming 學習筆記 - 雷德麥的藏書閣 的評價
- 關於socket程式 在 tcp socket範例2023-精選在臉書/Facebook/Dcard上的焦點新聞 ... 的評價
- 關於socket程式 在 tcp socket範例2023-精選在臉書/Facebook/Dcard上的焦點新聞 ... 的評價
- 關於socket程式 在 C語言通訊程式練習Socket server and client ... - YouTube 的評價
socket程式 在 軟體開發學習資訊分享 Facebook 的最佳解答
NT 430 特價中
系統程式設計 – 從頭學習 Netlink Socket、作業系統、可載入核心模組、C 程式設計
https://softnshare.com/netlinksockets/
socket程式 在 軟體開發學習資訊分享 Facebook 的最佳解答
課程特價中
學習 C# .Net 的 Socket 程式設計,使用 async/await 建立分散式應用程式,建構類別程式庫( class library )
https://softnshare.com/tcpip-socket-programming-for-coders-using-csharp-net/
socket程式 在 老闆,來點寇汀吧。Boss, CODING please. Youtube 的精選貼文
[老闆,來點寇汀吧。]
#直播預告
#週四寫程式系列 - 寫個鍛鍊英文的即時互動遊戲吧
這週四(5/10)晚上十點整準時在Youtube上直播~
.
在這次直播中會來聊些Vue+socket.io相關的整合經驗,
聊聊最近製作互動裝置藝術使用socket做實時整合的被雷故事,以及來快速解析別人資料,
利用Vue框架製作成幫你找回國中逝去英文能力的遊戲(誤
.
最近一年來終於快要忙到尾聲,
就來重新調製雞尾酒啦~
每個禮拜四就來一起聊天順便寇汀吧!
.
socket程式 在 TechaLook 中文台 Youtube 的最佳貼文
這次 Tech a Look的 凱文為各位開箱介紹 ASRock 華擎主機板,以下就是FM2A75M-ITX主機板的產品特色 :
- 支援 AMD Socket FM2 腳位中央處理器 : AMD APU 中央處理器整合CPU和GPU顯示技術,
並支援AMD Dual Graphics 功能,而A系列 APU 上整合 AMD Radeon HD 7000 顯示核心,提供了世界上最先進的圖形顯示技術。
- 支援雙通道 DDR3 2600+(OC) : 主機板配備 2 根記憶體插槽,可支援雙通道記憶體,最高支援 2600+(超頻)MHz DDR3 記憶體。
- X-Boost 一鍵超頻 : 華擎 X-Boost 一鍵超頻技術專為智慧型超頻設計,能夠釋放 CPU 隱藏的潛能。只需在開機時按下「X」鍵, X-Boost 超頻技術就可以自動超頻相關元件,使性能提升達 15.77%。
- 重啟至 UEFI 功能 : 華擎「重啟至 UEFI」技術專門為那些需要經常使用 UEFI 的使用者所設計,開啟此項功能,便可設定讓您的系統在下一次開機時,自動進入 UEFI BIOS 設定程式。
- Easy RAID Installer : Easy RAID installer 能在不使用軟式磁碟機的情況下, 輕鬆安裝 RAID 驅動程式;使用者只需在 UEFI 裡開啟此功能, 便能將支援光碟裡的 RAID 驅動程式複製至USB 儲存裝置, 以方便安裝到新的 PC 裡。
- XFast 技術 : XFast RAM / XFast LAN / XFast USB
XFast RAM可從系統記憶體創造虛擬磁碟來加速系統處理效能,而XFast LAN程式將線上遊戲設為最高優先順序後,即可減少遊戲中發生延遲的頻率,以及XFast USB技術加強USB的速度。
**以上資料參考 華擎 ASRock 官方網站**
更多產品訊息請瀏覽 華擎 ASRock 產品網址 :
http://www.asrock.com.tw/mb/AMD/FM2A75M-ITX/index.tw.asp
想知道更多關於3C產品資訊以及更精彩的示範教學內容~請持續鎖定 Tech a Look !!!
Tech a Look 網址 : http://www.techalook.com.tw/
FaceBook : http://www.facebook.com/techalook.com.tw
socket程式 在 簡單的socket programming 入門筆記。 - GitHub 的推薦與評價
接著我們要介紹 bind ,這個函式可以讓前面創建的 socket 實際綁定到本機的某個 port 上面,這樣子 client 端在送資料到某個 port 的時候,我們寫的 server 程式才可以在 ... ... <看更多>
socket程式 在 TCP Socket Programming 學習筆記 - 雷德麥的藏書閣 的推薦與評價
有別於IPC ,Socket 是用於網路上不同程序的互相溝通,比如說流覽器要怎麼跟Web Server 拿取資料、Messenger 訊息的收發、 ftp ... Server 範例程式 ... ... <看更多>
socket程式 在 [問題] 關於socket程式與TCP觀念- 看板C_and_CPP 的推薦與評價
目前想要做一個測試:
當一個主機使用 listen, accept 等函式做為 TCP server 時
它同一個時間最多能建立幾個 TCP 連線呢?這個限制又是因為什麼?
對於不同的作業系統(ubuntu Linux, Windows)是否會有不同的表現?
server 端程式碼:https://nopaste.csie.org/65edc
用無窮迴圈不斷的接受連線,什麼事都不做,停留在 ESTABLISHED 狀態
client 端程式碼:https://nopaste.csie.org/c0da0
用無窮迴圈不斷的 connect,同樣的什麼都不做,停留在 ESTABLISHED 狀態
目前發現有兩個因素會限制連線的上限
ulimit -n : 單一 process 能使用的 File descriptor 上限
sysctl -w net.ipv4.ip_local_port_range="1024 65000" : 能用的 local port 範圍
不過對於目前測試的結果,有些狀況不太明白
1. 使用 netstat -n 觀察,server 端的 port 一律是使用 53764
https://james545.myweb.hinet.net/1.jpg
其實我不太懂為什麼都是同一個 port 呢?這麼多的 client 可以用同一個?
2. 我是這麼執行程式的:
server 端:./server 1234 ( server 監聽 TCP Port 1234 )
client 端:./client 1234 ( server 的 IP 寫死在程式裡, 連至 Port 1234 )
不過 client 大約建立六萬的連線後,就會發生錯誤訊息
connect: Cannot assign requested address
判斷是 client 自己的 local port 用盡了,即使再開啟另一個 process 也相同
這個時候就必須要再用另外一部電腦來測試了
有沒有辦法解決這個問題呢?
3. 要像這樣測試 TCP 連線的上限,還有沒有其他的辦法呢?
(譬如說現成的工具套件?)
4. 其實我一直不太能把 socket API 與 TCP/IP 的觀念很好的連結在一起
譬如說,我不懂 accept 與 connect 這兩個函式是怎麼搭配的
關於這個,有沒有比較好的參考資料呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
※ 編輯: james732 來自: 140.117.171.46 (04/09 04:58)
... <看更多>