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:
@@ -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());
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user