我寫了一個小應用程序來試圖顯示捕獲的數據包的協議頭。我的所有數據包都用libpcap的pcap_loop捕獲。我的程序工作方式如下:我根據if_ether.h ip.h和tcp.h中定義的結構編寫了自己的頭文件。 pcap_loop設置一個字符指針指向數據包的開頭,然後我逐步遍歷數據包,每次都轉換爲適當的結構,然後按指針的大小遞增指針。現在重要的是要記住我的問題不是代碼特定的;我的代碼可以工作,但是有些邏輯缺陷我不能解決;請記住我的數據包是通過同一臺機器,不同的端口發送的(我使用telnet發送數據到微型python服務器):本地主機上的OSI層
1.當報文發送時,以太網報頭不顯示任何看起來正確的內容通過本地主機(當我使用我的程序上的互聯網數據包,MAC地址dos doseded雖然)
2.通過反覆試驗,我已經確定結構iphdr啓動後,數據包緩衝區開始剛好16個字節,與預期的14字節相反,以太網報頭的大小爲
那些觀察結果導致我提出以下問題: 當數據包是森通過本地主機,我們是否使用第二層協議? 是否有任何分離數據包頭的內容? 在ip.h和tcp.h中定義的iphdr和tcphdr結構是否已過時?
謝謝!回答這個問題!另外,在解碼iphdr時,我如何知道是否設置了任何選項?據我瞭解,這改變了標題的大小。最後,如果協議是ipv6而不是ipv4會發生什麼情況? – Quantaliinuxite
這些是單獨的問題,應該單獨詢問,以便他們自己給出答案。 –