2016-04-01 21 views
1

Merhaba Bir nslookup etki alanının tüm ip adreslerini almaya çalışıyorum bir sorum var. Aşağıdaki komut dosyasını bir düğmede C# kullanarak kullanıyorum ama sadece 1 ip adresi yazdırıyor, ne yapıyorum yanlış? Ben stackoverflow burada mutiple cevapları gördüm ama düzgün çalışması için bir tane olamaz çünküNeden nslookup etki alanındaki tüm ip adreslerini yazdıramıyorum #

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

Tüm yardım greatfull olurdu.

Saygılarımızla, hepsinden Dennis

cevap

3

Öncelikle, dns isteği 3 kez yapma kaçınmalısınız. Sonucu bir değişkende saklayın.

İkinci olarak, son girişe txtIp.Text'u ayarlarsınız. Dizeleri eklemelisin ama onları değiştir. Bu kodu deneyin:

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

Ama bu yine de bu kadar kısaltılabilir:

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

Bu, ip adreslerinin virgülle ayrılmış listesini verir.

+0

Çok teşekkür ederim, nihayetinde istediğim gibi çalışıyorum.) – user1796805

İlgili konular