static int dns_global_initialize(struct state_conf *conf) { char *qtype_str = NULL; char *domain = NULL; // This is zmap boilerplate. Why do I have to write this? num_ports = conf->source_port_last - conf->source_port_first + 1; udp_set_num_ports(num_ports); setup_qtype_str_map(); // Want to add support for multiple questions? Start here. if (!conf->probe_args) { // no parameters passed in. Use defaults domain = (char*) default_domain; qtype = default_qtype; } else { char *probe_arg_delimiter_p = strchr(conf->probe_args, ','); if (probe_arg_delimiter_p == NULL || probe_arg_delimiter_p == conf->probe_args || conf->probe_args + strlen(conf->probe_args) == probe_arg_delimiter_p + 1) { log_fatal("dns", "Invalid probe args. Format: \"A,google.com\""); } domain = probe_arg_delimiter_p + 1; qtype_str = xmalloc(probe_arg_delimiter_p - conf->probe_args + 1); strncpy(qtype_str, conf->probe_args, probe_arg_delimiter_p - conf->probe_args); qtype_str[probe_arg_delimiter_p - conf->probe_args] = '\0'; qtype = qtype_str_to_code(qtype_str); if (!qtype) { log_fatal("dns", "Incorrect qtype supplied. %s", qtype_str); return EXIT_FAILURE; } } free(qtype_str); return build_global_dns_packet(domain); }
int upnp_global_initialize(struct state_conf *state) { int num_ports = state->source_port_last - state->source_port_first + 1; udp_set_num_ports(num_ports); return EXIT_SUCCESS; }
static int udp_dns_global_initialize(struct state_conf *conf) { char *args, *c; int dns_domain_len; unsigned char* dns_domain; num_ports = conf->source_port_last - conf->source_port_first + 1; udp_set_num_ports(num_ports); udp_send_msg_len = sizeof(udp_dns_msg_default); udp_send_msg = malloc(udp_send_msg_len); memcpy(udp_send_msg, udp_dns_msg_default, udp_send_msg_len); if (!(conf->probe_args && strlen(conf->probe_args) > 0)) return(0); args = strdup(conf->probe_args); if (! args) exit(1); c = strchr(args, ':'); if (!c) { free(args); free(udp_send_msg); log_fatal("udp_dns", "unknown UDP DNS probe specification (expected " "domain name with name:www.domain.com)"); exit(1); } *c++ = 0; if (strcmp(args, "name") == 0) { free(udp_send_msg); // prepare domain name dns_domain_len=strlen(c)+2; // head 1 byte + null terminator dns_domain = malloc(dns_domain_len); convert_to_dns_name_format(dns_domain, (unsigned char*)c); udp_send_msg_len=dns_domain_len + DNS_HEAD_LEN + DNS_TAIL_LEN; // domain length + header + tailer udp_send_msg = malloc(udp_send_msg_len); // create query packet memcpy(udp_send_msg, udp_dns_msg_default_head, sizeof(udp_dns_msg_default_head)); // header // random Transaction ID random_bytes(udp_send_msg, 2); memcpy(udp_send_msg + sizeof(udp_dns_msg_default_head), dns_domain, dns_domain_len); // domain memcpy(udp_send_msg + sizeof(udp_dns_msg_default_head) + dns_domain_len, udp_dns_msg_default_tail, sizeof(udp_dns_msg_default_tail)); // trailer free(dns_domain); } else { log_fatal("udp_dns", "unknown UDP DNS probe specification (expected " "domain name with name:www.domain.com)"); free(udp_send_msg); free(args); exit(1); } if (udp_send_msg_len > MAX_UDP_PAYLOAD_LEN) { log_warn("udp_dns", "warning: reducing UDP payload to %d " "bytes (from %d) to fit on the wire\n", MAX_UDP_PAYLOAD_LEN, udp_send_msg_len); udp_send_msg_len = MAX_UDP_PAYLOAD_LEN; } free(args); return EXIT_SUCCESS; }