簡體   English   中英

如何使用C#獲取遠程服務器的IP地址

[英]How to get ip addresses of Remote servers using c#

剛開始研究c#編程時,我正在嘗試編寫一個程序,該程序最終將從遠程主機獲取一些服務器指標%CPU利用率,%Memory利用率等,然后使用基於HTTP的API調用將它們發布到InfluxDB。 因此目標是:

收集CPU%利用率
1.整理服務器信息,即Unixtimestamp | hostip | hostname | value
2.保持每秒收集一次該指標
3.通過URL將其發布到Influxdb

我已經開始了,只設法獲得了localhost的主機名。

這是我在C#中的第一個項目,任何幫助都會很大。 到目前為止,請參見下面的代碼。 我正在使用Visual Studio 2017 Community 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;
            }
        }
     }
  }
}

目前尚不清楚您要實現的目標,我想您想確定運行應用程序的本地主機的Internet IP。

由於多種原因,在這里我將不討論,因此很難確定主機從哪個IP與Internet進行通信。 一些這樣做的方法是:

外部服務

連接到外部服務器,該服務器將告訴您從其開始的IP地址(您的Internet /外部IP地址)。 有效的例子似乎就是這個這個

只要遠程主機啟動並為您提供IP,這可能是最簡單/最可靠的方法之一。 幾乎可以肯定是正確的選擇。 顯然,這意味着您的應用程序依賴於此外部服務。 注意:這些主機可能不希望經常查詢,因此最好緩存IP,並且每30分鍾左右刷新一次。

另類

還有其他選擇 ,例如使用Windows tracert.exe控制台應用程序跟蹤數據包。 這仍然需要外部主機作為跟蹤的目標,但是許多主機可以充當此類目標。 不利的是,與上述方法相比,該方法相當復雜並且容易出現問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM