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>