/* Licensed to the Apache Software Foundation (ASF) under one or more *contributorlicenseagreements.SeetheNOTICEfiledistributedwith *thisworkforadditionalinformationregardingcopyrightownership. *TheASFlicensesthisfiletoYouundertheApacheLicense,Version2.0 *(the"License");youmaynotusethisfileexceptincompliancewith *theLicense.YoumayobtainacopyoftheLicenseat * *http://www.apache.org/licenses/LICENSE-2.0 * *Unlessrequiredbyapplicablelaworagreedtoinwriting,software *distributedundertheLicenseisdistributedonan"ASIS"BASIS, *WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied. *SeetheLicenseforthespecificlanguagegoverningpermissionsand *limitationsundertheLicense.
*/
/* Check if this could even be an IP address */ if (!apr_isxdigit(line[0]) && line[0] != ':') {
withname++;
apr_file_puts(line, outfile); continue;
}
/* Terminate the line at the next space */ if ((space = strchr(line, ' ')) != NULL) {
*space = '\0';
} else {
space = dummy;
}
/* See if we have it in our cache */
hostname = (char *) apr_hash_get(cache, line, APR_HASH_KEY_STRING); if (hostname) {
apr_file_printf(outfile, "%s %s", hostname, space + 1);
cachehits++; continue;
}
/* Parse the IP address */
status = apr_sockaddr_info_get(&ip, line, APR_UNSPEC, 0, 0, pline); if (status != APR_SUCCESS) { /* Not an IP address */
withname++;
*space = ' ';
apr_file_puts(line, outfile); continue;
}
/* This does not make much sense, but historically "resolves" means *"parsedasanIPaddress".Itdoesnotmeanweactuallyresolved *theIPaddressintoahostname.
*/
resolves++;
/* From here on our we cache each result, even if it was not *successful
*/
cachesize++;
/* Try and perform a reverse lookup */
status = apr_getnameinfo(&hostname, ip, 0) != APR_SUCCESS; if (status || hostname == NULL) { /* Could not perform a reverse lookup */
*space = ' ';
apr_file_puts(line, outfile);
noreverse++;
/* Perform a double lookup */ if (doublelookups) { /* Do a forward lookup on our hostname, and see if that matches our *originalIPaddress.
*/
status = apr_sockaddr_info_get(&ipdouble, hostname, ip->family, 0, 0, pline); if (status != APR_SUCCESS ||
memcmp(ipdouble->ipaddr_ptr, ip->ipaddr_ptr, ip->ipaddr_len)) { /* Double-lookup failed */
*space = ' ';
apr_file_puts(line, outfile);
doublefailed++;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.