package org.infosec.ismp.situation.util;
public class SituationUtils {
/**
* 指标层数据得到r
* @param frequency
* @return
*/
private static float markerBed(int[] frequency){
float x1 = (float) (frequency[0] / 10.0);
float x2 = frequency[1];
float x3 = (float) (frequency[2] * 10.0);
float x4 = (float) (frequency[3] * 100.0);
float x5 = (float) (frequency[4] * 1000.0);
float r = x1 + x2 + x3 + x4 + x5;
return r * 10;
}
/**
* 得到主机/服务器的攻击威胁,病毒疫情,非法连接等指数
* @param r
* @return
*/
public static float exponentialCalculate(int[] frequency) {
float r = markerBed(frequency);
double res = 0;
if (r > 0 && r<=10.0) {
res = 0.000169083465793 * r - 0.005199223195825;
res = res * r + 0.061701759236541;
res = res * r - 0.357328775801422;
res = res * r + 1.059000467470189;
res = res * r + 0.011014031464144;
res = res * (200 / 3.14);
}else if (r>10 && r<=50.0) {
res = 0.000002282031129 * r - 0.00026504819066;
res = res * r + 0.010744006485676;
res = res * r + 1.393145046447054;
res = res * (200 / 3.14);
}else if (r>50) {
res = 100;
}
return (float) res;
}
/**
* 得到主机/服务器的总态势指数
* @param rt(攻击威胁指数)
* @param rv(病毒疫情指数)
* @param rc(非法连接指数)
* @return
*/
public static float hostExponential(float rt, float rv, float rc) {
float res = (float) (2 / 5.0 * rt);
res = (float) (res + 2 / 5.0 * rv);
res = (float) (res + 1 / 5.0 * rc);
return res;
}
public static void main(String[] args) {
// SituationUtils aa = new SituationUtils();
// int[] obj = new int[]{1000000,20,30,40,561};
// float r = aa.markerBed(obj);
// float rt = aa.attackExponential(r);
// System.out.println(rt);
}
}