为什么我不能在c#中从nslookup打印出所有ip地址

时间:2016-04-01 14:52:24

标签: c# winforms ip nslookup

您好我有一个问题,我试图获取nslookup域的所有IP地址。我在一个按钮上使用c#中的以下脚本,但它只打印出1个ip地址,我做错了什么?

string myHost = "domain.com";
string myIP = null;


for (int i = 0; i <= System.Net.Dns.GetHostEntry(myHost).AddressList.Length - 1; i++)
{
    if (System.Net.Dns.GetHostEntry(myHost).AddressList[i].IsIPv6LinkLocal == false)
    {
        //myIP = System.Net.Dns.GetHostEntry(myHost).AddressList[i].ToString();
        txtIp.Text = System.Net.Dns.GetHostEntry(myHost).AddressList[i].ToString();
    }
}

所有的帮助都会很棒,因为我在stackoverflow上看到过多个答案,但我无法让它正常工作。

的问候, 丹尼斯

1 个答案:

答案 0 :(得分:3)

首先,你应该避免让dns请求 3次。将结果存储在变量中。

其次,将txtIp.Text设置为最后一个条目。您需要追加字符串,但要替换它们。试试这段代码:

string myHost = "domain.com";
string myIP = null;
IPHostEntry hostEntry = System.Net.Dns.GetHostEntry(myHost);

for (int i = 0; i <= hostEntry.AddressList.Length - 1; i++)
{
    if (!hostEntry.AddressList[i].IsIPv6LinkLocal)
    {
        txtIp.Text += hostEntry.AddressList[i].ToString();
    }
}

但这仍然可以缩短到这一点:

string myHost = "domain.com";
string myIP = null;
IPHostEntry hostEntry = System.Net.Dns.GetHostEntry(myHost);
txtIP.Text = string.Join(", ", hostEntry.AddressList.Where(ip => !ip.IsIPv6LinkLocal).Select(ip => ip.ToString()));

这将为您提供以逗号分隔的IP地址列表。