1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-06 12:41:29 +00:00

UltraScanInfo::findHost is now faster

This commit is contained in:
tudor
2016-08-10 15:39:19 +00:00
parent 7f1ec2b806
commit 074f99b291
2 changed files with 5 additions and 16 deletions

View File

@@ -154,15 +154,12 @@ extern "C" int g_has_npcap_loopback;
int HssPredicate::operator() (HostScanStats *lhs, HostScanStats *rhs) {
return 0 > sockaddr_storage_cmp(lhs->target->TargetSockAddr(), rhs->target->TargetSockAddr());
}
int SockAddrPredicate::operator() (HostScanStats *lhs, HostScanStats *rhs) {
const struct sockaddr_storage *lss, *rss;
lss = (lhs) ? lhs->target->TargetSockAddr() : ss;
rss = (rhs) ? rhs->target->TargetSockAddr() : ss;
return 0 > sockaddr_storage_cmp(lss, rss);
}
struct sockaddr_storage *HssPredicate::ss = NULL;
void UltraScanInfo::log_overall_rates(int logt) {
log_write(logt, "Overall sending rates: %.2f packets / s", send_rate_meter.getOverallPacketRate(&now));
@@ -1139,17 +1136,17 @@ bool UltraScanInfo::sendOK(struct timeval *when) {
HostScanStats *UltraScanInfo::findHost(struct sockaddr_storage *ss) {
std::set<HostScanStats *>::iterator hss;
SockAddrPredicate p(ss);
HssPredicate::ss = ss;
HostScanStats *fakeHss = NULL;
hss = std::lower_bound(incompleteHosts.begin(), incompleteHosts.end(), fakeHss, p);
hss = incompleteHosts.find(fakeHss);
if (hss != incompleteHosts.end()) {
if (o.debugging > 2)
log_write(LOG_STDOUT, "Found %s in incomplete hosts list.\n", (*hss)->target->targetipstr());
return *hss;
}
hss = std::lower_bound(completedHosts.begin(), completedHosts.end(), fakeHss, p);
hss = completedHosts.find(fakeHss);
if (hss != completedHosts.end()) {
if (o.debugging > 2)
log_write(LOG_STDOUT, "Found %s in completed hosts list.\n", (*hss)->target->targetipstr());

View File

@@ -654,15 +654,7 @@ struct ultra_scan_performance_vars : public scan_performance_vars {
struct HssPredicate {
public:
int operator() (HostScanStats *lhs, HostScanStats *rhs);
};
struct SockAddrPredicate {
public:
SockAddrPredicate(struct sockaddr_storage *ss) {
this->ss = ss;
}
int operator() (HostScanStats *lhs, HostScanStats *rhs);
struct sockaddr_storage *ss;
static struct sockaddr_storage *ss;
};
class UltraScanInfo {