2014-11-01 27 views
0

我一直在嘗試了一小會兒,以獲得從TCP數據包報頭中的偏移值和不斷收到的0。這裏的值是頭文件,我立足我的代碼掉的鏈接:有效載荷偏移值在netinet/tcp.h中?

http://unix.superglobalmegacorp.com/BSD4.4/newsrc/netinet/tcp.h.html

我正在使用tcpHdr-> th_off並且正在接收值0.我知道該值是4位長,所以上面的行可能不是我想要的。對於我使用th_flags值的標誌,然後按位執行並使用我正在查找的已定義標誌,但我沒有看到使用有效負載偏移值執行此操作的方法。我怎樣才能獲得有效載荷偏移值?

編輯:

這裏是我的tcpHdr指針的初始化:

packetSt += ipHdr->ip_hl*4; // Moves IP header pointer to the TCP header location. 
tcpHdr = (struct tcphdr*) packetSt; // My TCP header pointer. 

下面是我用得到的TCP偏移值行:

tcpHeader->th_off; 

我居然看到了我剛剛修復了代碼中的錯誤。這是以下幾點:

tcpHdr = (struct tcphdr*) (packetSt + sizeof(ipHdr)); 

改爲

tcpHdr = (struct tcphdr*) packetSt; 

既然我已經感動了packetSt提前由ipHrd-> th_hl。我會試試這個,但是如果這看起來正確的話,還是會想讓別人知道。

+0

你是否更改過tcpHdr的值?你的代碼在哪裏失敗? – dave 2014-11-01 16:00:23

回答

1

我建議使用this version of the TCP header代替,並取的偏移量(從結構的末端刪除UNALIGNED--這是一個tcpdumpism)。這不太依賴於1)C編譯器處理位域的方式和2)BYTE_ORDER是否設置正確。