Esempio n. 1
0
    // 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();
    }
Esempio n. 2
0
    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();
        }
    }
Esempio n. 3
0
    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();
            }
        }
    }
Esempio n. 4
0
    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();
        }
    }
Esempio n. 5
0
    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;
    }
Esempio n. 6
0
    // 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>();
    }
Esempio n. 7
0
    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);
        }
    }
Esempio n. 8
0
    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;
        }
    }