"Fossies" - the Fresh Open Source Software Archive 
Member "tcpflow-1.6.1/src/tcpflow.h" (19 Feb 2021, 7757 Bytes) of package /linux/misc/tcpflow-1.6.1.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "tcpflow.h" see the
Fossies "Dox" file reference documentation and the last
Fossies "Diffs" side-by-side code changes report:
1.4.5_vs_1.5.0.
1 /*
2 * This file is part of tcpflow by Simson Garfinkel,
3 * originally by Jeremy Elson <jelson@circlemud.org>
4 *
5 * This source code is under the GNU Public License (GPL). See
6 * LICENSE for details.
7 *
8 *
9 *
10 */
11
12 #ifndef TCPFLOW_H
13 #define TCPFLOW_H
14
15
16 #include "config.h"
17
18 /* Older versions of autoconf define PACKAGE and VERSION.
19 * Newer versions define PACKAGE_VERSION and PACKAGE_NAME.
20 * We now use the new variables; allow the old ones.
21 */
22
23 #ifndef PACKAGE_VERSION
24 #define PACKAGE_VERSION VERSION
25 #endif
26
27 #ifndef PACKAGE_NAME
28 #define PACKAGE_NAME PACAKGE
29 #endif
30
31 /****************************************************************
32 *** Windows/mingw compatability seciton.
33 ***
34 *** If we are compiling for Windows, including the Windows-specific
35 *** include files first and disable pthread support.
36 ***/
37 #if (defined(WIN32) || defined(__MINGW32__))
38 # undef HAVE_PTHREAD_H
39 # undef HAVE_SEMAPHORE_H
40 # undef HAVE_PTHREAD
41 # undef HAVE_INET_NTOP /* it's not there. Really. */
42 # undef HAVE_EXTERN_PROGNAME // don't work properly on mingw
43 # define MKDIR(a,b) mkdir(a) // MKDIR only takes 1 argument on windows
44
45 /* Defines not present in Microsoft Windows stack */
46
47 #else
48 /*** Unix-specific elements for windows compatibility section ***/
49 # define MKDIR(a,b) mkdir(a,b) // MKDIR takes 2 arguments on Posix
50 #endif
51
52 /***
53 *** end of windows compatibility section
54 ****************************************************************/
55
56 /* If we are including inttypes.h, mmake sure __STDC_FORMAT_MACROS is defined */
57 #ifndef __STDC_FORMAT_MACROS
58 #define __STDC_FORMAT_MACROS
59 #endif
60
61 /* We want the BSD flavor of defines if possible */
62 #ifndef __FAVOR_BSD
63 #define __FAVOR_BSD
64 #endif
65
66 #ifndef __USE_BSD
67 #define __USE_BSD
68 #endif
69
70 #include <cstdio> /* required per C++ standard - use the C++ versions*/
71 #include <cstdlib>
72 #include <cctype>
73 #include <cstdarg>
74 #include <cerrno>
75 #include <iostream>
76 #include <iomanip>
77
78 #include <fcntl.h>
79 #include <assert.h>
80
81 #ifndef O_BINARY
82 #define O_BINARY 0
83 #endif
84
85
86 // These are the required include files; they better be present
87 #include <inttypes.h>
88 #include <sys/stat.h>
89
90 #ifdef HAVE_SYS_CDEFS_H
91 # include <sys/cdefs.h>
92 #endif
93
94
95 #ifdef HAVE_STRING_H
96 # include <string.h>
97 #endif
98
99 #ifdef HAVE_STRINGS_H
100 # include <strings.h>
101 #endif
102
103 #ifdef HAVE_SYS_TYPES_H
104 # include <sys/types.h>
105 #endif
106
107
108 #ifdef HAVE_UNISTD_H
109 # include <unistd.h>
110 #endif
111
112 #ifdef HAVE_SYS_BITYPES_H
113 # include <sys/bitypes.h>
114 #endif
115
116 #ifdef TIME_WITH_SYS_TIME
117 # include <sys/time.h>
118 # include <time.h>
119 #else
120 # if HAVE_SYS_TIME_H
121 # include <sys/time.h>
122 # else
123 # include <time.h>
124 # endif
125 #endif
126
127 #ifdef HAVE_SYS_SOCKET_H
128 # include <sys/socket.h>
129 #endif
130
131 #ifdef HAVE_NE_IF_VAR_H
132 #include <net/if_var.h>
133 #endif
134
135 #ifdef HAVE_NET_IF_H
136 # include <net/if.h>
137 #endif
138
139 /* We have given up on keeping track of this all and are just including our own definitions. */
140
141
142 //#ifdef HAVE_NETINET_IN_SYSTM_H
143 //# include <netinet/in_systm.h>
144 //#endif
145
146 //#ifdef HAVE_NETINET_IP6_H
147 //#include <netinet/ip6.h>
148 //#endif
149
150 //#ifdef HAVE_NETINET_IP_VAR_H
151 //# include <netinet/ip_var.h> // FREEBSD
152 //#endif
153
154 //#ifdef HAVE_NETINET_IF_ETHER_H
155 //# include <netinet/if_ether.h>
156 //#endif
157
158 //#ifdef HAVE_NETINET_TCP_H
159 //# include <netinet/tcp.h>
160 //#endif
161
162 //#ifdef HAVE_NETINET_TCPIP_H
163 //# include <netinet/tcpip.h> // FREEBSD
164 //#endif
165
166 //#ifdef HAVE_ARPA_INET_H
167 //# include <arpa/inet.h>
168 //#endif
169
170
171 ///*
172 // * Oracle Enterprise Linux is missing the definition for
173 // * ETHERTYPE_VLAN
174 // */
175 //#ifndef ETHERTYPE_VLAN
176 //# define ETHERTYPE_VLAN 0x8100
177 //#endif
178
179 #ifdef HAVE_SIGNAL_H
180 # include <signal.h>
181 #endif
182
183
184 /****************** Ugly System Dependencies ******************************/
185
186 /* We always want to refer to RLIMIT_NOFILE, even if what you actually
187 * have is RLIMIT_OFILE
188 */
189 #if defined(RLIMIT_OFILE) && !defined(RLIMIT_NOFILE)
190 # define RLIMIT_NOFILE RLIMIT_OFILE
191 #endif
192
193 /* OPEN_MAX is the maximum number of files to open.
194 * Unfortunately, some systems called this FOPEN_MAX...
195 */
196 #if defined(FOPEN_MAX) && !defined(OPEN_MAX)
197 # define OPEN_MAX FOPEN_MAX
198 #endif
199
200 /* some systems don't define SEEK_SET... sigh */
201 #ifndef SEEK_SET
202 # define SEEK_SET 0
203 #endif /* SEEK_SET */
204
205 /* These may not be defined on some systems */
206
207 #ifndef MAX_IPv4_STR_LEN
208 #define MAX_IPv4_STR_LEN (3*4+3)
209 #endif
210
211 #ifndef MAX_IPv6_STR_LEN
212 #define MAX_IPv6_STR_LEN 256
213 #endif
214
215 #ifndef HAVE_SOCKLEN_T
216 typedef size_t socklen_t;
217 #endif
218
219 #ifndef IN6_IS_ADDR_V4MAPPED
220 #define IN6_IS_ADDR_V4MAPPED(x) 0
221 #endif
222
223 #ifndef IN6_IS_ADDR_V4COMPAT
224 #define IN6_IS_ADDR_V4COMPAT(x) 0
225 #endif
226
227 #undef s6_addr
228 #define s6_addr __u6_addr.__u6_addr8
229
230 #undef s6_addr16
231 #define s6_addr16 __u6_addr.__u6_addr16
232
233 #undef s6_addr32
234 #define s6_addr32 __u6_addr.__u6_addr32
235
236 #ifdef __MINGW32__
237 typedef uint16_t in_port_t;
238 typedef unsigned char u_int8_t;
239 #endif
240
241 /**************************** Constants ***********************************/
242
243 #define DEFAULT_DEBUG_LEVEL 1
244 #define MAX_FD_GUESS 64
245 #define SNAPLEN 65536 /* largest possible MTU we'll see */
246
247 /* Reserve FDs for stdin, stdout, stderr, and the packet filter; one for breathing
248 * room (we open new files before closing old ones), and one more to
249 * be safe.
250 */
251 #define NUM_RESERVED_FDS 6 /* number of FDs to set aside; allows files to be opened as necessary */
252
253
254
255 #include "be13_api/bulk_extractor_i.h"
256
257 /***************************** Main Support *************************************/
258
259 /* tcpflow.cpp - CLI */
260 extern const char *progname;
261 void terminate(int sig);
262 #include "inet_ntop.h"
263
264 #ifdef HAVE_PTHREAD
265 #include <semaphore.h>
266 extern sem_t *semlock;
267 #endif
268
269 #ifndef __MAIN_C__
270 extern int debug;
271 #endif
272
273 #define DEBUG(message_level) if (debug >= message_level) debug_real
274
275 /************************* per-file globals ****************************/
276
277 /* datalink.cpp - callback for libpcap */
278 extern int32_t datalink_tdelta; // time delta to add to each packet
279 pcap_handler find_handler(int datalink_type, const char *device); // callback for pcap
280 typedef struct {
281 pcap_handler handler;
282 int type;
283 } dlt_handler_t;
284
285 void dl_ieee802_11_radio(u_char *user, const struct pcap_pkthdr *h, const u_char *p);
286 void dl_prism(u_char *user, const struct pcap_pkthdr *h, const u_char *p);
287
288 /**
289 * shift the time value, in line with what the user requested...
290 * previously this returned a structure on the stack, but that
291 * created an optimization problem with gcc 4.7.2
292 */
293 inline const timeval &tvshift(struct timeval &tv,const struct timeval &tv_)
294 {
295 tv.tv_sec = tv_.tv_sec + datalink_tdelta;
296 tv.tv_usec = tv_.tv_usec;
297 return tv;
298 }
299
300
301
302 /* util.cpp - utility functions */
303 extern int debug;
304 std::string ssprintf(const char *fmt,...);
305 std::string comma_number_string(int64_t input);
306 void mkdirs_for_path(std::string path); // creates any directories necessary for the path
307 std::string macaddr(const uint8_t *addr);
308
309 #define DEBUG_PEDANTIC 0x0001 // check values more rigorously
310 void init_debug(const char *progname,int include_pid);
311 void (*portable_signal(int signo, void (*func)(int)))(int);
312 void debug_real(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
313 [[noreturn]] void die(const char *fmt, ...) __attribute__ ((__noreturn__)) __attribute__ ((format (printf, 1, 2)));
314
315 /* scanners */
316
317 extern "C" scanner_t scan_md5;
318 extern "C" scanner_t scan_http;
319 extern "C" scanner_t scan_python;
320 extern "C" scanner_t scan_tcpdemux;
321 extern "C" scanner_t scan_netviz;
322 extern "C" scanner_t scan_wifiviz;
323
324
325 #ifndef HAVE_TIMEVAL_OUT
326 #define HAVE_TIMEVAL_OUT
327 inline std::ostream& operator<<(std::ostream& os, const struct timeval *t)
328 {
329 return os << t->tv_sec << "." << std::setw(6) << std::setfill('0') << t->tv_usec;
330
331 }
332 #endif
333
334 #endif /* __TCPFLOW_H__ */