File: nettypes.h

package info (click to toggle)
ngrep 1.43-3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 2,776 kB
  • ctags: 1,246
  • sloc: ansic: 28,753; sh: 10,488; makefile: 487; perl: 192
file content (101 lines) | stat: -rw-r--r-- 3,778 bytes parent folder | download
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

/*
 * $Id: nettypes.h,v 1.2 2005/02/16 06:01:26 jpr5 Exp $
 *
 * Because Windows standard headers are woefully inadequate for (real)
 * network application development, and because I'm basically lazy, I
 * created this header as a container for the types ngrep needs.
 *
 * The orginal ngrep port to Windows was completed by
 * Mike Davis <mike@eEye.com>.  Unfortunately, I wasn't able to
 * figure out how he did the headers, so I had to redo a lot on my own.
 * Please pardon the hack.
 */

typedef unsigned char u_int8_t;
typedef unsigned short u_int16_t;
typedef unsigned long u_int32_t;


#define IP_RF 0x8000                            /* reserved fragment flag */
#define IP_DF 0x4000                            /* dont fragment flag */
#define IP_MF 0x2000                            /* more fragments flag */
#define IP_OFFMASK 0x1fff                       /* mask for fragmenting bits */

struct ip {
    u_int8_t ip_hl:4;                   /* header length */
    u_int8_t ip_v:4;                    /* version */
    u_int8_t ip_tos;                            /* type of service */
    u_int16_t ip_len;                                   /* total length */
    u_int16_t ip_id;                                    /* identification */
    u_int16_t ip_off;                                   /* fragment offset field */
    u_int8_t ip_ttl;                            /* time to live */
    u_int8_t ip_p;                                      /* protocol */
    u_int16_t ip_sum;                                   /* checksum */
    struct in_addr ip_src, ip_dst;      /* source and dest address */
};


#define TH_FIN  0x01
#define TH_SYN  0x02
#define TH_RST  0x04
#define TH_PUSH 0x08
#define TH_ACK  0x10
#define TH_URG  0x20

typedef u_int32_t tcp_seq;

struct tcphdr {
    u_int16_t th_sport;                         /* source port */
    u_int16_t th_dport;                         /* destination port */
    tcp_seq th_seq;                                     /* sequence number */
    tcp_seq th_ack;                                     /* acknowledgement number */
    u_int8_t th_x2:4;                           /* (unused) */
    u_int8_t th_off:4;                          /* data offset */
    u_int8_t th_flags;
    u_int16_t th_win;                           /* window */
    u_int16_t th_sum;                           /* checksum */
    u_int16_t th_urp;                           /* urgent pointer */
};

struct udphdr {
        u_int16_t uh_sport;                             /* source port */
    u_int16_t uh_dport;             /* destination port */
    u_int16_t uh_ulen;              /* udp length */
    u_int16_t uh_sum;               /* udp checksum */
};


struct icmp {
        u_int8_t  icmp_type;
        u_int8_t  icmp_code;
        u_int16_t icmp_cksum;

        union {
                u_int8_t ih_pptr;
                struct in_addr ih_gwaddr;
                struct ih_idseq {
                        u_int16_t icd_id;
                        u_int16_t icd_seq;
                } ih_idseq;
                u_int32_t ih_void;

                struct ih_pmtu {
                        u_int16_t ipm_void;
                        u_int16_t ipm_nextmtu;
                } ih_pmtu;

                struct ih_rtradv {
                        u_int8_t irt_num_addrs;
                        u_int8_t irt_wpa;
                        u_int16_t irt_lifetime;
                } ih_rtradv;
        } icmp_hun;
};

struct igmp {
  u_int8_t igmp_type;             /* IGMP type */
  u_int8_t igmp_code;             /* routing code */
  u_int16_t igmp_cksum;           /* checksum */
  struct in_addr igmp_group;      /* group address */
};