diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:42:04 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:42:04 +0000 |
commit | 0d47952611198ef6b1163f366dc03922d20b1475 (patch) | |
tree | 3d840a3b8c0daef0754707bfb9f5e873b6b1ac13 /nping/stats.h | |
parent | Initial commit. (diff) | |
download | nmap-0d47952611198ef6b1163f366dc03922d20b1475.tar.xz nmap-0d47952611198ef6b1163f366dc03922d20b1475.zip |
Adding upstream version 7.94+git20230807.3be01efb1+dfsg.upstream/7.94+git20230807.3be01efb1+dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'nping/stats.h')
-rw-r--r-- | nping/stats.h | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/nping/stats.h b/nping/stats.h new file mode 100644 index 0000000..0ba2cbe --- /dev/null +++ b/nping/stats.h @@ -0,0 +1,210 @@ + +/*************************************************************************** + * PacketStats.h -- The PacketStats class handles packet statistics. It is * + * intended to keep track of the number of packets and bytes sent and * + * received, keep track of start and finish times, etc. * + * * + ***********************IMPORTANT NMAP LICENSE TERMS************************ + * + * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap + * Project"). Nmap is also a registered trademark of the Nmap Project. + * + * This program is distributed under the terms of the Nmap Public Source + * License (NPSL). The exact license text applying to a particular Nmap + * release or source code control revision is contained in the LICENSE + * file distributed with that version of Nmap or source code control + * revision. More Nmap copyright/legal information is available from + * https://nmap.org/book/man-legal.html, and further information on the + * NPSL license itself can be found at https://nmap.org/npsl/ . This + * header summarizes some key points from the Nmap license, but is no + * substitute for the actual license text. + * + * Nmap is generally free for end users to download and use themselves, + * including commercial use. It is available from https://nmap.org. + * + * The Nmap license generally prohibits companies from using and + * redistributing Nmap in commercial products, but we sell a special Nmap + * OEM Edition with a more permissive license and special features for + * this purpose. See https://nmap.org/oem/ + * + * If you have received a written Nmap license agreement or contract + * stating terms other than these (such as an Nmap OEM license), you may + * choose to use and redistribute Nmap under those terms instead. + * + * The official Nmap Windows builds include the Npcap software + * (https://npcap.com) for packet capture and transmission. It is under + * separate license terms which forbid redistribution without special + * permission. So the official Nmap Windows builds may not be redistributed + * without special permission (such as an Nmap OEM license). + * + * Source is provided to this software because we believe users have a + * right to know exactly what a program is going to do before they run it. + * This also allows you to audit the software for security holes. + * + * Source code also allows you to port Nmap to new platforms, fix bugs, and add + * new features. You are highly encouraged to submit your changes as a Github PR + * or by email to the dev@nmap.org mailing list for possible incorporation into + * the main distribution. Unless you specify otherwise, it is understood that + * you are offering us very broad rights to use your submissions as described in + * the Nmap Public Source License Contributor Agreement. This is important + * because we fund the project by selling licenses with various terms, and also + * because the inability to relicense code has caused devastating problems for + * other Free Software projects (such as KDE and NASM). + * + * The free version of Nmap is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties, + * indemnification and commercial support are all available through the + * Npcap OEM program--see https://nmap.org/oem/ + * + ***************************************************************************/ +#ifndef __STATS_H__ +#define __STATS_H__ 1 + +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <errno.h> +#include <ctype.h> +#include "nping.h" + +#ifndef WIN32 +#include <sys/types.h> + +#if HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif + +#include <sys/mman.h> +#include "nping_config.h" +#endif + +#if HAVE_UNISTD_H +#include <unistd.h> +#endif + +#if TIME_WITH_SYS_TIME +# include <sys/time.h> +# include <time.h> +#else +# if HAVE_SYS_TIME_H +# include <sys/time.h> +# else +# include <time.h> +# endif +#endif + +/* Make sure we define a 64bit integer type */ +#ifndef u64_t + #if WIN32 + typedef unsigned __int64 u64_t; + #else + typedef unsigned long long u64_t; + #endif +#endif + +/* Timeval subtraction in microseconds */ +#define TIMEVAL_SUBTRACT(a,b) (((a).tv_sec - (b).tv_sec) * 1000000 + (a).tv_usec - (b).tv_usec) +/* Timeval subtract in milliseconds */ +#define TIMEVAL_MSEC_SUBTRACT(a,b) ((((a).tv_sec - (b).tv_sec) * 1000) + ((a).tv_usec - (b).tv_usec) / 1000) +/* Timeval subtract in seconds; truncate towards zero */ +#define TIMEVAL_SEC_SUBTRACT(a,b) ((a).tv_sec - (b).tv_sec + (((a).tv_usec < (b).tv_usec) ? - 1 : 0)) +/* Timeval subtract in fractional seconds; convert to float */ +#define TIMEVAL_FSEC_SUBTRACT(a,b) ((a).tv_sec - (b).tv_sec + (((a).tv_usec - (b).tv_usec)/1000000.0)) + + +class NpingTimer { + + private: + struct timeval start_tv; + struct timeval stop_tv; + + public: + NpingTimer(); + ~NpingTimer(); + void reset(); + int start(); + int stop(); + double elapsed(struct timeval *now=NULL); + bool is_started(); + bool is_stopped(); + + + private: + bool timeval_set(const struct timeval *tv); +}; + + +class NpingStats { + + private: + u64_t packets_sent; + u64_t packets_received; + u64_t packets_echoed; + + u64_t bytes_sent; + u64_t bytes_received; + u64_t bytes_echoed; + + u32 echo_clients_served; + + NpingTimer tx_timer; /* Timer for packet transmission. */ + NpingTimer rx_timer; /* Timer for packet reception. */ + NpingTimer run_timer; /* Timer to measure Nping execution time. */ + + public: + NpingStats(); + ~NpingStats(); + + void reset(); + + int addSentPacket(u32 len); + int addRecvPacket(u32 len); + int addEchoedPacket(u32 len); + int addEchoClientServed(); + + int startClocks(); + int stopClocks(); + + int startTxClock(); + int stopTxClock(); + + int startRxClock(); + int stopRxClock(); + + int startRuntime(); + int stopRuntime(); + + double elapsedTx(); + double elapsedRx(); + double elapsedRuntime(struct timeval *now=NULL); + + u64_t getSentPackets(); + u64_t getSentBytes(); + + u64_t getRecvPackets(); + u64_t getRecvBytes(); + + u64_t getEchoedPackets(); + u64_t getEchoedBytes(); + u32 getEchoClientsServed(); + + u64_t getLostPackets(); + double getLostPacketPercentage(); + double getLostPacketPercentage100(); + + u64_t getUnmatchedPackets(); + double getUnmatchedPacketPercentage(); + double getUnmatchedPacketPercentage100(); + + double getOverallTxPacketRate(); + double getOverallTxByteRate(); + + double getOverallRxPacketRate(); + double getOverallRxByteRate(); + +}; + + +#endif /* __STATS_H__ */ |