From 1f6c6d1aac17636c22d13131ab5ff4d36d6515ed Mon Sep 17 00:00:00 2001 From: david Date: Tue, 26 Jan 2010 20:14:29 +0000 Subject: [PATCH] Only change the port state to PORT_OPEN during service scan if it is not already open. Rob Nicholls pointed out that setting the state unconditionally results in multiple messages per port: Discovered open port 3389/tcp Discovered open port 3389/tcp Discovered open port 3389/tcp Discovered open port 3389/tcp This is because setPortState has the side effect of printing a message. --- service_scan.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/service_scan.cc b/service_scan.cc index 1e8ad6889..9e68e23e3 100644 --- a/service_scan.cc +++ b/service_scan.cc @@ -1700,13 +1700,13 @@ static void adjustPortStateIfNeccessary(ServiceNFO *svc) { char host[128]; oldstate = svc->target->ports.getPortState(svc->portno, svc->proto); - svc->target->ports.setPortState(svc->portno, svc->proto, PORT_OPEN); - if (svc->proto == IPPROTO_TCP) - svc->target->ports.setStateReason(svc->portno, svc->proto, ER_TCPRESPONSE, 0, 0); - if (svc->proto == IPPROTO_UDP) - svc->target->ports.setStateReason(svc->portno, svc->proto, ER_UDPRESPONSE, 0, 0); - if (oldstate != PORT_OPEN) { + svc->target->ports.setPortState(svc->portno, svc->proto, PORT_OPEN); + if (svc->proto == IPPROTO_TCP) + svc->target->ports.setStateReason(svc->portno, svc->proto, ER_TCPRESPONSE, 0, 0); + if (svc->proto == IPPROTO_UDP) + svc->target->ports.setStateReason(svc->portno, svc->proto, ER_UDPRESPONSE, 0, 0); + if (o.verbose || o.debugging > 1) { svc->target->NameIP(host, sizeof(host));