diff --git a/TODO b/TODO index dbf968e2..8aed18a8 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,6 @@ Before 3.0 beta: * host:port for detection -* min port timeout (for adaptation) * sorting by columns * export/import of settings * disabling of buttons/menus during scanning diff --git a/resources/Labels.txt b/resources/Labels.txt index afff1c0e..3a6da5fe 100755 --- a/resources/Labels.txt +++ b/resources/Labels.txt @@ -96,7 +96,7 @@ text.scan.hosts.total=Hosts scanned: text.scan.hosts.alive=Hosts alive: text.scan.hosts.ports=With open ports: text.version.latest=You are running the latest version -text.version.old=The latest version is %LATEST, but you are running %VERSION +text.version.old=The latest stable version is %LATEST, but you are running %VERSION text.openers.edit=Below you can edit or add new openers text.openers.name=Opener name (menu item): text.openers.string=Execution string: @@ -196,6 +196,7 @@ options.fetchers.info=Here you can change options, specific to fetchers options.ports.timing=Timing options.ports.timing.timeout=Default port connect timeout (in ms): options.ports.timing.adaptTimeout=Adapt timeout to ping roundtrip time (if available) +options.ports.timing.minTimeout=Minimal adapted connect timeout (in ms): options.ports.ports=Port selection options.ports.portsDescription=Specify ports to scan here. Ranges are supported.\nExample: 1-3,5,7,10-15,6000-6100\nIf many ports are specified, scanning can take a lot of time. options.display.list=Display in the results list diff --git a/src/net/azib/ipscan/config/GlobalConfig.java b/src/net/azib/ipscan/config/GlobalConfig.java index e51c4240..48ebb21b 100755 --- a/src/net/azib/ipscan/config/GlobalConfig.java +++ b/src/net/azib/ipscan/config/GlobalConfig.java @@ -27,6 +27,7 @@ public final class GlobalConfig { public boolean skipBroadcastAddresses; public int portTimeout; public boolean adaptPortTimeout; + public int minPortTimeout; public String portString; public String notAvailableText; public String notScannedText; @@ -55,6 +56,7 @@ public final class GlobalConfig { skipBroadcastAddresses = preferences.getBoolean("skipBroadcastAddresses", true); portTimeout = preferences.getInt("portTimeout", 3000); adaptPortTimeout = preferences.getBoolean("adaptPortTimeout", true); + minPortTimeout = preferences.getInt("minPortTimeout", 500); portString = preferences.get("portString", ""); notAvailableText = preferences.get("notAvailableText", Labels.getLabel("fetcher.value.notAvailable")); notScannedText = preferences.get("notScannedText", Labels.getLabel("fetcher.value.notScanned")); @@ -78,6 +80,7 @@ public final class GlobalConfig { preferences.putBoolean("skipBroadcastAddresses", skipBroadcastAddresses); preferences.putInt("portTimeout", portTimeout); preferences.putBoolean("adaptPortTimeout", adaptPortTimeout); + preferences.putInt("minPortTimeout", minPortTimeout); preferences.put("portString", portString); preferences.put("notAvailableText", notAvailableText); preferences.put("notScannedText", notScannedText); diff --git a/src/net/azib/ipscan/fetchers/PortsFetcher.java b/src/net/azib/ipscan/fetchers/PortsFetcher.java index e83de6a8..6dbd343b 100755 --- a/src/net/azib/ipscan/fetchers/PortsFetcher.java +++ b/src/net/azib/ipscan/fetchers/PortsFetcher.java @@ -67,7 +67,7 @@ public class PortsFetcher implements Fetcher { // now try to adapt timeout if it is enabled and pinging results are availbale PingResult pingResult = (PingResult) subject.getParameter(PingFetcher.PARAMETER_PINGER); if (config.adaptPortTimeout && pingResult.getReplyCount() > 2) { - adaptedTimeout = Math.min(Math.max(pingResult.getLongestTime() * 4, 50), config.portTimeout); + adaptedTimeout = Math.min(Math.max(pingResult.getLongestTime() * 3, config.minPortTimeout), config.portTimeout); } Socket socket = null; diff --git a/src/net/azib/ipscan/gui/OptionsDialog.java b/src/net/azib/ipscan/gui/OptionsDialog.java index d82a7cc4..c9a82742 100755 --- a/src/net/azib/ipscan/gui/OptionsDialog.java +++ b/src/net/azib/ipscan/gui/OptionsDialog.java @@ -63,6 +63,7 @@ public class OptionsDialog extends AbstractModalDialog { private TabItem portsTabItem; private Text portTimeoutText; private Button adaptTimeoutCheckbox; + private Text minPortTimeoutText; private Text portsText; private Text notAvailableText; private Text notScannedText; @@ -316,9 +317,7 @@ public class OptionsDialog extends AbstractModalDialog { GridData gridData = new GridData(); gridData.widthHint = 50; - Label label; - - label = new Label(timingGroup, SWT.NONE); + Label label = new Label(timingGroup, SWT.NONE); label.setText(Labels.getLabel("options.ports.timing.timeout")); portTimeoutText = new Text(timingGroup, SWT.BORDER); portTimeoutText.setLayoutData(gridData); @@ -328,7 +327,17 @@ public class OptionsDialog extends AbstractModalDialog { adaptTimeoutCheckbox = new Button(timingGroup, SWT.CHECK); adaptTimeoutCheckbox.setText(Labels.getLabel("options.ports.timing.adaptTimeout")); adaptTimeoutCheckbox.setLayoutData(gridData1); - + adaptTimeoutCheckbox.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event event) { + minPortTimeoutText.setEnabled(adaptTimeoutCheckbox.getSelection()); + } + }); + + label = new Label(timingGroup, SWT.NONE); + label.setText(Labels.getLabel("options.ports.timing.minTimeout")); + minPortTimeoutText = new Text(timingGroup, SWT.BORDER); + minPortTimeoutText.setLayoutData(gridData); + RowLayout portsLayout = new RowLayout(SWT.VERTICAL); portsLayout.fill = true; portsLayout.marginHeight = 2; @@ -385,6 +394,8 @@ public class OptionsDialog extends AbstractModalDialog { skipBroadcastsCheckbox.setSelection(globalConfig.skipBroadcastAddresses); portTimeoutText.setText(Integer.toString(globalConfig.portTimeout)); adaptTimeoutCheckbox.setSelection(globalConfig.adaptPortTimeout); + minPortTimeoutText.setText(Integer.toString(globalConfig.minPortTimeout)); + minPortTimeoutText.setEnabled(globalConfig.adaptPortTimeout); portsText.setText(globalConfig.portString); notAvailableText.setText(globalConfig.notAvailableText); notScannedText.setText(globalConfig.notScannedText); @@ -419,6 +430,7 @@ public class OptionsDialog extends AbstractModalDialog { globalConfig.skipBroadcastAddresses = skipBroadcastsCheckbox.getSelection(); globalConfig.portTimeout = parseIntValue(portTimeoutText); globalConfig.adaptPortTimeout = adaptTimeoutCheckbox.getSelection(); + globalConfig.minPortTimeout = parseIntValue(minPortTimeoutText); globalConfig.portString = portsText.getText(); globalConfig.notAvailableText = notAvailableText.getText(); globalConfig.notScannedText = notScannedText.getText();