1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-26 09:29:01 +00:00

partial merge r9957 in bhdc08: nmap-services port frequency format has been changed to use percentage ratios in the file rather than fractional format (though the latter is still accepted)

This commit is contained in:
fyodor
2008-09-05 02:06:29 +00:00
parent 2ba3a3878d
commit 1d85a02324
2 changed files with 29 additions and 15 deletions

View File

@@ -3,8 +3,9 @@
o Added dns-safe-recursion-port and dns-safe-recursion-txid (non
default NSE scripts) which use the 3rd party dns-oarc.net to test
the source port and transaction ID randomness of a discovered DNS
server (assuming it allows recursion at all). These scripts were
contributed by Brandon Enright.
server (assuming it allows recursion at all). These scripts, which
test for the "Kaminsky" DNS bugs, were contributed by Brandon
Enright.
o Added some Windows and MinGW compatibility patches submitted by
Gisle Vanem.

View File

@@ -158,6 +158,7 @@ static int nmap_services_init() {
int res;
double ratio;
int ratio_n, ratio_d;
char ratio_str[32];
if (nmap_fetchfile(filename, sizeof(filename), "nmap-services") != 1) {
#ifndef WIN32
@@ -198,22 +199,34 @@ static int nmap_services_init() {
if (*p == '#')
continue;
res = sscanf(line, "%127s %hu/%15s %d/%d", servicename, &portno, proto, &ratio_n, &ratio_d);
res = sscanf(line, "%127s %hu/%15s %31s", servicename, &portno, proto, ratio_str);
if (res == 3) {
ratio = 0;
} else if (res == 5) {
if (ratio_n < 0 || ratio_d < 0)
fatal("%s:%d contains an invalid negative value", filename, lineno);
} else if (res == 4) {
if (strchr(ratio_str, '/')) {
res = sscanf(ratio_str, "%d/%d", &ratio_n, &ratio_d);
if (res != 2)
fatal("%s:%d contains invalid port ratio string: %s", filename, lineno, ratio_str);
if (ratio_n > ratio_d)
fatal("%s:%d has a ratio %g. All ratios must be < 1", filename, lineno, (double)ratio_n/ratio_d);
if (ratio_d == 0)
fatal("%s:%d has a ratio denominator of 0 causing a division by 0 error", filename, lineno);
ratio = (double)ratio_n / ratio_d;
ratio_format = 1;
if (ratio_n < 0 || ratio_d < 0)
fatal("%s:%d contains an invalid negative value", filename, lineno);
if (ratio_n > ratio_d)
fatal("%s:%d has a ratio %g. All ratios must be < 1", filename, lineno, (double)ratio_n/ratio_d);
if (ratio_d == 0)
fatal("%s:%d has a ratio denominator of 0 causing a division by 0 error", filename, lineno);
ratio = (double)ratio_n / ratio_d;
ratio_format = 1;
} else if (strncmp(ratio_str, "0.", 2) == 0) {
/* We assume the ratio is in floating point notation already */
ratio = strtod(ratio_str, NULL);
ratio_format = 1;
} else {
ratio = 0;
}
} else {
continue;
}