Beispiel #1
0
        public String GetNetwork(Int32 pid)
        {
            AppendLog("GetNetwork");
            String     value = "";
            List <int> keys  = pid2InfoMap.Keys.ToList();

            foreach (int key in keys)
            {
                ProcessDynamicInfo ns = pid2InfoMap[key];
                value += key + "\tsend:" + ns.ByteSend + ", receive:" + ns.ByteReceive + "\r\n";
            }
            value += "miss packet:" + packetMiss + ", miss byte:" + byteMiss;

            return(value);
        }
Beispiel #2
0
        public ProcessDynamicInfo Clone()
        {
            ProcessDynamicInfo value = new ProcessDynamicInfo();

            value.ByteSend              = this.ByteSend;
            value.ByteReceive           = this.ByteReceive;
            value.OldByteSend           = this.OldByteSend;
            value.OldByteReceive        = this.OldByteReceive;
            value.TotalProcessorTime    = this.TotalProcessorTime;
            value.OldTotalProcessorTime = this.OldTotalProcessorTime;
            value.CpuUsage              = this.CpuUsage;
            value.SendSpeed             = this.SendSpeed;
            value.ReceiveSpeed          = this.ReceiveSpeed;

            return(value);
        }
Beispiel #3
0
        public String GetProcessInfo(String filter)
        {
            AppendLog("GetProcessInfo");
            String[] filters = filter.Split(new Char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            XElement root    = new XElement("processInfo");

            Process[] processes = Process.GetProcesses();
            foreach (Process p in processes)
            {
                if (filters.Length == 0 || filters.Contains(p.ProcessName) && pid2InfoMap.ContainsKey(p.Id))
                {
                    try
                    {
                        ProcessDynamicInfo info    = pid2InfoMap[p.Id].Clone();
                        XElement           infoXml = new XElement("info");
                        infoXml.Add(
                            new XElement("pid", p.Id),
                            new XElement("name", p.ProcessName),
                            new XElement("priority", p.PriorityClass.ToString()),
                            new XElement("cpu", (info.CpuUsage * 100.0).ToString("0.00")),
                            new XElement("mem", (p.WorkingSet64 / 1024).ToString()),
                            new XElement("threadCount", p.Threads.Count),
                            new XElement("send", info.SendSpeed.ToString()),
                            new XElement("receive", info.ReceiveSpeed.ToString())
                            );
                        root.Add(infoXml);
                    }
                    catch (Exception ex)
                    {
                        // 这里会捕获到拒绝访问异常,可能对应的进程正在执行,进程的某些属性拒绝访问。
                        //AppendLog("Error: GetProcessInfo" + ex.Message);
                    }
                }
            }

            return(root.ToString());
        }
Beispiel #4
0
        private void RefreshProcessInfo(Object state)
        {
            AppendLog("RefreshProcessInfo");
            Process[] processes = Process.GetProcesses();
            double    coreCount = TerminalInfo.ProcessorCount * 1.0;

            foreach (Process p in processes)
            {
                if (pid2InfoMap.ContainsKey(p.Id))
                {
                    try
                    {
                        ProcessDynamicInfo info = pid2InfoMap[p.Id];
                        info.OldTotalProcessorTime = info.TotalProcessorTime;

                        // 下面的语句会抛出拒绝访问的异常
                        // 可能是p对应的进程在执行,拒绝访问这个属性。
                        info.TotalProcessorTime = p.TotalProcessorTime;

                        info.CpuUsage       = (info.TotalProcessorTime.TotalSeconds - info.OldTotalProcessorTime.TotalSeconds) / refreshInterval / coreCount;
                        info.ReceiveSpeed   = Convert.ToInt32((info.ByteReceive - info.OldByteReceive) / refreshInterval);
                        info.SendSpeed      = Convert.ToInt32((info.ByteSend - info.OldByteSend) / refreshInterval);
                        info.OldByteReceive = info.ByteReceive;
                        info.OldByteSend    = info.ByteSend;
                    }
                    catch (Exception ex)
                    {
                        //AppendLog("Error: RefreshProcessInfo" + ex.Message);
                    }
                }
                else
                {
                    pid2InfoMap.Add(p.Id, new ProcessDynamicInfo());
                }
            }
        }
Beispiel #5
0
        private void ProcessPacketArrival()
        {
            while (true)
            {
                Packet packet;

                lock (packetQueue)
                {
                    while (packetQueue.Count <= 0)
                    {
                        System.Threading.Monitor.Wait(packetQueue);
                    }
                    packet = packetQueue.Dequeue().PayloadPacket;
                }

                try
                {
                    String src = "";
                    String dst = "";
                    ulong  len = 0;

                    IpPacket ipPacket = packet as IPv4Packet;

                    if (ipPacket == null)
                    {
                        ipPacket = packet as IPv6Packet;
                    }

                    len = (ulong)(ipPacket.TotalLength);
                    src = ipPacket.SourceAddress.ToString();
                    dst = ipPacket.DestinationAddress.ToString();

                    if (src.Equals("127.0.0.1") || src.Equals("0.0.0.0"))
                    {
                        src = TerminalInfo.Ipv4;
                    }
                    else if (src.Equals("[::1]"))
                    {
                        src = TerminalInfo.Ipv6;
                    }

                    if (dst.Equals("127.0.0.1") || dst.Equals("0.0.0.0"))
                    {
                        dst = TerminalInfo.Ipv4;
                    }
                    else if (dst.Equals("[::1]"))
                    {
                        dst = TerminalInfo.Ipv6;
                    }

                    Packet    payload = packet.PayloadPacket;
                    TcpPacket tcp     = payload as TcpPacket;
                    UdpPacket udp     = payload as UdpPacket;

                    if (tcp != null)
                    {
                        src += ":" + tcp.SourcePort;
                        dst += ":" + tcp.DestinationPort;
                    }
                    else if (udp != null)
                    {
                        src += ":" + udp.SourcePort;
                        dst += ":" + udp.DestinationPort;
                    }

                    lock (endPoint2PidMap)
                    {
                        bool find = false;
                        if (endPoint2PidMap.ContainsKey(src))
                        {
                            find = true;
                            Int32 pid = endPoint2PidMap[src];
                            if (pid2InfoMap.ContainsKey(pid))
                            {
                                pid2InfoMap[pid].ByteSend += len;
                            }
                            else
                            {
                                ProcessDynamicInfo ns = new ProcessDynamicInfo();
                                ns.ByteSend = len;
                                pid2InfoMap.Add(pid, ns);
                            }
                            TerminalInfo.ByteSent += len;
                        }

                        if (endPoint2PidMap.ContainsKey(dst))
                        {
                            find = true;
                            Int32 pid = endPoint2PidMap[dst];
                            if (pid2InfoMap.ContainsKey(pid))
                            {
                                pid2InfoMap[pid].ByteReceive += len;
                            }
                            else
                            {
                                ProcessDynamicInfo ns = new ProcessDynamicInfo();
                                ns.ByteReceive = len;
                                pid2InfoMap.Add(pid, ns);
                            }
                            TerminalInfo.ByteReceived += len;
                        }

                        if (!find)
                        {
                            packetMiss++;
                            byteMiss += len;
                        }
                    }
                }
                catch (Exception ex)
                {
                    AppendLog("Error: ProcessPacketArrival" + ex.Message);
                }
            }
        }