libnessus.h
上传用户:tjescc
上传日期:2021-02-23
资源大小:419k
文件大小:17k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /* Nessuslib -- the Nessus Library
  2.  * Copyright (C) 1998 Renaud Deraison
  3.  *
  4.  * This library is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU Library General Public
  6.  * License as published by the Free Software Foundation; either
  7.  * version 2 of the License, or (at your option) any later version.
  8.  *
  9.  * This library is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.  * Library General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU Library General Public
  15.  * License along with this library; if not, write to the Free
  16.  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  */   
  18. #ifndef _NESSUS_NESSUSLIB_H
  19. #define _NESSUS_NESSUSLIB_H
  20.  
  21. #ifndef ExtFunc
  22. #define ExtFunc
  23. #endif
  24. ExtFunc void nessus_lib_version(int *, int *, int *);
  25.  
  26. /*
  27.  * Arglist definition and defines
  28.  */
  29.  
  30. struct arglist {
  31. char * name;
  32. int type;
  33. void * value;
  34. long length;
  35. struct arglist * next;
  36. int hash;
  37. };
  38. #define ARG_STRING  1
  39. #define ARG_PTR  2
  40. #define ARG_INT  3
  41. #define ARG_ARGLIST  4
  42. #define ARG_STRUCT 5
  43. /*
  44.  * Plugin standard function templates
  45.  */
  46. typedef int(*plugin_init_t)(struct arglist *);
  47. typedef int(*plugin_run_t)(struct arglist *);      
  48. /*
  49.  * Network-related functions
  50.  */
  51. /* Plugin specific network functions */
  52. ExtFunc int open_sock_tcp(struct arglist * , unsigned int, int );
  53. ExtFunc int open_sock_udp(struct arglist * , unsigned int );
  54. ExtFunc int open_sock_option(struct arglist * , unsigned int , int , int, int);
  55. ExtFunc int recv_line(int, char *, size_t);
  56. ExtFunc int nrecv(int, void*, int, int);
  57. ExtFunc int socket_close(int);
  58. /* Additional functions -- should not be used by the plugins */
  59. ExtFunc int open_sock_tcp_hn(const char * , unsigned int );
  60. ExtFunc int open_sock_opt_hn(const char * , unsigned int , int , int, int );
  61. ExtFunc struct in_addr nn_resolve (const char *); 
  62. #ifdef __GNUC__
  63. ExtFunc void auth_printf(struct arglist *, char * , ...) __attribute__ (( format (printf, 2, 3)));
  64. #else
  65. ExtFunc void auth_printf(struct arglist *, char * , ...);
  66. #endif
  67. ExtFunc void scanner_add_port(struct arglist*, int, char *);
  68. ExtFunc void auth_send(struct arglist *, char *);
  69. ExtFunc char * auth_gets(struct arglist *, char * , size_t);
  70. ExtFunc int ping_host(struct in_addr);
  71. ExtFunc unsigned short *getpts(char *, int *);
  72. /* 
  73.  * Management of the arglists --should not be used directly by
  74.  * the plugins
  75.  */
  76. ExtFunc void arg_add_value(struct arglist *, const char *, int, long, void *);    
  77. ExtFunc int arg_set_value(struct arglist *, const char *, long, void *);
  78. ExtFunc int arg_set_type(struct arglist *, const char *, int);
  79. ExtFunc void * arg_get_value(struct arglist *, const char *);
  80. ExtFunc int arg_get_type(struct arglist *, const char *);
  81. ExtFunc int arg_get_length(struct arglist *, const char *);
  82. ExtFunc void arg_dump(struct arglist *, int);
  83. ExtFunc void arg_dup(struct arglist *, struct arglist *);
  84. ExtFunc void arg_free(struct arglist *);
  85. ExtFunc void arg_free_all(struct arglist *);
  86. ExtFunc void arg_free_name(char*);
  87. /*
  88.  * Arglist management at plugin-level
  89.  */
  90.  
  91. ExtFunc void plug_set_name(struct arglist *, const char *, const char *);
  92. ExtFunc char*plug_get_name(struct arglist*);
  93. ExtFunc void plug_set_path(struct arglist *, const char *);
  94. ExtFunc char*plug_get_path(struct arglist *);
  95. ExtFunc void plug_set_fname(struct arglist *, const char *);
  96. ExtFunc char*plug_get_fname(struct arglist *);
  97. ExtFunc void plug_set_version(struct arglist *, const char *);
  98. ExtFunc char*plug_get_version(struct arglist *);
  99. ExtFunc void plug_set_timeout(struct arglist *, int);
  100. ExtFunc int  plug_get_timeout(struct arglist *);
  101. ExtFunc void plug_set_launch(struct arglist *, int);
  102. ExtFunc int plug_get_launch(struct arglist *);
  103. ExtFunc void plug_set_summary(struct arglist *, const char *, const char*);
  104. ExtFunc char*plug_get_summary(struct arglist *);
  105. ExtFunc void plug_set_description(struct arglist *, const char *,const char *);
  106. ExtFunc char*plug_get_description(struct arglist *);
  107. ExtFunc void plug_set_category(struct arglist *, int);
  108. ExtFunc int  plug_get_category(struct arglist *);
  109. ExtFunc void plug_set_copyright(struct arglist *, const char *, const char*);
  110. ExtFunc char*plug_get_copyright(struct arglist *);
  111. ExtFunc void plug_set_family(struct arglist * , const char *, const char *);
  112. ExtFunc char*plug_get_family(struct arglist *);
  113. ExtFunc void plug_set_dep(struct arglist *, const char *);
  114. ExtFunc struct arglist * plug_get_deps(struct arglist*);
  115. ExtFunc void plug_set_id(struct arglist *, int);
  116. ExtFunc int  plug_get_id(struct arglist *);
  117. ExtFunc void plug_set_cve_id(struct arglist *, char *);
  118. ExtFunc char*plug_get_cve_id(struct arglist *);
  119. ExtFunc void plug_set_bugtraq_id(struct arglist *, char *);
  120. ExtFunc char*plug_get_bugtraq_id(struct arglist *);
  121. ExtFunc void plug_set_xref(struct arglist *, char *, char *);
  122. ExtFunc char * plug_get_xref(struct arglist *);
  123. ExtFunc void plug_set_see_also(struct arglist *, char *);
  124. ExtFunc struct arglist * plug_get_see_also(struct arglist *);
  125. #ifdef HAVE_SSL
  126. ExtFunc void plug_set_ssl_cert(struct arglist*, char*);
  127. ExtFunc void plug_set_ssl_key(struct arglist*, char*);
  128. ExtFunc void plug_set_ssl_pem_password(struct arglist*, char*);
  129. ExtFunc int nessus_SSL_init(char*);
  130. ExtFunc void sslerror(char*);
  131. ExtFunc void nessus_install_passwd_cb(SSL_CTX*, char*);
  132. #endif
  133. ExtFunc void plug_add_dep(struct arglist *, char *, char *);
  134. ExtFunc void plug_add_port(struct arglist *, int);
  135. ExtFunc const char * plug_get_hostname(struct arglist *);
  136. ExtFunc const char * plug_get_host_fqdn(struct arglist *);
  137. ExtFunc unsigned int plug_get_host_open_port(struct arglist * desc);
  138. ExtFunc void plug_add_host(struct arglist *, struct arglist *);
  139. ExtFunc char* plug_get_cve_id(struct arglist*);
  140. ExtFunc char* plug_get_bugtraq_id(struct arglist*);
  141. ExtFunc void plug_require_key(struct arglist *, const char *);
  142. ExtFunc struct arglist * plug_get_required_keys(struct arglist *);
  143. ExtFunc void plug_exclude_key(struct arglist *, const char *);
  144. ExtFunc struct arglist * plug_get_excluded_keys(struct arglist *);
  145. ExtFunc void plug_require_port(struct arglist *, const char *);
  146. ExtFunc struct arglist * plug_get_required_ports(struct arglist *);
  147. ExtFunc void plug_require_udp_port(struct arglist*, const char *);
  148. ExtFunc struct arglist * plug_get_required_udp_ports(struct arglist *);
  149. ExtFunc int plug_get_port_transport(struct arglist*, int);
  150. ExtFunc int comm_send_status(struct arglist*, char*, char*, int, int);
  151. ExtFunc int islocalhost(struct in_addr *);
  152. /*
  153.  * Reporting functions
  154.  */
  155.  
  156. /* Plugin-specific : */
  157. ExtFunc void proto_post_hole(struct arglist *, int, const char *, const char *);
  158. ExtFunc void post_hole(struct arglist *, int, const char *);
  159. ExtFunc void post_hole_udp(struct arglist *, int, const char *);
  160. #define post_hole_tcp post_hole
  161. ExtFunc void proto_post_info(struct arglist *, int, const char *, const char *);
  162. ExtFunc void post_info(struct arglist *, int, const char *);
  163. ExtFunc void post_info_udp(struct arglist *, int, const char *);
  164. #define post_info_tcp post_info
  165. ExtFunc void proto_post_note(struct arglist *, int, const char *, const char *);
  166. ExtFunc void post_note(struct arglist *, int, const char *);
  167. ExtFunc void post_note_udp(struct arglist *, int, const char *);
  168. #define post_note_tcp post_note
  169. #ifndef _WIN32
  170. /* returns a full duplex data file stream */
  171. ExtFunc FILE * ptyexecvp (const char *file, const char **argv, pid_t *child);
  172. #endif /* _WIN32 */
  173. ExtFunc char ** append_argv (char **argv, char *opt);
  174. ExtFunc void    destroy_argv (char **argv);
  175. ExtFunc void (*pty_logger(void(*)(const char *, ...)))(const char *, ...);
  176. ExtFunc FILE* nessus_popen(const char*, char *const[], pid_t*);
  177. ExtFunc FILE* nessus_popen4(const char*, char *const[], pid_t*, int);
  178. ExtFunc int nessus_pclose(FILE*, pid_t);
  179. /* 
  180.  * Management of the portlists
  181.  */
  182. ExtFunc void host_add_port(struct arglist *, int, int);
  183. ExtFunc void host_add_port_udp(struct arglist *, int, int);
  184. ExtFunc int host_get_port_state(struct arglist *, int);
  185. ExtFunc int host_get_port_state_udp(struct arglist *, int);
  186. /* Not implemented
  187. char * host_get_port_banner(struct arglist *, int);
  188. */
  189. /*
  190.  * Miscellaneous functions
  191.  */
  192.  
  193. ExtFunc struct in_addr * plug_get_host_ip(struct arglist *);
  194. ExtFunc char * plug_get_host_name(struct arglist *);
  195. ExtFunc char * get_preference(struct arglist *, const char *);
  196. #define PREF_CHECKBOX "checkbox"
  197. #define PREF_ENTRY "entry"
  198. #define PREF_RADIO "radio"
  199. #define PREF_PASSWORD "password"
  200. #define PREF_FILE "file"
  201. ExtFunc void add_plugin_preference(struct arglist *, const char *, const char *, const char *);
  202. ExtFunc char *get_plugin_preference(struct arglist *, const char *);
  203. ExtFunc const char *get_plugin_preference_fname(struct arglist*, const char*);
  204. /*
  205.  * Replacement for system related functions
  206.  */
  207.  
  208. ExtFunc void * emalloc(size_t);
  209. ExtFunc char * estrdup(const char *);
  210. ExtFunc void * erealloc(void*, size_t);
  211. ExtFunc void efree(void *);
  212. ExtFunc size_t estrlen(const char *, size_t);
  213. #ifdef HUNT_MEM_LEAKS
  214. ExtFunc void * __hml_malloc(char*, int, size_t);
  215. ExtFunc char * __hml_strdup(char*, int, char*);
  216. ExtFunc void   __hml_free(char*, int, void*);
  217. ExtFunc void * __hml_realloc(char*, int, void*, size_t);
  218. #define emalloc(x) __hml_malloc(__FILE__, __LINE__, x)
  219. #define estrdup(x) __hml_strdup(__FILE__, __LINE__, x)
  220. #define efree(x)   __hml_free(__FILE__, __LINE__, x)
  221. #undef strdup
  222. #define malloc(x) __hml_malloc(__FILE__, __LINE__, x)
  223. #define strdup(x) __hml_strdup(__FILE__, __LINE__, x)
  224. #define free(x)   __hml_free(__FILE__, __LINE__, &x)
  225. #define realloc(x, y) __hml_realloc(__FILE__, __LINE__, x, y)
  226. #endif
  227. /* 
  228.  * Inter Plugins Communication functions
  229.  */
  230. ExtFunc struct kb_item ** plug_get_kb(struct arglist *);
  231. ExtFunc void plug_set_key(struct arglist *, char *, int, void *);
  232. ExtFunc void plug_replace_key(struct arglist *, char *, int, void *);
  233. ExtFunc void * plug_get_key(struct arglist *, char *, int *);
  234. ExtFunc void * plug_get_fresh_key(struct arglist *, char *, int *);
  235. /*
  236.  * FTP Functions
  237.  */
  238. ExtFunc int ftp_log_in(int , char * , char * );
  239. ExtFunc int ftp_get_pasv_address(int , struct sockaddr_in * );
  240. ExtFunc char* addslashes(char*);
  241. ExtFunc char* rmslashes(char*);
  242. ExtFunc char* nessuslib_version();
  243. /*
  244.  * Pcap utils
  245.  */
  246. #include <pcap.h>
  247.  
  248. ExtFunc int get_datalink_size(int);
  249. ExtFunc char *routethrough(struct in_addr *, struct in_addr *);
  250. ExtFunc int is_local_ip(struct in_addr);
  251. ExtFunc int get_mac_addr(struct in_addr, char**);
  252. /* 
  253.  * Misc. defines
  254.  */
  255. /* Actions types of the plugins */
  256. #define ACT_LAST ACT_END
  257. #define ACT_FIRST ACT_INIT
  258. #define ACT_END 10
  259. #define ACT_FLOOD 9
  260. #define ACT_KILL_HOST 8
  261. #define ACT_DENIAL  7
  262. #define ACT_DESTRUCTIVE_ATTACK  6
  263. #define ACT_MIXED_ATTACK  5
  264. #define ACT_ATTACK  4
  265. #define ACT_GATHER_INFO  3
  266. #define ACT_SETTINGS 2
  267. #define ACT_SCANNER  1
  268. #define ACT_INIT 0
  269. #define LAUNCH_DISABLED 0
  270. #define LAUNCH_RUN 1
  271. #define LAUNCH_SILENT 2
  272. /*
  273.  * Type of "transport layer", for encapsulated connections
  274.  * Only SSL is supported at this time.
  275.  * (Bad) examples of other layers could be SOCKS, httptunnel, icmptunnel,
  276.  * RMI over HTTP, DCOM over HTTP, TCP over TCP, etc.
  277.  */
  278. #define NESSUS_ENCAPS_IP 1
  279. #define NESSUS_ENCAPS_SSLv23 2 /* Ask for compatibility options */
  280. #define NESSUS_ENCAPS_SSLv2 3
  281. #define NESSUS_ENCAPS_SSLv3 4
  282. #define NESSUS_ENCAPS_TLSv1 5
  283. #define IS_ENCAPS_SSL(x) ((x) >= NESSUS_ENCAPS_SSLv23 && (x) <= NESSUS_ENCAPS_TLSv1)
  284. /*
  285.  * Transport layer options 
  286.  */
  287. #define NESSUS_CNX_IDS_EVASION_SPLIT 1L  /* Try to evade NIDS by spliting sends */
  288. #define NESSUS_CNX_IDS_EVASION_INJECT 2L /* Split + insert garbage */
  289. #define NESSUS_CNX_IDS_EVASION_SHORT_TTL 4L /* Split + too short ttl for garbage */
  290. #define NESSUS_CNX_IDS_EVASION_FAKE_RST  8L /* Send a fake RST from our end after each established connection */
  291. #define NESSUS_CNX_IDS_EVASION_SEND_MASK (NESSUS_CNX_IDS_EVASION_SPLIT|NESSUS_CNX_IDS_EVASION_INJECT|NESSUS_CNX_IDS_EVASION_SHORT_TTL)
  292. ExtFunc int    open_stream_connection(struct arglist *, unsigned int, int, int);
  293. ExtFunc int    open_stream_connection_unknown_encaps(struct arglist *, unsigned int, int, int *);
  294. ExtFunc int    open_stream_connection_unknown_encaps5(struct arglist *, unsigned int, int, int *, int *);
  295. ExtFunc int    open_stream_auto_encaps(struct arglist *, unsigned int, int);
  296. ExtFunc int    write_stream_connection (int, void * buf, int n);
  297. ExtFunc int    read_stream_connection (int, void *, int);
  298. ExtFunc int    read_stream_connection_min(int, void*, int, int);
  299. ExtFunc int    close_stream_connection(int);
  300. ExtFunc int    nsend(int, void*, int, int);
  301. ExtFunc const char* get_encaps_name(int);
  302. ExtFunc const char* get_encaps_through(int);
  303. ExtFunc int    stream_set_timeout(int, int);
  304. ExtFunc int    stream_set_options(int, int, int);
  305. ExtFunc int stream_set_buffer(int, int);
  306. ExtFunc int stream_get_buffer_sz (int);
  307. ExtFunc int stream_get_err(int);
  308. #ifdef HAVE_SSL
  309. ExtFunc        SSL*    stream_get_ssl(int);
  310. ExtFunc        X509*   stream_get_server_certificate(int);
  311. ExtFunc        char*   stream_get_ascii_server_certificate(int);
  312. #endif
  313. ExtFunc int  is_shell_command_present(char*);
  314. ExtFunc char*  find_in_path(char*, int);
  315. ExtFunc char* build_encode_URL(struct arglist*, char*, char*, char*, char*);
  316. #ifdef HAVE_SSL
  317. ExtFunc int nessus_register_connection(int, SSL*);
  318. #else
  319. ExtFunc int nessus_register_connection(int, void*);
  320. #endif
  321. ExtFunc int nessus_deregister_connection(int);
  322. ExtFunc int nessus_get_socket_from_connection(int);
  323. ExtFunc void nessus_init_random();
  324. ExtFunc int stream_zero(fd_set*);
  325. ExtFunc int stream_set(int, fd_set*);
  326. ExtFunc int stream_isset(int, fd_set*);
  327. ExtFunc int bpf_server();
  328. ExtFunc int bpf_open_live(char*, char*);
  329. ExtFunc u_char* bpf_next(int, int *);
  330. ExtFunc u_char* bpf_next_tv(int, int *, struct timeval *);
  331. ExtFunc void bpf_close(int);
  332. ExtFunc int  bpf_datalink(int);
  333. void initsetproctitle(int argc, char *argv[], char *envp[]);
  334. #ifndef HAVE_SETPROCTITLE
  335. void setproctitle( const char *fmt, ... );
  336. #endif
  337. ExtFunc struct in_addr socket_get_next_source_addr();
  338. ExtFunc int set_socket_source_addr(int, int);
  339. ExtFunc void socket_source_init(struct in_addr *);
  340. struct arglist * store_plugin(struct arglist *,  char *);
  341. struct arglist * store_load_plugin(char *, char *,  struct arglist*);
  342. int  store_init_sys(char *);
  343. int  store_init_user(char *);
  344. int nessus_init_svc();
  345. /*-----------------------------------------------------------------*/
  346. #define KB_TYPE_INT ARG_INT
  347. #define KB_TYPE_STR ARG_STRING
  348. struct kb_item {
  349. char * name;
  350.   char type;
  351. union {
  352. char * v_str;
  353. int v_int;
  354. } v;
  355. struct kb_item * next;
  356. };
  357. struct kb_item ** kb_new();
  358. struct kb_item * kb_item_get_single(struct kb_item **, char *, int );
  359. char * kb_item_get_str(struct kb_item **, char *);
  360. int    kb_item_get_int(struct kb_item **, char *);
  361. struct kb_item * kb_item_get_all(struct kb_item **, char *);
  362. struct kb_item * kb_item_get_pattern(struct kb_item **, char *);
  363. void   kb_item_get_all_free(struct kb_item *);
  364. int    kb_item_add_str(struct kb_item **, char *, char *);
  365. int    kb_item_set_str(struct kb_item **, char *, char *);
  366. int    kb_item_add_int(struct kb_item **, char *, int   );
  367. int    kb_item_set_int(struct kb_item **, char *, int   );
  368. struct arglist * plug_get_oldstyle_kb(struct arglist * );
  369. #define NEW_KB_MGMT
  370. /*-----------------------------------------------------------------*/
  371. struct http_msg {
  372. int type; /* Who should read this message  */
  373. pid_t owner; /* Process who sent that message */
  374. unsigned short port;
  375. int total_len;
  376. int transport;
  377. int data_len;
  378. char data[1];
  379. };
  380. int http_share_exists(struct arglist *);
  381. struct http_msg * http_share_mkmsg(int, int, int, char*);
  382. void http_share_freemsg(struct http_msg*);
  383. struct http_msg * http_share_send_recv_msg(struct arglist *, struct http_msg *);
  384. pid_t http_share_init(struct arglist *);
  385. int http_share_close(struct arglist *, pid_t);
  386. int os_send(int, void*, int, int);
  387. int os_recv(int, void*, int, int);
  388. #define INTERNAL_COMM_MSG_TYPE_CTRL (1 << 16)
  389. #define INTERNAL_COMM_MSG_TYPE_KB (1 << 17)
  390. #define INTERNAL_COMM_MSG_TYPE_DATA (1 << 18)
  391. #define INTERNAL_COMM_MSG_SHARED_SOCKET (1 << 19)
  392. #define INTERNAL_COMM_KB_REPLACE 1
  393. #define INTERNAL_COMM_KB_GET 2
  394. #define INTERNAL_COMM_KB_SENDING_INT 4
  395. #define INTERNAL_COMM_KB_SENDING_STR 8
  396. #define INTERNAL_COMM_KB_ERROR   16
  397. #define INTERNAL_COMM_CTRL_FINISHED 1
  398. #define INTERNAL_COMM_CTRL_ACK          2
  399. #define INTERNAL_COMM_SHARED_SOCKET_REGISTER 1
  400. #define INTERNAL_COMM_SHARED_SOCKET_ACQUIRE 2
  401. #define INTERNAL_COMM_SHARED_SOCKET_RELEASE 4
  402. #define INTERNAL_COMM_SHARED_SOCKET_DESTROY 8
  403. #define INTERNAL_COMM_SHARED_SOCKET_DORECVMSG 16
  404. #define INTERNAL_COMM_SHARED_SOCKET_BUSY  32
  405. #define INTERNAL_COMM_SHARED_SOCKET_ERROR 64
  406. int internal_send(int, char *, int);
  407. int internal_recv(int, char **, int *, int *);
  408. int internal_finished(int);
  409. int fd_is_stream(int);
  410. int stream_pending(int);
  411. int send_fd(int, int);
  412. int recv_fd(int);
  413. int shared_socket_register ( struct arglist *, int, char *);
  414. int shared_socket_acquire  ( struct arglist *, char * );
  415. int shared_socket_release  ( struct arglist *, char * );
  416. int shared_socket_destroy  ( struct arglist *, char * );
  417. #endif