Exemple #1
0
        public IDictionary <string, string> GetIPAddresses()
        {
            var netInterfaceInfos = new Dictionary <string, NetInterfaceInfo>();

            IntPtr ifap;

            if (getifaddrs(out ifap) != 0)
            {
                throw new SystemException("getifaddrs() failed");
            }

            try
            {
                IntPtr next = ifap;
                while (next != IntPtr.Zero)
                {
                    ifaddrs addr = (ifaddrs)Marshal.PtrToStructure(next, typeof(ifaddrs));

                    if (addr.ifa_addr != IntPtr.Zero && (((IFF)addr.ifa_flags & IFF.UP) != 0) && ((((IFF)addr.ifa_flags) & IFF.LOOPBACK) == 0))
                    {
                        byte sa_family = ((sockaddr)Marshal.PtrToStructure(addr.ifa_addr, typeof(sockaddr))).sa_family;

                        NetInterfaceInfo info;

                        if (!(netInterfaceInfos.TryGetValue(addr.ifa_name, out info)))
                        {
                            info = new NetInterfaceInfo();
                            netInterfaceInfos.Add(addr.ifa_name, info);
                        }

                        if (sa_family == AF_INET || sa_family == AF_INET6)
                        {
                            info.Netmask = new IPAddress(((sockaddr_in)Marshal.PtrToStructure(addr.ifa_netmask, typeof(sockaddr_in))).sin_addr);
                            info.Address = new IPAddress(((sockaddr_in)Marshal.PtrToStructure(addr.ifa_addr, typeof(sockaddr_in))).sin_addr);
                        }
                        else if (sa_family == AF_LINK)
                        {
                            sockaddr_dl sockaddrdl = new sockaddr_dl();
                            sockaddrdl.Read(addr.ifa_addr);

                            info.MacAddress = new byte [(int)sockaddrdl.sdl_alen];
                            Array.Copy(sockaddrdl.sdl_data, sockaddrdl.sdl_nlen, info.MacAddress, 0, Math.Min(info.MacAddress.Length, sockaddrdl.sdl_data.Length - sockaddrdl.sdl_nlen));
                            info.Index = sockaddrdl.sdl_index;
                            info.Type  = sockaddrdl.sdl_type;
                        }
                    }
                    next = addr.ifa_next;
                }
            }
            finally
            {
                freeifaddrs(ifap);
            }

            return(netInterfaceInfos.ToDictionary(x => x.Key, x => x.Value.Address.ToString()));
        }
        public ComputerBasicInfoModule()
        {
            Get("/processinfo", async(r, w) =>
            {
                //this.RequiresAuthentication();
                var result = new List <ProcessInfoEx>();
                await Task.Run(() =>
                {
                    var info = Core.MaintainModel.GetAllTcpConnections();

                    foreach (var el in info)
                    {
                        result.Add(new ProcessInfoEx {
                            LocalAdress = el.LocalAddress.ToString(), LocalPort = el.LocalPort, RemoteAdress = el.RemoteAddress.ToString(), RemotePort = el.RemotePort, PID = el.PID, State = Core.MaintainModel.GetTCPState(el.State)
                        });
                    }
                });
                return(JsonConvert.SerializeObject(result));
            });

            Post("/getserverdelay", async(r, w) =>
            {
                var result = new Dictionary <string, ServerDelayInfo>();
                await Task.Run(() =>
                {
                    var request = this.Request.Form;
                    // 如果是非form传参,就取query值
                    if (request.Count == 0)
                    {
                        request = this.Request.Query;
                    }
                    var serverlist = request.serverlist.HasValue ? request.serverlist.Value : "";
                    var pingtimes  = request.pingtimes.HasValue ? request.pingtimes.Value : "10";
                    result         = Core.MaintainModel.GetDelayFromServers((serverlist as string).Split(',').ToList(), int.TryParse(pingtimes, out int pingtime) ? pingtime : 10);
                });
                return(JsonConvert.SerializeObject(result));
            });
            Get("/osinfo", async(r, w) =>
            {
                ComputerInfo info = new ComputerInfo {
                };
                await Task.Run(() =>
                {
                    info = (new Computer()).Info;
                });
                return(JsonConvert.SerializeObject(info));
            });
            Get("/diskinfo", async(r, w) =>
            {
                DriveInfo[] info = DriveInfo.GetDrives();
                Dictionary <string, DiskInfo> result = new Dictionary <string, DiskInfo>();
                await Task.Run(() =>
                {
                    foreach (var item in info)
                    {
                        result.Add(item.Name, new DiskInfo {
                            TotalSize = item.TotalSize / 1024 / 1024, TotalFreeSpace = item.TotalFreeSpace / 1024 / 1024, AvaliableFreeSpace = item.AvailableFreeSpace / 1024 / 1024, DriveFormat = item.DriveFormat, DriveType = Core.MaintainModel.GetDriveType(item.DriveType), IsReady = item.IsReady, VolumeLabel = item.IsReady ? item.VolumeLabel : "UNKNOWN", SizeUnit = "MB"
                        });
                    }
                });
                return(JsonConvert.SerializeObject(result));
            });

            Get("/listservice", async(r, w) =>
            {
                var info = ServiceController.GetServices();
                List <ServiceInfo> result = new List <ServiceInfo>();
                await Task.Run(() =>
                {
                    foreach (var item in info)
                    {
                        result.Add(new ServiceInfo {
                            ServiceDisplayName = item.DisplayName, ServiceName = item.ServiceName, ServiceStatus = item.Status.ToString()
                        });
                    }
                }
                               );
                return(JsonConvert.SerializeObject(result));
            });
            Get("/netinterfaces", async(r, w) =>
            {
                List <NetInterfaceInfo> result = new List <NetInterfaceInfo>();

                await Task.Run(() => {
                    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
                    {
                        var info                 = new NetInterfaceInfo {
                        };
                        info.InterfaceName       = nic.Name;
                        info.PhysicalAddress     = nic.GetPhysicalAddress().ToString();
                        info.InterfaceStatistics = nic.GetIPv4Statistics();
                        info.Speed               = nic.Speed;
                        result.Add(info);
                    }
                });

                return(JsonConvert.SerializeObject(result));
            });
        }