amap.c

来自「Ubuntu packages of security software。 相」· C语言 代码 · 共 208 行

C
208
字号
/* AMAP - application mapper Copyright (c) 2003 van Hauser and DJ.RevMoon * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version.     * * This program 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.  See the * GNU General Public License for more details. *     * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */// INCLUDES //#include "amap-inc.h"#include "amap.h"#include "amap-lib.h"int amap6 = 0;// HELP //void help(char *prg) {  printf("%s v%s (c) %s by %s <%s> %s\n", AMAP_PROGRAM, AMAP_VERSION, AMAP_YEAR, AMAP_AUTHOR, AMAP_EMAIL, AMAP_RESOURCE);  printf("Syntax: %s [-A|-B|-P|-W] [-1buSRHUdqv] [[-m] -o <file>] [-D <file>] [-t/-T sec] [-c cons] [-C retries] [-p proto] [-i <file>] [target port [port] ...]\n", prg);  printf("Modes:\n");  printf("  -A         Map applications: send triggers and analyse responses (default)\n");  printf("  -B         Just grab banners, do not send triggers\n");  printf("  -P         No banner or application stuff - be a (full connect) port scanner\n");  printf("  -W         Web Update - online update the application fingerprint database!\n");  printf("Options:\n");  printf("  -1         Only send triggers to a port until 1st identification. Speeeeed!\n");#ifdef AF_INET6  if (amap6)    printf("  -4         Use IPv4 instead of IPv6\n");  else    printf("  -6         Use IPv6 instead of IPv4\n");#endif  printf("  -b         Print ascii banner of responses\n");  printf("  -i FILE    Nmap machine readable outputfile to read ports from\n");  printf("  -u         Ports specified on commandline are UDP (default is TCP)\n");#ifdef OPENSSL  printf("  -R / -S    Do NOT identify RPC / SSL services\n");#else  printf("  -R         Do NOT identify RPC service\n");#endif  printf("  -H         Do NOT send application triggers marked as potentially harmful\n");  printf("  -U         Do NOT dump unrecognised responses (better for scripting)\n");  printf("  -d         Dump all responses\n");  printf("  -v         Verbose mode, use twice (or more!) for debug (not recommended :-)\n");  printf("  -q         Do not report closed ports, and do not print them as unidentified\n");  printf("  -o FILE [-m] Write output to file FILE, -m creates machine readable output\n");  printf("  -c CONS    Amount of parallel connections to make (default %d, max %d)\n", AMAP_DEFAULT_TASKS, AMAP_MAX_TASKS);  printf("  -C RETRIES Number of reconnects on connect timeouts (see -T) (default %d)\n", AMAP_MAX_CONNECT_RETRIES);  printf("  -T SEC     Connect timeout on connection attempts in seconds (default %d)\n", AMAP_CONNECT_TIME);  printf("  -t SEC     Response wait timeout in seconds (default %d)\n", AMAP_RESPONSE_TIME);  printf("  -p PROTO   Only send triggers for this protocol (e.g. ftp)\n");//  printf("  -D FILE    Read from Definitions FILE[.trig|.resp|.rpc] instead of default\n");//  printf("  -h         Print this shit\n");  printf("  TARGET PORT   The target address and port(s) to scan (additional to -i)\n");  printf("%s is a tool to identify application protocols on target ports.\n", AMAP_PROGRAM);#ifndef OPENSSL  printf("Note: this version was NOT compiled with SSL support!\n");#endif  printf("Usage hint: Options \"-bqv\" are recommended, add \"-1\" for fast/rush checks.\n");  exit(-1);}// MAIN //int main(int argc, char *argv[]) {  // VARIABLES //  amap_struct_options   *opt;  int newargc;  char *newargv[argc];  int  i = 0;  // INITIALISATION //  opt = amap_main_init();  if (strstr(argv[0], "amap6") != NULL) {    amap6 = 1;    opt->ipv6 = 1;  }  // GETOPT //  if (argc < 2 || strncmp(argv[1], "-?", 2) == 0 || strncmp(argv[1], "--h", 3) == 0)    help(argv[0]);  while ((i = getopt(argc, argv, "146SRHUbuvdhmi:T:c:C:p:o:D:t:qABPW")) >= 0) {    switch (i) {    case 'A': // defines in the future that we want default AMAP mode      break;    case '1':      opt->one_is_enough = 1;      break;    case '4':      opt->ipv6 = 0;      break;    case '6':      opt->ipv6 = 1;#ifndef AF_INET6      amap_error("No IPv6 support found on your system");#endif      break;    case 'd':      opt->dump_all = 1;      break;    case 'v':      opt->verbose++;      break;    case 'S':      opt->do_scan_ssl = 0;      break;    case 'R':      opt->do_scan_rpc = 0;      break;    case 'b':      opt->banner = 1;      break;    case 'm':      opt->machine_readable = 1;      break;    case 'H':      opt->harmful = 0;      break;    case 'U':      opt->dump_unidentified = 0;      break;    case 'c':      opt->tasks = atoi(optarg);      break;    case 'C':      opt->max_connect_retries = atoi(optarg);      break;    case 'i':      opt->file_nmap = optarg;      break;    case 'u':      opt->cmd_proto = AMAP_PROTO_UDP;      break;    case 'p':      opt->only_send_trigger = optarg;      break;    case 'o':      opt->file_log = optarg;      break;    case 'q':      opt->quiet = 1;      break;    case 'D':      opt->filename = optarg;      break;    case 't':      opt->timeout_response = atoi(optarg);      break;    case 'T':      opt->timeout_connect = atoi(optarg);      break;    case 'B':      opt->banner_only = 1;      opt->do_scan_ssl = 0;      opt->do_scan_rpc = 0;      opt->one_is_enough = 1;      break;    case 'P':      opt->portscanner = 1;      opt->do_scan_ssl = 0;      opt->do_scan_rpc = 0;      opt->one_is_enough = 1;      opt->timeout_response--;      break;    case 'W':      opt->update = 1;      break;    case 'h':      help(argv[0]);      break;    default:      fprintf(stderr, "Error: unknown option -%c\n", i);      help(argv[0]);    }  }  // VARIABLES VERIFICATION //  if (opt->update && argc != 2 && opt->filename == NULL)    amap_warn("amap takes no other commandline options when in -W online update mode except -D");  if ((optind + 2 > argc) && (opt->file_nmap == NULL) && (opt->update == 0))    help(argv[0]);  if (opt->file_log == NULL && opt->machine_readable)    amap_error("option -m set, but no logfile defined (-o)");  if (opt->tasks < 1 || opt->tasks > AMAP_MAX_TASKS)    amap_error("the connect task option (-c) must be between 1 and %d", AMAP_MAX_TASKS);  if (opt->timeout_connect < 1 || opt->timeout_connect > 240)    amap_error("the connect timeout option (-T) must be between 1 and 240, its counted in seconds!");  if (opt->timeout_response < 1 || opt->timeout_response > 240)    amap_error("the response timeout option (-t) must be between 1 and 240, its counted in seconds!");  newargc = argc - optind;  for (i = optind; i < argc; i++)    newargv[i - optind] = argv[i];  newargv[newargc] = NULL;  return amap_main(opt, newargc, newargv);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?