1 2 3 4 5 6 7 8 9 | struct _ethhdr { unsigned char h_dest[6]; // [00][01][02][03][04][05] target mac unsigned char h_source[6]; // [06][07][08][09][10][11] source mac #define _ETH_P_IP (0x0800) #define _ETH_P_ARP (0x0806) unsigned short h_proto; // [12][13] // payload... }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | struct _arphdr { unsigned short ar_hrd; // [00][01] format of hardware address unsigned short ar_pro; // [02][03] format of protocol address unsigned char ar_hln; // [04] length of hardware address unsigned char ar_pln; // [05] length of protocol address #define _ARP_REPLY (0x0002) #define _ARP_REQUEST (0x0001) unsigned short ar_op; // [06][07] ARP opcode (command) // use char[] against package unsigned char ar_sha[6];// [08][09][10][11][12][13] sender hardware mac unsigned char ar_sip[4];// [14][15][16][17] sender IP address unsigned char ar_tha[6];// [18][19][20][21][22][23] target hardware mac unsigned char ar_tip[4];// [24][25][26][27] target IP address }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | struct _iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) unsigned char ihl:4,version:4; // [00] Internet Header Length(ihl) #elif defined(__BIG_ENDIAN_BITFIELD) // 4bit ip header max length = 0xf*4 = 60 bytes unsigned char version:4,ihl:4; // [00] #else #error "check __LITTLE_ENDIAN_BITFIELD / __BIG_ENDIAN_BITFIELD" #endif unsigned char tos; // [01] unsigned short tot_len; // [02][03] ipheader and payload len unsigned short id; // [04][05] packet number unsigned short frag_off; // [06][07] unsigned char ttl; // [08] time to live #define _IPPROTO_TCP (0x06) unsigned char protocol; // [09] unsigned short check; // [10][11] unsigned int saddr; // [12][13][14][15] src ip unsigned int daddr; // [16][17][18][19] dst ip // The options start here. [20]~[59] // payload... }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | struct _tcphdr { unsigned short source; // [00][01] source port unsigned short dest; // [02][03] target port unsigned int seq; // [04][05][06][07] send sequence unsigned int ack_seq; // [08][09][10][11] ack sequence #if defined(__LITTLE_ENDIAN_BITFIELD) unsigned short res1:4,doff:4,fin:1,syn:1,rst:1,psh:1,ack:1,urg:1,ece:1,cwr:1; #elif defined(__BIG_ENDIAN_BITFIELD) unsigned short doff:4,res1:4,cwr:1,ece:1,urg:1,ack:1,psh:1,rst:1,syn:1,fin:1; #else #error "check __LITTLE_ENDIAN_BITFIELD / __BIG_ENDIAN_BITFIELD" #endif // [12][13] doff tcp hdr len unsigned short window; // [14][15] unsigned short check; // [16][17] unsigned short urg_ptr; // [18][19] // The options start here. [20]~[59] mss,wsopt,sack-premitted,sack,tspot ... // payload... }; |
歡迎光臨 資源共享吧|易語言論壇|逆向破解教程|輔助開發(fā)教程|網(wǎng)絡(luò)安全教程|m.rigasin.com|我的開發(fā)技術(shù)隨記 (http://m.rigasin.com/) | Powered by Discuz! X3.4 |