1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-06 20:51:30 +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) { 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; const struct sockaddr_storage *lss, *rss;
lss = (lhs) ? lhs->target->TargetSockAddr() : ss; lss = (lhs) ? lhs->target->TargetSockAddr() : ss;
rss = (rhs) ? rhs->target->TargetSockAddr() : ss; rss = (rhs) ? rhs->target->TargetSockAddr() : ss;
return 0 > sockaddr_storage_cmp(lss, rss); return 0 > sockaddr_storage_cmp(lss, rss);
} }
struct sockaddr_storage *HssPredicate::ss = NULL;
void UltraScanInfo::log_overall_rates(int logt) { void UltraScanInfo::log_overall_rates(int logt) {
log_write(logt, "Overall sending rates: %.2f packets / s", send_rate_meter.getOverallPacketRate(&now)); 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) { HostScanStats *UltraScanInfo::findHost(struct sockaddr_storage *ss) {
std::set<HostScanStats *>::iterator hss; std::set<HostScanStats *>::iterator hss;
SockAddrPredicate p(ss); HssPredicate::ss = ss;
HostScanStats *fakeHss = NULL; HostScanStats *fakeHss = NULL;
hss = std::lower_bound(incompleteHosts.begin(), incompleteHosts.end(), fakeHss, p); hss = incompleteHosts.find(fakeHss);
if (hss != incompleteHosts.end()) { if (hss != incompleteHosts.end()) {
if (o.debugging > 2) if (o.debugging > 2)
log_write(LOG_STDOUT, "Found %s in incomplete hosts list.\n", (*hss)->target->targetipstr()); log_write(LOG_STDOUT, "Found %s in incomplete hosts list.\n", (*hss)->target->targetipstr());
return *hss; return *hss;
} }
hss = std::lower_bound(completedHosts.begin(), completedHosts.end(), fakeHss, p); hss = completedHosts.find(fakeHss);
if (hss != completedHosts.end()) { if (hss != completedHosts.end()) {
if (o.debugging > 2) if (o.debugging > 2)
log_write(LOG_STDOUT, "Found %s in completed hosts list.\n", (*hss)->target->targetipstr()); 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 { struct HssPredicate {
public: public:
int operator() (HostScanStats *lhs, HostScanStats *rhs); int operator() (HostScanStats *lhs, HostScanStats *rhs);
}; static struct sockaddr_storage *ss;
struct SockAddrPredicate {
public:
SockAddrPredicate(struct sockaddr_storage *ss) {
this->ss = ss;
}
int operator() (HostScanStats *lhs, HostScanStats *rhs);
struct sockaddr_storage *ss;
}; };
class UltraScanInfo { class UltraScanInfo {