static int anonymizeip_init(mapidflib_function_instance_t *instance, MAPI_UNUSED int flow_descr) { anonip_inst_t *i=malloc(sizeof(anonip_inst_t)); mapiFunctArg* fargs=instance->args; char *str; instance->internal_data=i; str=getargstr(&fargs); PAnonymizer_Init(&i->anon_instance,str); return 0; }
int main( int argc, char **argv ) { struct stat stat_buff; char *rfile, *ffile, *filter, *tstring; char CryptoPAnKey[32]; int c, do_anonymize, confirm, ffd, ret, blast, netflow_version; unsigned int delay, count, sockbuff_size; time_t t_start, t_end; rfile = ffile = filter = tstring = NULL; t_start = t_end = 0; peer.hostname = NULL; peer.port = DEFAULTCISCOPORT; peer.mcast = 0; peer.family = AF_UNSPEC; peer.sockfd = 0; delay = 1; count = 0xFFFFFFFF; sockbuff_size = 0; netflow_version = 5; do_anonymize = 0; blast = 0; verbose = 0; confirm = 0; while ((c = getopt(argc, argv, "46BhH:i:K:L:p:d:c:b:j:r:f:t:v:VY")) != EOF) { switch (c) { case 'h': usage(argv[0]); exit(0); break; case 'B': blast = 1; break; case 'V': printf("%s: Version: %s %s\n%s\n",argv[0], nfdump_version, nfdump_date, rcsid); exit(0); break; case 'Y': confirm = 1; break; case 'H': case 'i': // compatibility with old version peer.hostname = strdup(optarg); peer.mcast = 0; break; case 'j': if ( peer.hostname == NULL ) { peer.hostname = strdup(optarg); peer.mcast = 1; } else { fprintf(stderr, "ERROR, -H(-i) and -j are mutually exclusive!!\n"); exit(255); } break; case 'K': if ( !ParseCryptoPAnKey(optarg, CryptoPAnKey) ) { fprintf(stderr, "Invalid key '%s' for CryptoPAn!\n", optarg); exit(255); } do_anonymize = 1; break; case 'L': if ( !InitLog(argv[0], optarg) ) exit(255); break; case 'p': peer.port = strdup(optarg); break; case 'd': delay = atoi(optarg); break; case 'v': netflow_version = atoi(optarg); if ( netflow_version != 5 && netflow_version != 9 ) { fprintf(stderr, "Invalid netflow version: %s. Accept only 5 or 9!\n", optarg); exit(255); } break; case 'c': count = atoi(optarg); break; case 'b': sockbuff_size = atoi(optarg); break; case 'f': ffile = optarg; break; case 't': tstring = optarg; break; case 'r': rfile = optarg; break; case '4': if ( peer.family == AF_UNSPEC ) peer.family = AF_INET; else { fprintf(stderr, "ERROR, Accepts only one protocol IPv4 or IPv6!\n"); exit(255); } break; case '6': if ( peer.family == AF_UNSPEC ) peer.family = AF_INET6; else { fprintf(stderr, "ERROR, Accepts only one protocol IPv4 or IPv6!\n"); exit(255); } break; default: usage(argv[0]); exit(0); } } if (argc - optind > 1) { usage(argv[0]); exit(255); } else { /* user specified a pcap filter */ filter = argv[optind]; } if ( peer.hostname == NULL ) peer.hostname = DEFAULTHOSTNAME; if ( !filter && ffile ) { if ( stat(ffile, &stat_buff) ) { perror("Can't stat file"); exit(255); } filter = (char *)malloc(stat_buff.st_size); if ( !filter ) { perror("Memory error"); exit(255); } ffd = open(ffile, O_RDONLY); if ( ffd < 0 ) { perror("Can't open file"); exit(255); } ret = read(ffd, (void *)filter, stat_buff.st_size); if ( ret < 0 ) { perror("Error reading file"); close(ffd); exit(255); } close(ffd); } if ( !filter ) filter = "any"; Engine = CompileFilter(filter); if ( !Engine ) exit(254); if ( peer.mcast ) peer.sockfd = Multicast_send_socket (peer.hostname, peer.port, peer.family, sockbuff_size, &peer.addr, &peer.addrlen ); else peer.sockfd = Unicast_send_socket (peer.hostname, peer.port, peer.family, sockbuff_size, &peer.addr, &peer.addrlen ); if ( peer.sockfd <= 0 ) { exit(255); } if ( blast ) { send_blast(delay ); exit(0); } InitExtensionMaps(&extension_map_list); SetupInputFileSequence(NULL,rfile, NULL); if ( tstring ) { if ( !ScanTimeFrame(tstring, &t_start, &t_end) ) exit(255); } if (do_anonymize) PAnonymizer_Init((uint8_t *)CryptoPAnKey); send_data(rfile, t_start, t_end, count, delay, confirm, do_anonymize, netflow_version); return 0; }