From 0d47952611198ef6b1163f366dc03922d20b1475 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 09:42:04 +0200 Subject: Adding upstream version 7.94+git20230807.3be01efb1+dfsg. Signed-off-by: Daniel Baumann --- ncat/ncat_core.h | 245 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 ncat/ncat_core.h (limited to 'ncat/ncat_core.h') diff --git a/ncat/ncat_core.h b/ncat/ncat_core.h new file mode 100644 index 0000000..b1d66b0 --- /dev/null +++ b/ncat/ncat_core.h @@ -0,0 +1,245 @@ +/*************************************************************************** + * ncat_core.h * + ***********************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/ + * + ***************************************************************************/ + +/* $Id$ */ + +#ifndef NCAT_CORE_H +#define NCAT_CORE_H + +#include "nsock.h" +#include "nbase.h" +#include "util.h" +#include "sockaddr_u.h" + +/* Maximum size of the srcaddrs array. In this case two because we can only have + a IPV4 INADDR_ANY and a IPV6 in6addr_any at most or a user defined address */ +#define NUM_LISTEN_ADDRS 2 + +/* Structure to store a linked list of resolved addresses. */ +struct sockaddr_list { + union sockaddr_u addr; + size_t addrlen; + struct sockaddr_list* next; +}; + +extern union sockaddr_u listenaddrs[NUM_LISTEN_ADDRS]; +extern int num_listenaddrs; + +extern union sockaddr_u srcaddr; +extern size_t srcaddrlen; + +extern struct sockaddr_list *targetaddrs; + +enum exec_mode { + EXEC_PLAIN, + EXEC_SHELL, + EXEC_LUA, +}; + +/* Proxy DNS resolution options (mask bits) */ +#define PROXYDNS_LOCAL 1 +#define PROXYDNS_REMOTE 2 + +struct options { + unsigned int portno; + + int verbose; + int debug; + char *target; + int af; + /* IPPROTO_TCP, IPPROTO_SCTP, or IPPROTO_UDP */ + int proto; + int broker; + int listen; + int keepopen; + int sendonly; + int recvonly; + int noshutdown; + int telnet; + int linedelay; + int chat; + int nodns; + const char *normlog; + const char *hexlog; + int normlogfd; + int hexlogfd; + int append; + int idletimeout; + int crlf; + /* Were any hosts specifically allowed? If so, deny all others. */ + int allow; + int deny; + struct addrset *allowset; + struct addrset *denyset; + int httpserver; + int nsock_engine; + /* Output messages useful for testing to stderr? */ + int test; + + /* Loose source-routing stuff */ + struct in_addr srcrtes[8]; + int numsrcrtes; + int srcrteptr; + + /* Maximum number of simultaneous connections */ + int conn_limit; + int conntimeout; + + /* When execmode == EXEC_LUA, cmdexec is the name of the file to run. */ + char *cmdexec; + enum exec_mode execmode; + char *proxy_auth; + char *proxytype; + char *proxyaddr; + int proxydns; + + int ssl; + char *sslcert; + char *sslkey; + int sslverify; + char *ssltrustfile; + char *sslciphers; + char* sslservername; + char *sslalpn; + int zerobyte; +}; + +extern struct options o; + +/* The time the program was started, for exit statistics in connect mode. */ +extern struct timeval start_time; + +/* Initializes global options to their default values. */ +void options_init(void); + +/* Resolves the given hostname or IP address with getaddrinfo, and stores the + first result (if any) in *ss and *sslen. The value of port will be set in the + appropriate place in *ss; set to 0 if you don't care. af may be AF_UNSPEC, in + which case getaddrinfo may return e.g. both IPv4 and IPv6 results; which one + is first depends on the system configuration. Returns 0 on success, or a + getaddrinfo return code (suitable for passing to gai_strerror) on failure. + *ss and *sslen are always defined when this function returns 0. + + If the global o.nodns is true, then do not resolve any names with DNS. */ +int resolve(const char *hostname, unsigned short port, + struct sockaddr_storage *ss, size_t *sslen, int af); + +/* Resolves the given hostname or IP address with getaddrinfo, and stores the + first result (if any) in *ss and *sslen. The value of port will be set in the + appropriate place in *ss; set to 0 if you don't care. af may be AF_UNSPEC, in + which case getaddrinfo may return e.g. both IPv4 and IPv6 results; which one + is first depends on the system configuration. Returns 0 on success, or a + getaddrinfo return code (suitable for passing to gai_strerror) on failure. + *ss and *sslen are always defined when this function returns 0. + + Resolve the hostname with DNS only if global o.proxydns includes PROXYDNS_LOCAL. */ +int proxyresolve(const char *hostname, unsigned short port, + struct sockaddr_storage *ss, size_t *sslen, int af); + +/* Resolves the given hostname or IP address with getaddrinfo, and stores + all results into a linked list. + The rest of behavior is same as resolve(). */ +int resolve_multi(const char *hostname, unsigned short port, + struct sockaddr_list *sl, int af); + +void free_sockaddr_list(struct sockaddr_list *sl); + +int fdinfo_close(struct fdinfo *fdn); +int fdinfo_recv(struct fdinfo *fdn, char *buf, size_t size); +int fdinfo_send(struct fdinfo *fdn, const char *buf, size_t size); +int fdinfo_pending(struct fdinfo *fdn); + +int ncat_recv(struct fdinfo *fdn, char *buf, size_t size, int *pending); +int ncat_send(struct fdinfo *fdn, const char *buf, size_t size); + +/* Broadcast a message to all the descriptors in fds. Returns -1 if any of the + sends failed. */ +extern int ncat_broadcast(fd_set *fds, const fd_list_t *fdlist, const char *msg, size_t size); + +/* Do telnet WILL/WONT DO/DONT negotiations */ +extern void dotelnet(int s, unsigned char *buf, size_t bufsiz); + +/* sleep(), usleep(), msleep(), Sleep() -- all together now, "portability". + * + * There is no upper or lower limit to the delayval, so if you pass in a short + * length of time <100ms, then you're likely going to get odd results. + * This is because the Linux timeslice is 10ms-200ms. So don't expect + * it to return for at least that long. + * + * Block until the specified time has elapsed, then return 1. + */ +extern int ncat_delay_timer(int delayval); + +/* Open a logfile for writing. + * Return the open file descriptor. */ +extern int ncat_openlog(const char *logfile, int append); + +extern void ncat_log_send(const char *data, size_t len); + +extern void ncat_log_recv(const char *data, size_t len); + +extern int ncat_hostaccess(char *matchaddr, char *filename, char *remoteip); + +/* Make it so that line endings read from a console are always \n (not \r\n). + Defined in ncat_posix.c and ncat_win.c. */ +extern void set_lf_mode(void); + +extern int getaddrfamily(const char *addr); +extern int setenv_portable(const char *name, const char *value); +extern void setup_environment(struct fdinfo *fdinfo); + +#endif -- cgit v1.2.3