C#将获取的地址解析为IP地址

时间:2013-02-06 03:51:49

标签: c# parsing ip

新编程,但试图自我教导学校尚未向我展示的一些领域。

项目的宏伟计划是接受客户端与服务器的连接。在控制台窗口中,它将显示连接时间。我也试图让它显示客户端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

2 个答案:

答案 0 :(得分:0)

您需要查看地址列表中的所有IP地址并丢弃IPV6地址。

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

有关AddressFamily类型,请参阅this link

答案 1 :(得分:0)

  

我也试图让它显示客户端的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