2016-04-01 6 views
1

Здравствуйте, у меня есть вопрос, я пытаюсь получить все IP-адреса домена nslookup. Я использую следующий скрипт в C# на кнопке, но он только распечатывает 1 ip-адрес, что я делаю неправильно?Почему я не могу распечатать все IP-адреса из nslookup в C#

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(); 
    } 
} 

Вся помощь будет greatfull, потому что я видел Mutiple ответов здесь, на StackOverflow, но я не могу получить один, чтобы работать должным образом.

С уважением, Деннис

ответ

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-адресов.

+0

Огромное спасибо за то, что я окончательно получил работу, как я ее хотел;) – user1796805