Annotation of embedaddon/hping2/hping2.h, revision 1.1.1.1.4.1.2.1

1.1       misho       1: /* 
                      2:  * $smu-mark$ 
                      3:  * $name: hping2.h$ 
                      4:  * $author: Salvatore Sanfilippo <antirez@invece.org>$ 
                      5:  * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$ 
                      6:  * $license: This software is under GPL version 2 of license$ 
                      7:  * $date: Fri Nov  5 11:55:48 MET 1999$ 
                      8:  * $rev: 9$ 
                      9:  */ 
                     10: 
1.1.1.1.4.1.2  1(misho    11:1): /* $Id: hping2.h,v 1.1.1.1.4.1 2017/01/26 14:12:55 misho Exp $ */
1.1       misho      12: 
                     13: #ifndef _HPING2_H
                     14: #define _HPING2_H
                     15: 
                     16: #include <sys/types.h>
                     17: #include <sys/socket.h>
                     18: #include <netinet/in.h>
                     19: #include "systype.h"
                     20: 
                     21: #ifdef __sun__
                     22: typedef char                   int_8_t;
                     23: typedef unsigned char          u_int8_t;
                     24: typedef short                  int_16_t;
                     25: typedef unsigned short         u_int16_t;
                     26: typedef int                    int_32_t;
                     27: typedef unsigned int           u_int32_t;
                     28: #endif
                     29: 
                     30: /* types */
                     31: #ifndef __u8
                     32: #define __u8           u_int8_t
                     33: #endif /* __u8 */
                     34: #ifndef __u16
                     35: #define __u16          u_int16_t
                     36: #endif /* __u16 */
                     37: #ifndef __u32
                     38: #define __u32          u_int32_t
                     39: #endif /* __u32 */
                     40: 
                     41: #ifndef __uint8_t
                     42: #define __uint8_t      u_int8_t
                     43: #endif /* __uint8_t */
                     44: #ifndef __uint16_t
                     45: #define __uint16_t     u_int16_t
                     46: #endif /* __uint16_t */
                     47: #ifndef __uint32_t
                     48: #define __uint32_t     u_int32_t
                     49: #endif /* __uint32_t */
                     50: 
                     51: #include "hcmp.h" /* Hping Control Message Protocol */
                     52: 
                     53: /* protocols header size */
                     54: #ifndef ICMPHDR_SIZE
                     55: #define ICMPHDR_SIZE   sizeof(struct myicmphdr)
                     56: #endif
                     57: #ifndef UDPHDR_SIZE
                     58: #define UDPHDR_SIZE    sizeof(struct myudphdr)
                     59: #endif
                     60: #ifndef TCPHDR_SIZE
                     61: #define TCPHDR_SIZE    sizeof(struct mytcphdr)
                     62: #endif
                     63: #ifndef IPHDR_SIZE
                     64: #define IPHDR_SIZE     sizeof(struct myiphdr)
                     65: #endif
                     66: 
                     67: /* wait X seconds after reached to sent packets in oreder to display replies */
                     68: #define COUNTREACHED_TIMEOUT 1
                     69: 
                     70: /* requests status table stuffs */
                     71: /* Warning, TABLESIZE 0 == floating point exception */
                     72: #define TABLESIZE      400
                     73: #define S_SENT         0
                     74: #define S_RECV         1
                     75: 
                     76: /* usefull defines */
                     77: #ifndef TRUE
                     78: #define TRUE   1
                     79: #define FALSE  0
                     80: #endif
                     81: #ifndef IFNAMSIZ
                     82: #define IFNAMSIZ 16
                     83: #endif
                     84: #ifndef PF_PACKET
                     85: #define PF_PACKET 17           /* kernel 2.[12].* with 2.0.* kernel headers? */
                     86: #endif
                     87: #ifndef ETH_P_IP
                     88: #define ETH_P_IP  0x0800       /* Internet Protocol packet     */
                     89: #endif
                     90: #ifndef ABS
                     91: #define ABS(x) (((x)>0) ? (x) : -(x))
                     92: #endif
                     93: 
                     94: /* header size of some physical layer type */
                     95: #define PPPHDR_SIZE_LINUX      0
                     96: #define PPPHDR_SIZE_FREEBSD    4
                     97: #define PPPHDR_SIZE_OPENBSD    4
                     98: #define PPPHDR_SIZE_NETBSD     4
                     99: #define PPPHDR_SIZE_BSDI       4
                    100: #define ETHHDR_SIZE            14
                    101: #define LOHDR_SIZE             14
                    102: #define WLANHDR_SIZE           14
                    103: #define TRHDR_SIZE             20
                    104: 
                    105: /* packet size (physical header size + ip header + tcp header + 0 data bytes) */
                    106: #ifndef IP_MAX_SIZE
                    107: #define IP_MAX_SIZE    65535
                    108: #endif 
                    109: 
                    110: /* absolute offsets */
                    111: #define ABS_OFFSETIP   linkhdr_size
                    112: #define ABS_OFFSETTCP  ( linkhdr_size + IPHDR_SIZE )
                    113: #define ABS_OFFSETICMP ( linkhdr_size + IPHDR_SIZE )
                    114: #define ABS_OFFSETUDP  ( linkhdr_size + IPHDR_SIZE )
                    115: 
                    116: /* defaults and misc */
                    117: #define DEFAULT_SENDINGWAIT 1  /* wait 1 sec. between sending each packets */
                    118: #define DEFAULT_DPORT      0   /* default dest. port */
                    119: #define DEFAULT_INITSPORT  -1  /* default initial source port: -1 means random */
                    120: #define DEFAULT_COUNT      -1  /* default packets count: -1 means forever */
                    121: #define DEFAULT_TTL       64   /* default ip->ttl value */
                    122: #define DEFAULT_SRCWINSIZE 512 /* default tcp windows size */
                    123: #define DEFAULT_VIRTUAL_MTU 16  /* tiny fragments */
                    124: #define DEFAULT_ICMP_TYPE   8  /* echo request */
                    125: #define DEFAULT_ICMP_CODE   0  /* icmp-type relative */
                    126: #define DEFAULT_ICMP_IP_VERSION                4
                    127: #define DEFAULT_ICMP_IP_IHL            (IPHDR_SIZE >> 2)
                    128: #define        DEFAULT_ICMP_IP_TOS             0
                    129: #define DEFAULT_ICMP_IP_TOT_LEN                0 /* computed by send_icmp_*() */
                    130: #define DEFAULT_ICMP_IP_ID             0 /* rand */
                    131: #define DEFAULT_ICMP_CKSUM             -1 /* -1 means compute the cksum */
                    132: #define DEFAULT_ICMP_IP_PROTOCOL       6 /* TCP */
                    133: #define DEFAULT_RAW_IP_PROTOCOL                6 /* TCP */
                    134: #define DEFAULT_TRACEROUTE_TTL         1
                    135: 
                    136: #define BIND_NONE      0               /* no bind */
                    137: #define BIND_DPORT     1               /* bind destination port */
                    138: #define BIND_TTL       2               /* bind ip->ttl */
                    139: #define DEFAULT_BIND   BIND_DPORT
                    140:        
                    141: /* fragmentation defines */
                    142: #define MF ((unsigned short)0x2000)    /* more fragments */
                    143: #define DF ((unsigned short)0x4000)    /* dont fragment */
                    144: #define NF ((unsigned short)0x0000)    /* no more fragments */
                    145: 
                    146: /* ip options defines */
                    147: #define IPOPT_COPY             0x80
                    148: #define IPOPT_CLASS_MASK       0x60
                    149: #define IPOPT_NUMBER_MASK      0x1f
                    150: 
                    151: #define        IPOPT_COPIED(o)         ((o)&IPOPT_COPY)
                    152: #define        IPOPT_CLASS(o)          ((o)&IPOPT_CLASS_MASK)
                    153: #define        IPOPT_NUMBER(o)         ((o)&IPOPT_NUMBER_MASK)
                    154: 
                    155: #define        IPOPT_CONTROL           0x00
                    156: #define        IPOPT_RESERVED1         0x20
                    157: #define        IPOPT_MEASUREMENT       0x40
                    158: #define        IPOPT_RESERVED2         0x60
                    159: 
                    160: #define IPOPT_END      (0 |IPOPT_CONTROL)
                    161: #define IPOPT_NOOP     (1 |IPOPT_CONTROL)
                    162: #define IPOPT_SEC      (2 |IPOPT_CONTROL|IPOPT_COPY)
                    163: #define IPOPT_LSRR     (3 |IPOPT_CONTROL|IPOPT_COPY)
                    164: #define IPOPT_TIMESTAMP        (4 |IPOPT_MEASUREMENT)
                    165: #define IPOPT_RR       (7 |IPOPT_CONTROL)
                    166: #define IPOPT_SID      (8 |IPOPT_CONTROL|IPOPT_COPY)
                    167: #define IPOPT_SSRR     (9 |IPOPT_CONTROL|IPOPT_COPY)
                    168: #define IPOPT_RA       (20|IPOPT_CONTROL|IPOPT_COPY)
                    169: 
                    170: #define IPOPT_OPTVAL 0
                    171: #define IPOPT_OLEN   1
                    172: #define IPOPT_OFFSET 2
                    173: #define IPOPT_MINOFF 4
                    174: #define MAX_IPOPTLEN 40
                    175: #define IPOPT_NOP IPOPT_NOOP
                    176: #define IPOPT_EOL IPOPT_END
                    177: #define IPOPT_TS  IPOPT_TIMESTAMP
                    178: 
                    179: #define        IPOPT_TS_TSONLY         0               /* timestamps only */
                    180: #define        IPOPT_TS_TSANDADDR      1               /* timestamps and addresses */
                    181: #define        IPOPT_TS_PRESPEC        3               /* specified modules only */
                    182: 
                    183: /* tcp flags */
                    184: #ifndef        TH_FIN
                    185: #define TH_FIN  0x01
                    186: #endif
                    187: #ifndef TH_SYN
                    188: #define TH_SYN  0x02
                    189: #endif
                    190: #ifndef TH_RST
                    191: #define TH_RST  0x04
                    192: #endif
                    193: #ifndef TH_PUSH
                    194: #define TH_PUSH 0x08
                    195: #endif
                    196: #ifndef TH_ACK
                    197: #define TH_ACK  0x10
                    198: #endif
                    199: #ifndef TH_URG
                    200: #define TH_URG  0x20
                    201: #endif
                    202: #ifndef TH_X
                    203: #define        TH_X 0x40       /* X tcp flag */
                    204: #endif
                    205: #ifndef TH_Y
                    206: #define TH_Y 0x80      /* Y tcp flag */
                    207: #endif
                    208: 
                    209: /* ICMP TYPE */
                    210: #define ICMP_ECHOREPLY          0       /* Echo Reply                   */
                    211: #define ICMP_DEST_UNREACH       3       /* Destination Unreachable      */
                    212: #define ICMP_SOURCE_QUENCH      4       /* Source Quench                */
                    213: #define ICMP_REDIRECT           5       /* Redirect (change route)      */
                    214: #define ICMP_ECHO               8       /* Echo Request                 */
                    215: #define ICMP_TIME_EXCEEDED      11      /* Time Exceeded                */
                    216: #define ICMP_PARAMETERPROB      12      /* Parameter Problem            */
                    217: #define ICMP_TIMESTAMP          13      /* Timestamp Request            */
                    218: #define ICMP_TIMESTAMPREPLY     14      /* Timestamp Reply              */
                    219: #define ICMP_INFO_REQUEST       15      /* Information Request          */
                    220: #define ICMP_INFO_REPLY         16      /* Information Reply            */
                    221: #define ICMP_ADDRESS            17      /* Address Mask Request         */
                    222: #define ICMP_ADDRESSREPLY       18      /* Address Mask Reply           */
                    223: 
                    224: /* Codes for UNREACHABLE */
                    225: #define ICMP_NET_UNREACH        0       /* Network Unreachable          */
                    226: #define ICMP_HOST_UNREACH       1       /* Host Unreachable             */
                    227: #define ICMP_PROT_UNREACH       2       /* Protocol Unreachable         */
                    228: #define ICMP_PORT_UNREACH       3       /* Port Unreachable             */
                    229: #define ICMP_FRAG_NEEDED        4       /* Fragmentation Needed/DF set  */
                    230: #define ICMP_SR_FAILED          5       /* Source Route failed          */
                    231: #define ICMP_NET_UNKNOWN        6
                    232: #define ICMP_HOST_UNKNOWN       7
                    233: #define ICMP_HOST_ISOLATED      8
                    234: #define ICMP_NET_ANO            9
                    235: #define ICMP_HOST_ANO           10
                    236: #define ICMP_NET_UNR_TOS        11
                    237: #define ICMP_HOST_UNR_TOS       12
                    238: #define ICMP_PKT_FILTERED       13      /* Packet filtered */
                    239: #define ICMP_PREC_VIOLATION     14      /* Precedence violation */
                    240: #define ICMP_PREC_CUTOFF        15      /* Precedence cut off */
                    241: #define NR_ICMP_UNREACH 15        /* instead of hardcoding immediate value */
                    242: 
                    243: /* Codes for REDIRECT */
                    244: #define ICMP_REDIR_NET          0       /* Redirect Net                 */
                    245: #define ICMP_REDIR_HOST         1       /* Redirect Host                */
                    246: #define ICMP_REDIR_NETTOS       2       /* Redirect Net for TOS         */
                    247: #define ICMP_REDIR_HOSTTOS      3       /* Redirect Host for TOS        */
                    248: 
                    249: /* Codes for TIME_EXCEEDED */
                    250: #define ICMP_EXC_TTL            0       /* TTL count exceeded           */
                    251: #define ICMP_EXC_FRAGTIME       1       /* Fragment Reass time exceeded */
                    252: 
                    253: /*
                    254:  * IP header
                    255:  */
                    256: struct myiphdr {
                    257: #if defined(__LITTLE_ENDIAN_BITFIELD)
                    258:         __u8    ihl:4,
                    259:                 version:4;
                    260: #elif defined (__BIG_ENDIAN_BITFIELD)
                    261:         __u8    version:4,
                    262:                 ihl:4;
                    263: #else
                    264: #error  "Please, edit Makefile and add -D__(LITTLE|BIG)_ENDIAN_BITFIEND"
                    265: #endif
                    266:         __u8    tos;
                    267:         __u16   tot_len;
                    268:         __u16   id;
                    269:         __u16   frag_off;
                    270:         __u8    ttl;
                    271:         __u8    protocol;
                    272:         __u16   check;
                    273:         __u32   saddr;
                    274:         __u32   daddr;
                    275: };
                    276: 
                    277: /*
                    278:  * UDP header
                    279:  */
                    280: struct myudphdr { 
                    281:        __u16 uh_sport;     /* source port */
                    282:        __u16 uh_dport;     /* destination port */
                    283:        __u16 uh_ulen;      /* udp length */
                    284:        __u16 uh_sum;       /* udp checksum */
                    285: };
                    286: 
                    287: /*
                    288:  * TCP header.
                    289:  * Per RFC 793, September, 1981.
                    290:  */
                    291: struct mytcphdr {
                    292:        __u16   th_sport;               /* source port */
                    293:        __u16   th_dport;               /* destination port */
                    294:        __u32   th_seq;                 /* sequence number */
                    295:        __u32   th_ack;                 /* acknowledgement number */
                    296: #if defined (__LITTLE_ENDIAN_BITFIELD)
                    297:        __u8    th_x2:4,                /* (unused) */
                    298:                th_off:4;               /* data offset */
                    299: #elif defined (__BIG_ENDIAN_BITFIELD)
                    300:        __u8    th_off:4,               /* data offset */
                    301:                th_x2:4;                /* (unused) */
                    302: #else
                    303: #error  "Please, edit Makefile and add -D__(LITTLE|BIG)_ENDIAN_BITFIEND"
                    304: #endif
                    305:        __u8    th_flags;
                    306:        __u16   th_win;                 /* window */
                    307:        __u16   th_sum;                 /* checksum */
                    308:        __u16   th_urp;                 /* urgent pointer */
                    309: };
                    310: 
                    311: /*
                    312:  * ICMP header
                    313:  */
                    314: struct myicmphdr
                    315: {
                    316:        __u8          type;
                    317:        __u8          code;
                    318:        __u16         checksum;
                    319:        union
                    320:        {
                    321:                struct
                    322:                {
                    323:                        __u16   id;
                    324:                        __u16   sequence;
                    325:                } echo;
                    326:                __u32   gateway;
                    327:        } un;
                    328: };
                    329: 
                    330: struct icmp_tstamp_data {
                    331:        __u32 orig;
                    332:        __u32 recv;
                    333:        __u32 tran;
                    334: };
                    335: 
                    336: /*
                    337:  * UDP/TCP pseudo header
                    338:  * for cksum computing
                    339:  */
                    340: struct pseudohdr
                    341: {
                    342:        __u32 saddr;
                    343:        __u32 daddr;
                    344:        __u8  zero;
                    345:        __u8  protocol;
                    346:        __u16 lenght;
                    347: };
                    348: 
                    349: #define PSEUDOHDR_SIZE sizeof(struct pseudohdr)
                    350: 
                    351: /*
                    352:  * hping replies delay table
                    353:  */
                    354: struct delaytable_element {
                    355:        int seq;
                    356:        int src;
                    357:        time_t sec;
                    358:        time_t usec;
                    359:        int status;
                    360: };
                    361: 
1.1.1.1.4.1.2  1(misho   362:1): extern volatile struct delaytable_element delaytable[TABLESIZE];
1.1       misho     363: 
                    364: /* protos */
                    365: void   nop(void);                              /* nop */
                    366: int    parse_options(int, char**);             /* option parser */
                    367: int    get_if_name(void);                      /* get interface (see source) */
                    368: int    get_linkhdr_size(char*);                /* get link layer hdr size */
                    369: int    open_sockpacket(void);                  /* open SOCK_PACKET socket */
                    370: int    close_sockpacket(int);                  /* close SOCK_PACKET socket */
                    371: int    open_sockraw(void);                     /* open raw socket */
                    372: void   send_packet (int signal_id);
                    373: void   send_rawip (void);
                    374: void   send_tcp(void);
                    375: void   send_udp(void);
                    376: void   send_icmp(void);
                    377: void   send_hcmp(__u8 type, __u32 arg);        /* send hcmp packets */
                    378: void   send_ip (char*, char*, char*, unsigned int, int, unsigned short,
                    379:                 char*, char);
                    380: void   send_ip_handler(char *packet, unsigned int size); /* fragmentation
                    381:                                                              handler */
                    382: void   wait_packet(void);                      /* handle incoming packets */
                    383: void   print_statistics(int);
                    384: void   show_usage(void);
                    385: void   show_version(void);
                    386: void   resolve(struct sockaddr*, char*);       /* resolver */
                    387: void   log_icmp_unreach(char*, unsigned short);/* ICMP unreachable logger */
                    388: void   log_icmp_timeexc(char*, unsigned short);/* ICMP time exceeded logger */
                    389: time_t get_usec(void);                         /* return current usec */
                    390: time_t get_midnight_ut_ms(void);               /* ms from UT midnight */
                    391: __u16  cksum(__u16 *buf, int nwords);          /* compute 16bit checksum */
                    392: void   inc_destparm(int sid);                  /* inc dst port or ttl */
                    393: char   *get_hostname(char*);                   /* get host from addr */
                    394: void   datafiller(char *p, int size);          /* fill data from file */
                    395: void   data_handler(char *data, int data_size);/* handle data filling */
                    396: void   socket_broadcast(int sd);               /* set SO_BROADCAST option */
                    397: void   socket_iphdrincl(int sd);               /* set SO_IPHDRINCL option */
                    398: void   listenmain(void);                       /* main for listen mode */
                    399: char   *memstr(char *haystack, char *needle, int size); /* memstr */
                    400: void   tos_help(void);                         /* show the TOS help */
                    401: int    rtt(int *seqp, int recvport, float *ms_delay);  /* compute round trip time */
                    402: int    relativize_id(int seqnum, int *ip_id);  /* compute relative id */
                    403: int    if_promisc_on(int s);                   /* promisc. mode ON */
                    404: int    if_promisc_off(int s);                  /* promisc. mode OFF */
                    405: int    open_pcap(void);                        /* open libpcap socket */
                    406: int    close_pcap(void);                       /* close libpcap socket */
                    407: int    pcap_recv(char *, unsigned int);        /* libpcap api wrapper */
                    408: int    memlock(char *addr, size_t size);       /* disable paging */
                    409: int    memunlock(char *addr, size_t size);     /* enable paging */
                    410: int    memlockall(void);                       /* disable paging (all pages) */
                    411: int    memunlockall(void);                     /* enable paging (all pages) */
                    412: unsigned char ip_opt_build(char *ip_opt);              /* build ip options */
                    413: void   display_ipopt(char* buf);               /* display ip options */
                    414: void   icmp_help(void);                        /* show the ICMP help */
                    415: void   route_help(void);                       /* show the route help */
                    416: void   (*Signal(int signo, void (*func)(int)))(int);
                    417: void   delaytable_add(int seq, int src, time_t sec, time_t usec, int status);
                    418: int    read_packet(void *packet, int size);
                    419: void   scanmain(void);
                    420: u_int32_t hp_rand(void);
                    421: #if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && \
                    422:     !defined(__bsdi__) && !defined(__APPLE__)
                    423: size_t strlcpy(char *dst, const char *src, size_t siz);
                    424: #endif
                    425: 
                    426: /* ARS glue */
                    427: void hping_ars_send(char *s);
                    428: 
                    429: #endif /* _HPING2_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>