-
Notifications
You must be signed in to change notification settings - Fork 2
/
header.h
78 lines (73 loc) · 2.28 KB
/
header.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// Ethernet header
struct ethheader
{
u_char ether_dhost[6]; // destination host address
u_char ether_shost[6]; // source host address
u_short ether_type; // IP? ARP? RARP? etc
};
// IP Header
struct ipheader
{
unsigned char iph_ihl : 4, // IP header length
iph_ver : 4; // IP version
unsigned char iph_tos; // Type of service
unsigned short int iph_len; // IP Packet length (data + header)
unsigned short int iph_ident; // Identification
unsigned short int iph_flag : 3, // Fragmentation flags
iph_offset : 13; // Flags offset
unsigned char iph_ttl; // Time to Live
unsigned char iph_protocol; // Protocol type
unsigned short int iph_chksum; // IP datagram checksum
struct in_addr iph_sourceip; // Source IP address
struct in_addr iph_destip; // Destination IP address
};
// ICMP Header
struct icmpheader
{
unsigned char icmp_type; // ICMP message type
unsigned char icmp_code; // Error code
unsigned short int icmp_chksum; // Checksum for ICMP Header and data
unsigned short int icmp_id; // Used for identifying request
unsigned short int icmp_seq; // Sequence number
};
// UDP Header
struct udpheader
{
u_int16_t udp_sport; // source port
u_int16_t udp_dport; // destination port
u_int16_t udp_ulen; // udp length
u_int16_t udp_sum; // udp checksum
};
// TCP Header
struct tcpheader
{
u_short tcp_sport; // source port
u_short tcp_dport; // destination port
u_int tcp_seq; // sequence number
u_int tcp_ack; // acknowledgement number
u_char tcp_offx2; // data offset, rsvd
#define TH_OFF(th) (((th)->tcp_offx2 & 0xf0) >> 4)
u_char tcp_flags;
#define TH_FIN 0x01
#define TH_SYN 0x02
#define TH_RST 0x04
#define TH_PUSH 0x08
#define TH_ACK 0x10
#define TH_URG 0x20
#define TH_ECE 0x40
#define TH_CWR 0x80
#define TH_FLAGS (TH_FIN | TH_SYN | TH_RST | TH_ACK | TH_URG | TH_ECE | TH_CWR)
u_short tcp_win; // window
u_short tcp_sum; // checksum
u_short tcp_urp; // urgent pointer
};
// Psuedo TCP header
struct pseudo_tcp
{
unsigned saddr, daddr;
unsigned char mbz;
unsigned char ptcl;
unsigned short tcpl;
struct tcpheader tcp;
char payload[1500];
};