簡體   English   中英

C#將獲取的地址解析為IP地址

[英]C# Parsing acquired address to an IP address

編程新手,但嘗試自學一些學校尚未向我展示的領域。

該項目正在運行的宏偉計划是接受客戶端與服務器的連接。 在控制台窗口中,它將顯示連接時間。 我還試圖使其顯示客戶端IP地址以進行日志記錄。 以下是我所擁有的,但無法正確解析。

//Console Output
string IPAddress = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();
IPAddress address = IPAddress.Parse(ipAddress);
Console.WriteLine("New TCP connection made at " + "{0:g}", DateTime.Now + IPAddress);

如果我忽略“ IPAddress address ...”行,它將顯示很長的,未解析的地址= p

您需要查看地址列表中的所有IP地址,並丟棄IPV6地址。

IPAddress[] ipv4Addresses = Array.FindAll(
    Dns.GetHostEntry(string.Empty).AddressList,
    a => a.AddressFamily == AddressFamily.InterNetwork);

請參閱此鏈接以了解AddressFamily類型。

我還試圖使其顯示客戶端IP地址以進行日志記錄。

請記住,客戶端上可能有多個NIC,即有線/無線(以及多個NIC)。 這意味着將有多個IP地址,最有可能是IPv4和IPv6地址的混合。

使用Dns.GetHostEntry方法時,傳遞一個空字符串作為主機名將返回本地主機的IPv4地址:

IPHostEntry entry = Dns.GetHostEntry( string.Empty );

或者,您可以使用:

IPHostEntry entry = Dns.GetHostEntry( Dns.GetHostName() );

然后,要查找所有地址,請使用AddressFamily Enumeration

var addresses = entry.AddressList.Where( x => x.AddressFamily == AddressFamily.InterNetwork );

其中AddressFamily.InterNetwork = IP版本4的地址。

從這里,您可以根據需要遍歷addresses

暫無
暫無

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

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