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)); }); }