一般我們的網卡都具備有DHCP Client功能,由DHCP Server發配IP,Router通常都具備有Server這功能的。我根據DHCP的規則,用電腦和網卡來做一個簡單的DHCP Server。
這支程式會用到以下的元件與方法:
- Grid : 表格,用來呈現IP分配與狀況
- Winpcap : 收送包API,所有收送包的過程都是透過這個API
- Thread : 把收包處理另外開個Thread,程式可以同時動作
先簡單說明一下DHCP封包,要完成DHCP協議,只需要來回4個封包就可以,分別是:
- Discover : Client發廣播Discover,問線上有哪個Server可以給我IP
- Offer : 線上Server接到之後,只要開啟DHCP功能,都會發出回應給你一個IP
- Request : Client收到Offer包,發送廣播Request包。
- ACK : Server再發給一個ACK,完成。
因此,Server和Client各處理2個包。
--流程圖--
--DHCP送包細部處理流程圖--
說明(利用抓到的DHCP封包改變幾個欄位再送出,這樣就不用去造一個完整封包):
1. 先判斷是不是來自Client端 - UDP Source Port = 68
2. 填入DA/SA,其中DA=原DHCP包的SA,SA則填入自己設定的值
3. 填入DIP/SIP,SIP是ServerIP,DIP去判斷這個IP有沒有被使用後填入
4. 計算IP checksum
5. UDP包,Port number互相對調,checksum不用算,填0就好,一般不檢查
6. 改變DHCP IP/Option值(時間,Submask,DNS,最後填入0xFF表示終結)
--程式執行圖--
--Router status頁面,可以看到剛剛設定進去的值
--完整Source Code(VC++ 2008 vaildated)
Download
--補充--
我也做了ARP和ICMP的Reply,當別人來Ping我的時候,我還可以回應(沒有驗證)。其實還有很多不完整的,不過大概就是這樣運作的了。
--延申--
假設電腦有2張網卡連接Router,一張接到WAN端,一張接到LAN端,接到WAN端的利用以上程式發配IP給Router,而接到LAN端的利用Router分配IP,那這樣就可以利用網卡去測試Router的效能(轉發率,掉包率,延遲,抖動等等)了。
Popular Posts
-
上禮拜某天,去問了老大關於乙太網路端口 Link 燈的意義,雖然被念說之前講那多次都會忘記,這次總算是融會貫通,再把這些記的得趕快寫下來以備後來查詢。 RJ-45 是一種乙太網路常見的接口,電話線的接孔也長這個樣子。以主機板的網路孔為例子,接上你的設備(電腦,交換機,路...
-
又是一個客戶的需求,客戶需要我們程式呼叫第三方軟體,還要這個第三方軟體的數據即時呈現在我們程式畫圖。但這個第三方程式只能輸出log file,只好不斷偵測程式創造這個log file之後,丟個訊息讓主程式知道,然後用唯獨方式去parser這個檔案內的資料。 反正做了一些複雜的...
-
自己在寫QoS軟體,但是對於QoS卻是一知半解,趁這個機會把很散亂的資料找齊,最後來做個整理,才不會過沒多久又忘記了! 【定義】 QoS指的意思是Quality of Service,表示在網路環境中,你送出的封包的品質,所謂品質越好,表示有越低的延遲,掉包和抖動現象,並...
-
這三天開始學C#視窗語言,寫C++久了,自然對很多地方的覺得很困惑,花很多時間在探索class結構,Form元件控制,message傳遞這些的。其實最主要的是自己寫的C++ DLL,有客戶拿去用C#來開發,遇到一些問題問我,我完全沒辦法解,只好自己跳下來瞭解。 會用到以下的元...
-
這篇稍微複雜一點,呼應先前說得架構,必須讓兩個執行程式之間要溝通,使用Message的話大約會在10多個毫秒(Millisecond)內完成,是最快又普遍的方式。程序上說起來很簡單,假設有A.exe和B.exe要溝通,先說單向的部份,那A.exe必須先找到B.exe,然後再丟訊...
-
最近花一個禮拜的時間,把DHCP的機制實際實現一個DHCP Client/Server程式,測試了三台WAN/LAN,都可以透過DHCP正確設定Router,因此得到一些小心得,為了可以通用所有的Router,找出最小公倍數的設定。 經過這樣的測試就會發現,有些感覺很便宜的網卡...
-
上次開會,公司老闆說:為何一個Router測試的功能,你API做了那久還沒弄出來,都用「年」來算的了。因為老實說,我根本沒有開始啊啊啊~最近比較空閒一點,想說來弄一下,結果公司居然找不到一台正常的Router,幾乎都有問題的。於是就趁中午休息空檔,去黃色小屋買了一台基本的一個WA...
-
這幾天因為要在開發的dll裡頭加上自動取得IP功能和WAN<->LAN互通功能,所以要瞭解DHCP,Ping等作用,最終要做出DHCP Client和Server,連同IPv6的部份也要一併瞭解。這邊單純講自動取得IP就好,因為WAN/LAN互打的封包較多一點,所以功...
-
我們那個很有想法的老闆,最近又想了一個新點子,希望我們的設備,可以讓遠端的2台裝置,互相溝通。一開始我想法是,有困難。以我們現有的設備都是走單機版,且利用網路2層結構來說,是很難的。首先我就不知道遠端那個設備在哪裡,IP,Gateway怎給我,等等。 但是後來我想想,站在軟體...
-
延續 上一篇 的Client/Server架構,在Server不變的情況下,新增新功能。主要是一個想法,不確定網路上測試網速的寫法是不是這樣。我的想法很簡單:我從Server或是Client端,傳一個固定大小檔案到另一端,然後再去除以開始和結束的間隔時間,就是網速。Client-...
1 意見:
請更新“下載”鏈接,鏈接不可用
張貼留言