19 Haziran 2014 Perşembe

Ağdaki Bilgisayarların Adlarını Öğrenmek

İş yerindesiniz ve elinizde ipler var. Siz gidip gidip bilgisayar ismine bakıyorsunuz. Oluyor mu? Tabi ki de olmuyor. Öncelikle yapmanız gereken şey basit. Kendi ip adresinizi öğreneceksiniz ve bu sayede de hangi bacaktan ipleri listeleyeceğini karar veriyorsun. Mesela ben 10.1.2.x kullanıyorum. Buna ek olarak istesem  10.1.3.x de kullanabilirim. Yani ağında hangi bacaklar kullanılıyor. Tek bacak kullanıyorsan işin basit. tek döngü ile işin biter ama 2 - 3 bacak kullanıyorsan hatta aynı anda farklı bloklar kullanıyorsan işin uzar gider. Size tek bacaklı bir ip blokundan anlatacağım.

Neyse önce ip adresimizi öğrenelim.

 System.Net.Dns.GetHostByName(Net.Dns.GetHostName).AddressList(0).ToString()

Bize ip adresimizi döndürüyor. Bu sayede sistemde hangi bacağı kullandığımızı öğreniyoruz. Şimdi split ile bloklar ayıralım.

 Dim bloklar() As String =  System.Net.Dns.GetHostByName(Net.Dns.GetHostName).AddressList(0).ToString().Split(".")

Bloklara ayırdık. şimdi ip blokları her biri byte den meydana geldiği için yani ip bloklarının her biri byte türündedir. Bu blokları for kodu ile byte.minvalue den byte.maxvalue ye kadar gezdirelim. Bu sayede kendi bloğumuzda bulunan bütün ipleri gezmiş olacaktır. sonrada bunları listboxumuza ekleyelim.


    For i = Byte.MinValue To Byte.MaxValue
            Try
                Dim strIPAddress As String = bloklar(0) + "." + bloklar(1) + "." + bloklar(2) + "." + i.ToString
                Dim host As IPHostEntry = Dns.GetHostEntry(strIPAddress)
                ListBox1.Items.Add(strIPAddress & vbTab & vbTab & host.HostName)
                ListBox1.Refresh()
            Catch
            End Try
        Next

Performans konusunda biraz sıkıntılıdır. timeoutlar falan mevcut değil ve backgroundworker kullanırsanız istediğiniz performansı elde edebilirsiniz. Çok daha hızlı ve çok seri bir şekilde ağda aktif bilgisayarların isimlerini alabilirsiniz.  Şu da bir gerçek ki ağdaki her cihazın ismi olmadığı için sadece ismi olan cihazları listeler yani buna yüzde yüz doğrudur diyemeyiz.

2 yorum:

  1. Merhaba bunu c# da nasıl yapabiliriz.

    YanıtlaSil
    Yanıtlar
    1. Merhaba Hasan,
      Sanırım senin istediğini bu çözebilecek. Ayrıca yukarıdaki kod da güncelliğini yitirdi benim için. Sanırım biraz dar bir görüşle yazmışım o kodları.


      using System;
      using System.Net;
      using System.Net.Sockets;

      namespace ConsoleApp13
      {
      class Program
      {
      static void Main(string[] args)
      {

      if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
      {
      string localIP;
      using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
      {
      socket.Connect("8.8.8.8", 65530);
      IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
      localIP = endPoint.Address.ToString();
      }

      string[] blocks = localIP.Split(".");

      for (int i = byte.MinValue + 1; i < byte.MaxValue; i++)
      {
      string currentIpAdress = blocks[0] + "." + blocks[1] + "." + blocks[2] + "." + i.ToString();
      try
      {
      IPHostEntry host = Dns.GetHostEntry(currentIpAdress);
      Console.WriteLine(currentIpAdress + "\t\t" + host.HostName);
      }
      catch
      {

      }
      }
      }
      else
      {
      Console.WriteLine("Network is not awailable!");
      }
      }
      }
      }

      Sil