Skip to content

Commit 5592de5

Browse files
authored
Merge pull request #41 from RUB-NDS/GUIRework
Gui rework
2 parents 70b3ddb + be89ece commit 5592de5

File tree

9 files changed

+266
-9
lines changed

9 files changed

+266
-9
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
<version>4.12</version>
2323
<scope>test</scope>
2424
</dependency>
25+
<dependency>
26+
<groupId>me.tongfei</groupId>
27+
<artifactId>progressbar</artifactId>
28+
<version>0.7.1</version>
29+
</dependency>
2530
</dependencies>
2631
<profiles>
2732
<profile>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* TLS-Attacker - A Modular Penetration Testing Framework for TLS
3+
*
4+
* Copyright 2014-2017 Ruhr University Bochum / Hackmanit GmbH
5+
*
6+
* Licensed under Apache License 2.0
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*/
9+
package de.rub.nds.tlsscanner;
10+
11+
import org.apache.logging.log4j.LogManager;
12+
import org.apache.logging.log4j.Logger;
13+
14+
/**
15+
*
16+
* @author robert
17+
*/
18+
public class ConsoleLogger {
19+
public static final Logger CONSOLE = LogManager.getLogger("ConsoleLogger");
20+
21+
private ConsoleLogger() {
22+
}
23+
}

src/main/java/de/rub/nds/tlsscanner/Main.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import de.rub.nds.tlsattacker.core.config.delegate.GeneralDelegate;
1414
import de.rub.nds.tlsattacker.core.exceptions.ConfigurationException;
1515
import de.rub.nds.tlsscanner.config.ScannerConfig;
16+
import de.rub.nds.tlsscanner.constants.AnsiEscapeSequence;
1617
import de.rub.nds.tlsscanner.report.SiteReport;
1718
import java.io.IOException;
1819
import org.apache.logging.log4j.LogManager;
@@ -41,8 +42,12 @@ public static void main(String[] args) throws IOException {
4142
long time = System.currentTimeMillis();
4243
LOGGER.info("Performing Scan, this may take some time...");
4344
SiteReport report = scanner.scan();
44-
LOGGER.info("Scanned in:" + ((System.currentTimeMillis() - time) / 1000) + "s");
45-
LOGGER.info(report.getFullReport(config.getReportDetail()));
45+
LOGGER.info("Scanned in:" + ((System.currentTimeMillis()-time)/1000) + "s\n");
46+
if(!config.getGeneralDelegate().isDebug()){
47+
// ANSI escape sequences to erase the progressbar
48+
ConsoleLogger.CONSOLE.info(AnsiEscapeSequence.ANSI_ONE_LINE_UP + AnsiEscapeSequence.ANSI_ERASE_LINE);
49+
}
50+
ConsoleLogger.CONSOLE.info("Scanned in: " + ((System.currentTimeMillis()-time)/1000) + "s\n" + report.getFullReport(config.getReportDetail()));
4651
} catch (ConfigurationException E) {
4752
LOGGER.info("Encountered a ConfigurationException aborting.");
4853
LOGGER.warn(E);

src/main/java/de/rub/nds/tlsscanner/MultiThreadedScanJobExecutor.java

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.concurrent.ExecutorService;
2323
import java.util.concurrent.Executors;
2424
import java.util.concurrent.Future;
25+
import me.tongfei.progressbar.ProgressBar;
2526
import org.apache.logging.log4j.LogManager;
2627
import org.apache.logging.log4j.Logger;
2728

@@ -44,8 +45,32 @@ public MultiThreadedScanJobExecutor(ExecutorService executor) {
4445
}
4546

4647
public SiteReport execute(ScannerConfig config, ScanJob scanJob) {
47-
List<ProbeType> probeTypes = new LinkedList<>();
4848

49+
if (config.getGeneralDelegate().isDebug() || config.isNoProgressbar()) {
50+
return scan(config, scanJob, null);
51+
} else {
52+
int numberOfProbes = 0;
53+
for (TlsProbe probe : scanJob.getPhaseOneTestList()) {
54+
if (probe.getDanger() <= config.getDangerLevel()) {
55+
numberOfProbes++;
56+
}
57+
}
58+
for (TlsProbe probe : scanJob.getPhaseTwoTestList()) {
59+
if (probe.getDanger() <= config.getDangerLevel()) {
60+
numberOfProbes++;
61+
}
62+
}
63+
try (ProgressBar pb = new ProgressBar("", numberOfProbes)) {
64+
return scan(config, scanJob, pb);
65+
}
66+
}
67+
}
68+
69+
private SiteReport scan(ScannerConfig config, ScanJob scanJob, ProgressBar pb) {
70+
List<ProbeType> probeTypes = new LinkedList<>();
71+
if (pb != null) {
72+
pb.setExtraMessage("Executing Probes");
73+
}
4974
List<Future<ProbeResult>> futureResults = new LinkedList<>();
5075
for (TlsProbe probe : scanJob.getPhaseOneTestList()) {
5176
if (probe.getDanger() <= config.getDangerLevel()) {
@@ -54,6 +79,9 @@ public SiteReport execute(ScannerConfig config, ScanJob scanJob) {
5479
}
5580
}
5681
List<ProbeResult> resultList = new LinkedList<>();
82+
83+
checkProbesDone(futureResults, pb);
84+
5785
for (Future<ProbeResult> probeResult : futureResults) {
5886
try {
5987
resultList.add(probeResult.get());
@@ -88,10 +116,16 @@ public SiteReport execute(ScannerConfig config, ScanJob scanJob) {
88116
ProbeResult result = probe.getNotExecutedResult();
89117
if (result != null) {
90118
resultList.add(result);
119+
if (pb != null) {
120+
pb.step();
121+
}
91122
}
92123
}
93124
}
94125
}
126+
127+
checkProbesDone(futureResults, pb);
128+
95129
for (Future<ProbeResult> probeResult : futureResults) {
96130
try {
97131
resultList.add(probeResult.get());
@@ -109,9 +143,34 @@ public SiteReport execute(ScannerConfig config, ScanJob scanJob) {
109143
for (AfterProbe afterProbe : scanJob.getAfterProbes()) {
110144
afterProbe.analyze(report);
111145
}
146+
executor.shutdown();
147+
LOGGER.info("Finished scan for: " + hostname);
112148
return report;
113149
}
114150

151+
private void checkProbesDone(List<Future<ProbeResult>> futureResults, ProgressBar pb) {
152+
boolean isNotReady = true;
153+
int done = 0;
154+
int tempDone = 0;
155+
while (isNotReady) {
156+
tempDone = 0;
157+
for (Future<ProbeResult> probeResult : futureResults) {
158+
if (probeResult.isDone()) {
159+
tempDone++;
160+
}
161+
if (done < tempDone) {
162+
if (pb != null) {
163+
pb.step();
164+
}
165+
done = tempDone;
166+
if (done == futureResults.size()) {
167+
isNotReady = false;
168+
}
169+
}
170+
}
171+
}
172+
}
173+
115174
@Override
116175
public void shutdown() {
117176
executor.shutdown();

src/main/java/de/rub/nds/tlsscanner/SingleThreadedScanJobExecutor.java

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.List;
2020
import org.apache.logging.log4j.LogManager;
2121
import org.apache.logging.log4j.Logger;
22+
import me.tongfei.progressbar.*;
2223

2324
/**
2425
*
@@ -30,16 +31,54 @@ public class SingleThreadedScanJobExecutor extends ScanJobExecutor {
3031

3132
public SingleThreadedScanJobExecutor() {
3233
}
34+
35+
private String getPaddedProbeName( String probeName){
36+
StringBuilder sb = new StringBuilder(probeName);
37+
while(sb.length() < 30){
38+
sb.append(" ");
39+
}
40+
return sb.toString();
41+
}
3342

3443
@Override
3544
public SiteReport execute(ScannerConfig config, ScanJob scanJob) {
45+
46+
if(config.getGeneralDelegate().isDebug() || config.isNoProgressbar()){
47+
return scan(config, scanJob, null);
48+
} else {
49+
int numberOfProbes = 0;
50+
for (TlsProbe probe : scanJob.getPhaseOneTestList()) {
51+
if (probe.getDanger() <= config.getDangerLevel()) {
52+
numberOfProbes++;
53+
}
54+
}
55+
for (TlsProbe probe : scanJob.getPhaseTwoTestList()) {
56+
if (probe.getDanger() <= config.getDangerLevel()) {
57+
numberOfProbes++;
58+
}
59+
}
60+
try(ProgressBar pb = new ProgressBar("", numberOfProbes)){
61+
return scan(config, scanJob, pb);
62+
}
63+
}
64+
65+
66+
}
67+
68+
private SiteReport scan(ScannerConfig config, ScanJob scanJob, ProgressBar pb){
3669
List<ProbeType> probeTypes = new LinkedList<>();
37-
3870
List<ProbeResult> resultList = new LinkedList<>();
71+
3972
for (TlsProbe probe : scanJob.getPhaseOneTestList()) {
4073
if (probe.getDanger() <= config.getDangerLevel()) {
4174
try {
75+
if(pb != null){
76+
pb.setExtraMessage("Executing " + getPaddedProbeName(probe.getProbeName()));
77+
}
4278
resultList.add(probe.call());
79+
if(pb != null){
80+
pb.step();
81+
}
4382
} catch (Exception E) {
4483
LOGGER.warn("Could not execute Probe", E);
4584
}
@@ -65,20 +104,28 @@ public SiteReport execute(ScannerConfig config, ScanJob scanJob) {
65104
probe.adjustConfig(report);
66105
}
67106
resultList = new LinkedList<>();
68-
resultList = new LinkedList<>();
69107
for (TlsProbe probe : scanJob.getPhaseTwoTestList()) {
70108
if (probe.getDanger() <= config.getDangerLevel()) {
71109
probeTypes.add(probe.getType());
72110
if (probe.shouldBeExecuted(report)) {
73111
try {
112+
if(pb != null){
113+
pb.setExtraMessage("Executing " + getPaddedProbeName(probe.getProbeName()));
114+
}
74115
resultList.add(probe.call());
116+
if(pb != null){
117+
pb.step();
118+
}
75119
} catch (Exception E) {
76120
LOGGER.warn("Could not execute Probe", E);
77121
}
78122
} else if (!config.isImplementation()) {
79123
ProbeResult result = probe.getNotExecutedResult();
80124
if (result != null) {
81125
resultList.add(result);
126+
if(pb != null){
127+
pb.step();
128+
}
82129
}
83130
}
84131
}
@@ -95,6 +142,7 @@ public SiteReport execute(ScannerConfig config, ScanJob scanJob) {
95142
for (AfterProbe afterProbe : scanJob.getAfterProbes()) {
96143
afterProbe.analyze(report);
97144
}
145+
LOGGER.info("Finished scan for: " + hostname);
98146
return report;
99147
}
100148

src/main/java/de/rub/nds/tlsscanner/config/ScannerConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ public class ScannerConfig extends TLSDelegateConfig {
5252
@Parameter(names = "-aggressiv", required = false, description = "The level of concurrent handshakes (only applies to some resource intensive tests)")
5353
private int aggroLevel = 1;
5454

55+
private boolean noProgressbar = false;
56+
5557
@ParametersDelegate
5658
private StarttlsDelegate starttlsDelegate;
5759

@@ -65,6 +67,14 @@ public ScannerConfig(GeneralDelegate delegate) {
6567
addDelegate(starttlsDelegate);
6668
}
6769

70+
public boolean isNoProgressbar() {
71+
return noProgressbar;
72+
}
73+
74+
public void setNoProgressbar(boolean noProgressbar) {
75+
this.noProgressbar = noProgressbar;
76+
}
77+
6878
public int getAggroLevel() {
6979
return aggroLevel;
7080
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
package de.rub.nds.tlsscanner.constants;
7+
8+
/**
9+
*
10+
* @author Pierre Tilhaus<[email protected]>
11+
*/
12+
public class AnsiEscapeSequence {
13+
14+
public static final String ANSI_ONE_LINE_UP = "\033[1A";
15+
public static final String ANSI_ERASE_LINE = "\033[2K";
16+
}

0 commit comments

Comments
 (0)