summaryrefslogtreecommitdiff
path: root/rdns_scan/zmap4rdns/src/utility.c
diff options
context:
space:
mode:
Diffstat (limited to 'rdns_scan/zmap4rdns/src/utility.c')
-rw-r--r--rdns_scan/zmap4rdns/src/utility.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/rdns_scan/zmap4rdns/src/utility.c b/rdns_scan/zmap4rdns/src/utility.c
new file mode 100644
index 0000000..ecd320f
--- /dev/null
+++ b/rdns_scan/zmap4rdns/src/utility.c
@@ -0,0 +1,71 @@
+/*
+ * ZMap Copyright 2013 Regents of the University of Michigan
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ */
+
+#include "utility.h"
+
+#include <stdio.h>
+#include <arpa/inet.h>
+
+#include "state.h"
+#include "../lib/logger.h"
+
+in_addr_t string_to_ip_address(char *t)
+{
+ in_addr_t r = inet_addr(t);
+ if (r == INADDR_NONE) {
+ log_fatal("send", "invalid ip address: `%s'", t);
+ }
+ return r;
+}
+
+void add_to_array(char *to_add)
+{
+ if (zconf.number_source_ips >= 256) {
+ // log fatal here
+ log_fatal("parse", "over 256 source IP addresses provided");
+ }
+ log_debug("SEND", "ipaddress: %s\n", to_add);
+ zconf.source_ip_addresses[zconf.number_source_ips] =
+ string_to_ip_address(to_add);
+ zconf.number_source_ips++;
+}
+
+void parse_source_ip_addresses(char given_string[])
+{
+ char *dash = strchr(given_string, '-');
+ char *comma = strchr(given_string, ',');
+ if (dash && comma) {
+ *comma = '\0';
+ parse_source_ip_addresses(given_string);
+ parse_source_ip_addresses(comma + 1);
+ } else if (comma) {
+ while (comma) {
+ *comma = '\0';
+ add_to_array(given_string);
+ given_string = comma + 1;
+ comma = strchr(given_string, ',');
+ if (!comma) {
+ add_to_array(given_string);
+ }
+ }
+ } else if (dash) {
+ *dash = '\0';
+ log_debug("SEND", "address: %s\n", given_string);
+ log_debug("SEND", "address: %s\n", dash + 1);
+ in_addr_t start = ntohl(string_to_ip_address(given_string));
+ in_addr_t end = ntohl(string_to_ip_address(dash + 1)) + 1;
+ while (start != end) {
+ struct in_addr temp;
+ temp.s_addr = htonl(start);
+ add_to_array(strdup(inet_ntoa(temp)));
+ start++;
+ }
+ } else {
+ add_to_array(given_string);
+ }
+}