|
@@ -17,9 +17,10 @@ public class ConnectionGuard {
|
|
|
/**
|
|
|
* Intervall between 2 connection in wich we assume a port scan
|
|
|
*/
|
|
|
- public final static long ONE_SECOND_IN_NANOSECONDS = 1000000000;
|
|
|
+ public final static long TIMESTAMP_THRESHOLD_MS = 1000;
|
|
|
|
|
|
- private static long lastTimestamp = 0;
|
|
|
+ private static long lastConnectionTimestamp = 0;
|
|
|
+ private static long lastPortscanTimestamp = 0;
|
|
|
private static String lastIP = "";
|
|
|
private static int lastPort = 0;
|
|
|
|
|
@@ -30,14 +31,21 @@ public class ConnectionGuard {
|
|
|
* @return True if a port scan has been detected.
|
|
|
*/
|
|
|
public synchronized static boolean registerConnection(int port, String ip) {
|
|
|
- long timestamp = System.nanoTime();
|
|
|
+ long timestamp = System.currentTimeMillis();
|
|
|
boolean result = detectedPortscan(port, ip, timestamp);
|
|
|
|
|
|
- lastTimestamp = timestamp;
|
|
|
+ lastConnectionTimestamp = timestamp;
|
|
|
+ if (result) {
|
|
|
+ lastPortscanTimestamp = timestamp;
|
|
|
+ }
|
|
|
lastIP = ip;
|
|
|
lastPort = port;
|
|
|
return result;
|
|
|
}
|
|
|
+
|
|
|
+ public synchronized static boolean portscanInProgress() {
|
|
|
+ return (System.currentTimeMillis() - lastPortscanTimestamp) < TIMESTAMP_THRESHOLD_MS;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* Check if the new connection is part of a port scan attack.
|
|
@@ -46,7 +54,7 @@ public class ConnectionGuard {
|
|
|
* @return True if a port scan has been detected.
|
|
|
*/
|
|
|
public synchronized static boolean detectedPortscan(int port, String ip){
|
|
|
- return detectedPortscan(port, ip, System.nanoTime());
|
|
|
+ return detectedPortscan(port, ip, System.currentTimeMillis());
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -57,14 +65,13 @@ public class ConnectionGuard {
|
|
|
* @return True if a port scan has been detected.
|
|
|
*/
|
|
|
private synchronized static boolean detectedPortscan(int port, String ip, long timestamp) {
|
|
|
- Log.i("Alte Werte:", "LastTime: " + lastTimestamp + " ,LastIP: " + lastIP + ", lastPort:" + port);
|
|
|
+ Log.i("Alte Werte:", "LastTime: " + lastConnectionTimestamp + " ,LastIP: " + lastIP + ", lastPort:" + port);
|
|
|
Log.i("Alte Werte:", "Time: " + timestamp + " ,IP: " + ip + ", Port:" + port);
|
|
|
boolean result = false;
|
|
|
- boolean firstConnection = (lastTimestamp == 0);
|
|
|
- boolean belowThreshold = ((timestamp - lastTimestamp) < ONE_SECOND_IN_NANOSECONDS);
|
|
|
+ boolean belowThreshold = ((timestamp - lastConnectionTimestamp) < TIMESTAMP_THRESHOLD_MS);
|
|
|
boolean sameIP = (lastIP.equals(ip));
|
|
|
boolean samePort = (lastPort == port);
|
|
|
- if (!firstConnection && sameIP && belowThreshold && !samePort) {
|
|
|
+ if (sameIP && belowThreshold && !samePort) {
|
|
|
result = true;
|
|
|
}
|
|
|
|