![](/img/trans.png)
[英]C# Socket: How to get the IP addresses of Servers only without typing or fixing IPAddress in client side
[英]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.