與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. |
+----------------------+----------------------------+
感謝您的回答。我將它設置爲非零值。該代碼在Windows 7和一些Windows XP機器很奇怪地工作正常,即我看到標識字段具有我在傳出數據包中設置的值。同樣在同一臺XP機器中,有時它可以正常工作,有時候標識字段被覆蓋。 – user2211410 2013-03-27 01:27:32
您是否嘗試將數據包的大小保持在機器的MTU大小之下?由於id字段用於IP分片,可能OS會對其進行修改。嘗試發送小(小於1500bytes)數據包並觀察發生了什麼。 – 2013-03-27 08:17:11
我正在發送大小爲63字節的數據包,其中包括IP標頭,UDP標頭和有效載荷。此外,IP標頭中的分段偏移被設置爲0x4000,這對應於不分段標誌。奇怪的是ID字段在一臺XP機器中並沒有發生變化,並且突然停止工作,即被隨機數字覆蓋。 – user2211410 2013-03-27 11:17:19