// Use this for initialization void Start() { if (subnetsExterior) { subnetsExteriorObject.SetActive(true); subnetsInteriorObject.SetActive(false); } else { subnetsExteriorObject.SetActive(false); subnetsInteriorObject.SetActive(true); } dbConnClass = dbConnectionObject.GetComponent <TestSQLiteConn>(); for (int i = 0; i < 3; i++) { minSubnetIpNum[i] = TestSQLiteConn.getIpNumFromString("172." + (i + 1) + "0.0.0"); maxSubnetIpNum[i] = TestSQLiteConn.getIpNumFromString("172." + (i + 1) + "0.255.255"); } for (int i = 0; i < 4; i++) { nodeDetailsLists[i] = new List <ipTimelineDetails>(); } setupNodeMap(); updateList(); }
public void activateSelectedExteriorNode(GameObject gObj) { TextMesh tMesh = gObj.GetComponent <TextMesh>(); if (tMesh == null) { return; } string ipAddress = tMesh.text; long ipNum = TestSQLiteConn.getIpNumFromString(ipAddress); string tStr; if (currActiveExteriorNodes.TryGetValue(ipNum, out tStr)) { currActiveExteriorNodes.Remove(ipNum); } else { currActiveExteriorNodes.Add(ipNum, ipAddress); } updateList(); if (displayType == actionAreaDisplayType.SELECTED_TRAFFIC) { updateActionAreaForSelectedTraffic(); } }
public void removeActiveNode(NodeStatus ns) { NodeStatus tns; if (currentActiveNodes.TryGetValue(ns.currIpInfo.ipAddress, out tns)) { currentActiveNodes.Remove(ns.currIpInfo.ipAddress); if (displayType == actionAreaDisplayType.SELECTED_TRAFFIC) { removeExteriorNodeReferences(TestSQLiteConn.getIpNumFromString(ns.currIpInfo.ipAddress)); } } updateList(); if (displayType == actionAreaDisplayType.SELECTED_TRAFFIC) { updateActionAreaForSelectedTraffic(); } else if (displayType == actionAreaDisplayType.ALL_TRAFFIC) { if (activeNodeIpAddress.Equals(ns.currIpInfo.ipAddress)) { activeNodeIpAddress = ""; updateActiveNodeForAllTraffic(); } } }
public void addActiveNode(NodeStatus ns) { NodeStatus tns; ns.selectNode(); if (!currentActiveNodes.TryGetValue(ns.currIpInfo.ipAddress, out tns)) { currentActiveNodes.Add(ns.currIpInfo.ipAddress, ns); } if (displayType == actionAreaDisplayType.SELECTED_TRAFFIC) { long ipNum = TestSQLiteConn.getIpNumFromString(ns.currIpInfo.ipAddress); List <long> extNodes = dbConnClass.getExteriorNFIpsForNode(ns.currIpInfo.ipAddress); addExteriorNodeReferences(ipNum, extNodes); updateList(); updateActionAreaForSelectedTraffic(); } else { updateList(); } }
void updateNodeInfo(NodeStatus nodeStatus) { TextMesh tm = nodeStatusText.GetComponent <TextMesh>(); string txt = "" + nodeStatus.currIpInfo.ipAddress; switch (nodeStatus.currIpInfo.type) { case ipType.SERVER: txt += " (Server)"; break; case ipType.WORKSTATION: txt += " (WS)"; break; } int numHits, min; long ipNum = TestSQLiteConn.getIpNumFromString(nodeStatus.currIpInfo.ipAddress); sqlConnClass.getNFTrafficCountForNode(ipNum, out numHits, out min); txt += "\nTime Increment: " + min + (min > 1 ? " minutes" : " minute"); txt += "\nNetflow Hits: " + numHits; int status; sqlConnClass.getMostRecentBigBrotherStatusForNode(ipNum, out status); txt += "\nBigBrother Status: "; switch (status) { case 1: txt += "Good"; break; case 2: txt += "Warning"; break; case 3: txt += "Problem"; break; default: txt += "[no report]"; break; } tm.text = txt; }
// Use this for initialization void Start() { vrSystem = OpenVR.System; otherControllerScript = otherController.GetComponent <ViveController>(); actionAreaManager = actionAreaObject.GetComponent <ActionAreaManager>(); sliderMask = 1 << LayerMask.NameToLayer("slider"); nodesMask = 1 << LayerMask.NameToLayer("nodes"); moveScaleMask = 1 << LayerMask.NameToLayer("moveScale"); playAreaMask = 1 << LayerMask.NameToLayer("playArea"); lineRend = projLineObj.GetComponent <LineRenderer>(); linePts[0] = Vector3.zero; sqlConnClass = sqlConnObject.GetComponent <TestSQLiteConn>(); currSliderScript = timelineObject.GetComponent <TimelineScript>(); accordianManager = accordianObj.GetComponent <AccordianManager>(); }
public void updateActiveNodeForAllTraffic() { //List<GameObject> acticeNodeObjects = new List<GameObject>(); foreach (GameObject gObj in acticeNodeObjects) { GameObject.Destroy(gObj); } acticeNodeObjects.Clear(); for (int i = 0; i < 4; i++) { nodeDetailsLists[i].Clear(); } NodeStatus ns; long currIpNum = 0; long tgtIpNum; int tgtIdx; int numTotalPoints = 0; if (currentActiveNodes.TryGetValue(activeNodeIpAddress, out ns)) { List <ipTimelineDetails> detTraffList = dbConnClass.getDetailedNFTrafficForNode(ns.currIpInfo.ipAddress); numTotalPoints = detTraffList.Count; currIpNum = TestSQLiteConn.getIpNumFromString(ns.currIpInfo.ipAddress); foreach (ipTimelineDetails details in detTraffList) { if (details.srcIpNum == currIpNum) { tgtIpNum = details.dstIpNum; } else { tgtIpNum = details.srcIpNum; } tgtIdx = 3; for (int i = 0; i < 3; i++) { if (tgtIpNum >= minSubnetIpNum[i] && tgtIpNum <= maxSubnetIpNum[i]) { tgtIdx = i; Debug.Log(details.srcIp + " connected with " + details.dstIp); break; } } nodeDetailsLists[tgtIdx].Add(details); } } double minTime = float.MaxValue; double maxTime = float.MinValue; ipTimelineDetails tmpDetails; bool isSrc; Dictionary <long, double> maxTimePerIp = new Dictionary <long, double>(); double tTime; for (int i = 0; i < 4; i++) { Dictionary <long, ipTimelineDetails> uniqueNodes = new Dictionary <long, ipTimelineDetails>(); foreach (ipTimelineDetails details in nodeDetailsLists[i]) { if (details.time < minTime) { minTime = details.time; } if (details.time > maxTime) { maxTime = details.time; } if (details.srcIpNum == currIpNum) { tgtIpNum = details.dstIpNum; isSrc = true; } else { tgtIpNum = details.srcIpNum; isSrc = false; } if (!uniqueNodes.TryGetValue(tgtIpNum, out tmpDetails)) { uniqueNodes.Add(tgtIpNum, details); uniqueNodes.TryGetValue(tgtIpNum, out tmpDetails); tmpDetails.isSrc = isSrc; } if (maxTimePerIp.TryGetValue(details.srcIpNum, out tTime)) { if (details.time > tTime) { maxTimePerIp[details.srcIpNum] = details.time; } } else { maxTimePerIp.Add(details.srcIpNum, details.time); } if (maxTimePerIp.TryGetValue(details.dstIpNum, out tTime)) { if (details.time > tTime) { maxTimePerIp[details.dstIpNum] = details.time; } } else { maxTimePerIp.Add(details.dstIpNum, details.time); } } } double timeDiff = maxTime - minTime; float minHeight = 0.1f; float maxHeight = 1.0f; float heightDiff = maxHeight - minHeight; double heighTimeRatio = heightDiff / timeDiff; Vector3 pos; Vector3[] tmpPts = new Vector3[2]; Vector3 offset = Vector3.zero; timePosition[] tpArray = new timePosition[numTotalPoints]; int tpIdx = 0; for (int i = 0; i < 4; i++) { foreach (ipTimelineDetails det in nodeDetailsLists[i]) { tgtIpNum = det.isSrc ? det.srcIpNum : det.dstIpNum; offset.y = (float)((det.time - minTime) * heighTimeRatio + minHeight); if (!subnetPointMaps.TryGetValue(tgtIpNum, out pos)) { if (numOuterPointsUnassigned < 1) { Debug.LogError("Reached maximum number of internet node points in active area"); continue; } int tmpIdx = (int)(UnityEngine.Random.value * (numOuterPointsUnassigned - 1)); pos = outerPlotPoints[tmpIdx]; subnetPointMaps.Add(tgtIpNum, outerPlotPoints[tmpIdx]); outerPlotPoints[tmpIdx] = outerPlotPoints[numOuterPointsUnassigned - 1]; numOuterPointsUnassigned--; } tpArray[tpIdx] = new timePosition(det.time, gameObject.transform.TransformPoint(pos + offset)); tpArray[tpIdx].srcPort = det.firstSeenSrcPort; tpArray[tpIdx].dstPort = det.firstSeenDstPort; tpIdx++; GameObject ptObj = (GameObject)Instantiate(ptPrefab); ptObj.transform.SetParent(gameObject.transform); ptObj.transform.localPosition = pos + offset; acticeNodeObjects.Add(ptObj); } } foreach (KeyValuePair <long, double> kv in maxTimePerIp) { offset.y = (float)((kv.Value - minTime) * heighTimeRatio + minHeight); if (!subnetPointMaps.TryGetValue(kv.Key, out pos)) { Debug.LogError("Cannot find the value for " + kv.Key); continue; } GameObject lineObj = (GameObject)Instantiate(linePrefab); lineObj.transform.SetParent(gameObject.transform); tmpPts[0] = gameObject.transform.TransformPoint(pos); tmpPts[1] = gameObject.transform.TransformPoint(pos + offset); LineRenderer lineRend = lineObj.GetComponent <LineRenderer>(); lineRend.useWorldSpace = false; lineRend.SetPositions(tmpPts); lineRend.startWidth = 0.1f; acticeNodeObjects.Add(lineObj); } if (drawTimeConnections) { Array.Sort <timePosition>(tpArray); Vector3[] tmpLinePts = new Vector3[tpArray.Length]; for (int i = 0; i < tpArray.Length; i++) { tmpLinePts[i] = tpArray[i].srcPosition; } GameObject lineObj = (GameObject)Instantiate(linePrefab); lineObj.transform.SetParent(gameObject.transform); LineRenderer lineRend = lineObj.GetComponent <LineRenderer>(); lineRend.useWorldSpace = false; lineRend.positionCount = tmpLinePts.Length; lineRend.SetPositions(tmpLinePts); lineRend.startColor = Color.white; lineRend.endColor = Color.black; acticeNodeObjects.Add(lineObj); } }
public void updateList() { foreach (GameObject go in listLabelList) { GameObject.Destroy(go); } listLabelList.Clear(); Vector3 offset = new Vector3(0.0f, 0.0f, -0.01f); Vector3 yOffsetInc = listObject.transform.up * -0.05f; int numNodes = currentActiveNodes.Count; int numExtNodes = exteriorNodeRefs.Count; int maxPage = (numNodes + maxNodesPerPage - 1) / maxNodesPerPage; if (currNodePage < 1) { currNodePage = 1; } else if (currNodePage > maxPage) { currNodePage = maxPage; } // update the page label and arrows TextMesh tMesh = pageText.GetComponent <TextMesh>(); if (numNodes < 1) { tMesh.text = "empty"; } else { tMesh.text = "Page " + currNodePage + " of " + maxPage; } MeshRenderer prevMeshRend = prevPageQuad.GetComponent <MeshRenderer>(); MeshRenderer nextMeshRend = nextPageQuad.GetComponent <MeshRenderer>(); if (currNodePage == 1) { prevMeshRend.material.color = Color.gray; } else { prevMeshRend.material.color = Color.white; } if (currNodePage == maxPage) { nextMeshRend.material.color = Color.gray; } else { nextMeshRend.material.color = Color.white; } int firstIdx = (currNodePage - 1) * maxNodesPerPage + 1; int lastIdx = firstIdx + maxNodesPerPage; int currIdx = 0; foreach (KeyValuePair <string, NodeStatus> entry in currentActiveNodes) { currIdx++; if (currIdx < firstIdx) { continue; } else if (currIdx >= lastIdx) { break; } GameObject txtObj = (GameObject)Instantiate(labelTxtPrefab); ListLabelManager man = txtObj.GetComponent <ListLabelManager>(); man.nodeStatus = entry.Value; TextMesh mesh = man.labelText.GetComponent <TextMesh>(); mesh.text = entry.Key; if (activeNodeIpAddress.Equals(entry.Key)) { mesh.color = Color.yellow; } txtObj.transform.SetParent(listObject.transform); listLabelList.Add(txtObj); txtObj.transform.position = listObject.transform.position + offset; txtObj.transform.rotation = listObject.transform.rotation; offset += yOffsetInc; } offset = new Vector3(0.0f, 0.0f, -0.01f); maxPage = (numExtNodes + maxNodesPerPage - 1) / maxNodesPerPage; if (currExtNodePage < 1) { currExtNodePage = 1; } else if (currExtNodePage > maxPage) { currExtNodePage = maxPage; } // update the external page label and arrows tMesh = extPageText.GetComponent <TextMesh>(); if (numNodes < 1) { tMesh.text = "empty"; } else { tMesh.text = "Page " + currExtNodePage + " of " + maxPage; } prevMeshRend = prevPageExtQuad.GetComponent <MeshRenderer>(); nextMeshRend = nextPageExtQuad.GetComponent <MeshRenderer>(); if (currExtNodePage == 1) { prevMeshRend.material.color = Color.gray; } else { prevMeshRend.material.color = Color.white; } if (currExtNodePage == maxPage) { nextMeshRend.material.color = Color.gray; } else { nextMeshRend.material.color = Color.white; } firstIdx = (currExtNodePage - 1) * maxNodesPerPage + 1; lastIdx = firstIdx + maxNodesPerPage; currIdx = 0; foreach (long key in exteriorNodeRefs.Keys) { currIdx++; if (currIdx < firstIdx) { continue; } else if (currIdx >= lastIdx) { break; } GameObject txtObj = (GameObject)Instantiate(labelTxtExtNodePrefab); ListLabelManager man = txtObj.GetComponent <ListLabelManager>(); man.nodeStatus = null; TextMesh mesh = man.labelText.GetComponent <TextMesh>(); mesh.text = TestSQLiteConn.getIpStringFromLong(key); if (currActiveExteriorNodes.ContainsKey(key)) { mesh.color = Color.yellow; } txtObj.transform.SetParent(extListObject.transform); listLabelList.Add(txtObj); txtObj.transform.position = extListObject.transform.position + offset; txtObj.transform.rotation = extListObject.transform.rotation; offset += yOffsetInc; } }