如何使用c#获取远程服务器的IP地址

时间:2017-09-14 12:31:59

标签: c# performance server visual-studio-2017 influxdb

刚开始查看c#编程我正在尝试编写一个程序,最终将从远程主机获取一些服务器指标%CPU利用率,%内存利用率等,然后使用HTTP上的API调用将它们发布到InfluxDB。所以目标是:

收集CPU%Util zh 1.整理服务器的信息,即Unixtimestamp | hostip | hostname | value
2.每隔一秒收集一次该指标 3.通过URL

将此帖子发布到Influxdb

我已经开始了它,并且只能获得localhost的主机名。

这是我在c#中的第一个项目,任何帮助都会很棒。到目前为止见下面的代码。我正在使用Visual Studio 2017社区fyi。

using System;
using System.Net;
using System.Diagnostics;

namespace PostMetricsApp
{
  class IpProto
  {
     public static void GetMyIpAddress();
     {
        string hostName = Dns.GetHostName(); // Retrive the Name of HOST  
        Console.WriteLine(hostName);
        // Get IPAddress  
        string hostipadd = Dns.GetHostEntry(hostName).AddressList[0].ToString();
        Console.WriteLine("My IP Address is :" + hostipadd);
        Console.ReadKey();
     }
  }    
  class MemMetric
  {
     static void Main(string[] args)
     {     
        PerformanceCounter ramCounter = new PerformanceCounter();
        ramCounter.CategoryName = "Memory";
        ramCounter.CounterName = "Available MBytes";
        while (true)
        {
            var hostip = IpProto.host;
            string hostname = Environment.MachineName;
            Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
            int totalhits = 0;
            float ramPercent = ramCounter.NextValue();

            if (ramPercent >= 5)
            {
                var unused = ramCounter.NextValue(); // first call will always return 0
                System.Threading.Thread.Sleep(1000); // wait a second, then try again
                //Console.WriteLine("Cpu usage: " + cpuCounter.NextValue() + "%");
                Console.WriteLine(unixTimestamp + " "+ hostip + " " + hostname + " " + ramCounter.NextValue() + "MB");
                totalhits += 1;   
            }
            else
            {
                totalhits = 0;
            }
        }
     }
  }
}

1 个答案:

答案 0 :(得分:0)

目前还不是很清楚你想要在这里实现什么,我想你想确定运行你的应用程序的本地主机的Internet IP。

由于几个原因,我将不在这里讨论,确定主机与互联网通信的IP可能很棘手。这样做的一些方法是:

外部服务

连接到外部服务器,该服务器会告诉您启动的IP地址(您的互联网/外部IP地址)。有效示例似乎是thisthis

这可能是最简单/最可靠的方法之一,只要远程主机启动并为您提供IP即可。它几乎保证是正确的。显然,这意味着您的应用程序依赖于此外部服务。 注意:这些主机可能不喜欢经常查询,因此最好缓存IP并且只在30分钟左右刷新一次。

替代

alternatives作为使用Windows tracert.exe控制台应用程序的跟踪数据包。这仍然需要外部主机作为跟踪的目标,但许多主机可以充当这样的目标。缺点是,与上述方法相比,这种方法相当复杂,容易出问题。