版本(4bit)
報頭長度(4bit)
優先順序和服務型別(8bit)
總長度(16bit)
標識(16bit)
標誌(3bit)
分段偏移(13bit)
存活期(8bit)
協議(8bit)
報頭校驗和(16bit)
源ip位址(32bit)
目的ip位址(32bit)
選項(0或32bit,若有的話)
資料(可變)
版本ip版本號。
報頭長度32位字的報頭長度(hlen)。
優先順序和服務型別服務型別描述資料報將如何被處理。前3位表示優先順序位。
總長度包括報頭和資料的資料報長度。
標識唯一的ip資料報值。
標誌說明是否有資料被分段。
分段偏移如果資料報在裝人幀時太大,則需要進行分段和重組。分段功能允許在網際網路上存在有大小不同的最大傳輸單元(mut)。
存活期(ttl)存活期是在資料報產生時建立在其內部的乙個設定。如果這個資料報在這個ttl到期時仍沒有到達它要去的目的地,那麼它將被丟棄。這個設定將防止ip包在尋找目的地的時候在網路中不斷迴圈。
協議上層協議的埠(tcp是埠6;udp是埠17(十六進製制)) 。同樣也支援網路層協議,如arp和icmp。在某些分析器中被稱為型別字段。下面將給出這個欄位更詳細的說明。
報頭校驗和只針對報頭的迴圈冗餘校驗(crc)。
源ip位址傳送站的32位ip位址。
目的ip位址資料報目的方站點的32位ip位址。
選項用於網路檢測、除錯、安全以及更多的內容。
資料在ip選項字段後面的就是上層資料。
對應於jpcap包中ippacket類:看一下具體的文件,得到了對應的關係:
構造ipv4包的方法
method summary
void
setipv4parameter(int priority,
boolean d_flag, boolean t_flag, boolean r_flag, int rsv_tos,
boolean rsv_frag, boolean dont_frag, boolean more_frag, int offset,
int ident, int ttl, int protocol, j**a.net.inetaddress src,
j**a.net.inetaddress dst)
sets the ipv4 parameters
例項:ipp. setipv4par ameter ( 0, false, false, false,0, tr ue , tr ue , false, 4, 1, 255, 230, / / 230 未定義協議
new ipaddr ess( 110. 110. 17. 101) ,
new ipaddr ess( "210. 40. 7. 149") ) ;
version:v4/v6
priority:優先權 /** priority (class) (v4/v6) */
public byte priority;
服務型別設定: d_flag - ip flag bit: [d]elay 表示要求有更低的時延
t_flag - ip flag bit: [t]hrough 表示要求有更高的吞吐量
r_flag - ip flag bit: [r] eliability 表示要求更高的可靠性
rsv_tos - type of service (tos) 服務型別
資料偏移設定: rsv_frag - fragmentation reservation flag 有無碎片標識
dont_frag - don't fragment flag 末尾碎片標識
more_frag - more fragment flag 尚有碎片表示
offset – offset 資料塊偏移
ip資料報識別標誌:ident – identifier 上層協議呼叫
offset:分段偏移
ttl:存活時間 time to live
protocol:協議(int型別)這個是原始碼中給出的協議型別號
/** protocol number for icmp */
public static final short ipproto_icmp = 1;
/** protocol number for igmp */
public static final short ipproto_igmp = 2;
/** protocol number for ip in ip */
public static final short ipproto_ip = 4;
/** protocol number for tcp */
public static final short ipproto_tcp = 6;
/** protocol number for udp */
public static final short ipproto_udp = 17;
/** protocol number for ipv6 */
public static final short ipproto_ipv6 = 41;
/** protocol number for ipv6 hop-by-hop option */
public static final short ipproto_hopopt = 0;
/** protocol number for routing header for ipv6 */
public static final short ipproto_ipv6_route = 43;
/** protocol number for fragment header for ipv6 */
public static final short ipproto_ipv6_frag = 44;
/** protocol number for ipv6 icmp */
public static final short ipproto_ipv6_icmp = 58;
/** protocol number for no next header header for ipv6 */
public static final short ipproto_ipv6_nonxt = 59;
/** protocol number for destination option for ipv6 */
public static final short ipproto_ipv6_opts = 60;
src:源ip
dst:目的ip
之後是基於ip 資料報的洪水攻擊的原理:
用未定義協議字段構造ip 包進行洪水攻擊構造乙個ip 資料報, 在上層協議中用不屬於任何已分配定義的協議型別表示此欄位。目的ip 指向欲攻擊主機, 源ip 採用偽
裝, 服務型別欄位選預設, 資料塊偏移設為無碎片無偏移, t tl 設為最大值255, 協議字段填入任一未分配的協議型別, 最後在校驗和處填入正確的校驗碼進行傳送。注意此時
只進行了ip 資料報首部校驗和的計算, 對ip 資料報的資料段可進行隨意的構造。
由於ip 校驗碼無誤, ip 資料報是合理的, 不會在傳輸過程中因協議欄位的變化而丟棄。但是由於其上層協議是未知的, 所以到達目的主機後不能進行進一步的資料處理,
也不會像syn 洪水攻擊那樣進行tcp 資料報校驗和的檢驗。此時, 系統認為此資料報的協議沒有連同資料報傳送過來或是系統不支援此協議, 於是直接向傳送此資料報的源ip
位置回執乙個icmp 包, 以通知對方ip 資料報的協議未能同時送達。
在這種情況下, 被攻擊主機雖然沒有建立乙個連線, 也不會有等待延時, 但是大量的此種資料報傳送出來進行攻擊, 特別是形成ddos 攻擊時, 系統資源會消耗殆盡, 造成很
大的危害。
icmp的回送型別:32
protocol unreachable——協議不可達
x
解析IP資料報
include stdafx.h include winsock2.h include ws2tcpip.h include iostream.h include stdio.h typedef struct ip header byte servicetype 服務型別 word totallen...
IP首部資料報格式大解析
p資料報首部格式 tcp ip協議定義了乙個在網際網路上傳輸的包,稱為ip資料報 ip datagram 這是乙個與硬體無關的虛擬包,由首部和資料兩部分組成,其格式如圖所示。首部的前一部分是固定長度,共20位元組,是所有ip資料報必須具有的。在首部的固定部分的後面是一些可選字段,其長度是可變的。首部...
IP資料報報文中的頭部格式設定
在進行網路程式設計時,需要自己來設定乙個ip報文,然後再傳送到網絡卡上,以下資料是我在檢視了多人文章整理得到。版本 version 它標識了資料報ip版本號。4位字段的值設定為二進位制的0100表示ip版本4 ipv4 設定為0110表示ip版本6 ipv6 首部長度 佔4位。即從0000 1111...