2013-03-26 33 views
0

我創建了一個RAW套接字並將套接字選項設置爲「IP_HDRINCL」。我正在設置輸出UDP數據包中的標識字段,並將其發送出去。當數據包發送出去時,我發現這個字段變成了一個隨機數。我可以在嗅探捕獲中看到相同的結果。使用RAW套接字更改IP標頭中標識字段的問題

在不同的Windows XP機器上構建和測試時使用相同的代碼,即可正常工作。我可以看到輸出數據包的IP標頭中的標識字段具有與我設置的相同的值。

不知道怎麼回事。如果您有任何見解,請讓我來。

感謝,

雷努

回答

0

IP_HDRINCL自動設置將會IP數據包的某些字段的值原始套接字即可發送出去。

在你的情況下,如果數據包爲零,數據包ID將被覆蓋。 (是你的情況?)

這是情況:(從Raw Socket man page拍攝)

  +---------------------------------------------------+ 
      |IP Header fields modified on sending by IP_HDRINCL | 
      +----------------------+----------------------------+ 
      |IP Checksum   |Always filled in.   | 
      +----------------------+----------------------------+ 
      |Source Address  |Filled in when zero.  | 
      +----------------------+----------------------------+ 
      |Packet Id    |Filled in when zero.  | 
      +----------------------+----------------------------+ 
      |Total Length   |Always filled in.   | 
      +----------------------+----------------------------+ 
+0

感謝您的回答。我將它設置爲非零值。該代碼在Windows 7和一些Windows XP機器很奇怪地工作正常,即我看到標識字段具有我在傳出數據包中設置的值。同樣在同一臺XP機器中,有時它可以正常工作,有時候標識字段被覆蓋。 – user2211410 2013-03-27 01:27:32

+0

您是否嘗試將數據包的大小保持在機器的MTU大小之下?由於id字段用於IP分片,可能OS會對其進行修改。嘗試發送小(小於1500bytes)數據包並觀察發生了什麼。 – 2013-03-27 08:17:11

+0

我正在發送大小爲63字節的數據包,其中包括IP標頭,UDP標頭和有效載荷。此外,IP標頭中的分段偏移被設置爲0x4000,這對應於不分段標誌。奇怪的是ID字段在一臺XP機器中並沒有發生變化,並且突然停止工作,即被隨機數字覆蓋。 – user2211410 2013-03-27 11:17:19