سوکت

موضوع عکس: سوکت

چگونه در #C میتوانیم مشخصات DNS و IP را استخراج کنیم.

برای استخراج اطلاعات DNS که شامل ip های متصل به سیستم نیز میشود. باید از کلاس Dns استفاده کنیم.

در فضای نام System.NET کلاسی بنام Dns وجود دارد که متد هایی برای استخراج اطلاعاتی نظیر IP و نام میزبان .. در آن تعریف شده است.

بنابراین مشخص می شود که برای دریافت ای پی ما باید از کلاس Dns استفاده کنیم.

کلاس Dns مستقیما قابل استفاده نیست.

کلاس IPHostEntry یک کلاس کانتیر برای Dns است که می توان آن را با استفاده از 3 متد GetHostByName , GetHostByAddress, GetHostEntry موجود در کلاس Dns مقداردهی کرد.

کلاس IPHostEntry دارای 3 خاصیت بسیار مهم رشته ای با HostName - []Aliases - []IPAddress است .

در آخر هم گفتن این نکته شاید لازم باشد که کلاس IPAddress حاوی آدرس آی پی خواهد بود. البته در این کلاس متد هایی برای مدیریت big-endian order وlittle-endian  order وجود دارد که بررسی آنها از حوصله بحث ما خارج است.

خوب بریم سراغ  کد نویسی تا بصورت عملی از توضحات بالا استفاده کنیم:

using System;
using System.Net;

namespace GetDns
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            ShowDnsInfo(Dns.GetHostName());
            Console.Write("\nEnter Host Name : ");
            ShowDnsInfo(Console.ReadLine());
            Console.ReadKey();
        }
        static void ShowDnsInfo(string orgHost)
        {
            try
            {
                Console.WriteLine("\n-----------------New Get Dns Info-------------------");
                IPHostEntry myHost = Dns.GetHostEntry(orgHost);
                Console.WriteLine("Host Name is : {0}\r", myHost.HostName);
                foreach (IPAddress Ip in myHost.AddressList)
                {
                    Console.WriteLine("IP : {0} \r", Ip.ToString());
                }
                foreach (string Alias in myHost.Aliases)
                {
                    Console.WriteLine("Alias : {0} \r", Alias);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

    }
}

تمام توضیح های بالا بصورت کاربردی معرفی شد. اما شاید سیستم شما دارای چندین آی پی داخلی باشد. چگونه میتوان فقط آی پی های رایج IPv4 , Ipv6 رو به دست آورد؟ جواب این سوال در نوع داده شمارشی AddressFamily است که در فضای نام System.Net.Socket تعریف شده است. از آنجایی که آی پی های رایج بر اساس IPv4 تعریف شده است(اگر تغییری در آنها نداده باشید) اگر در لیست ای پی ها که از Dns.GetHostName استخراج شده , خانواده IP با IPv4 برابر بود پس آن همان آی پی معتبر خواهد بود. سورس کد بالا را به صورت زیر می توان تغییر داد:

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

namespace GetDns
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            ShowDnsInfo(Dns.GetHostName());
            Console.Write("\nEnter Host Name : ");
            ShowDnsInfo(Console.ReadLine());
            Console.ReadKey();
        }
        static void ShowDnsInfo(string orgHost)
        {
            try
            {
                Console.WriteLine("\n-----------------New Get Dns Info-------------------");
                IPHostEntry myHost = Dns.GetHostEntry(orgHost);
                Console.WriteLine("Host Name is : {0}\r", myHost.HostName);
                foreach (IPAddress Ip in myHost.AddressList)
                {
                    if (Ip.AddressFamily == AddressFamily.InterNetwork)
                    {
                        Console.WriteLine("IP : {0} \r", Ip.ToString());
                    }
                }
                foreach (string Alias in myHost.Aliases)
                {
                    Console.WriteLine("Alias : {0} \r", Alias);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

    }
}

امیدوارم که مطلب برای شما مفید باشد. اگر نکته نظری دارید حتما باما درمیان بگذارید  .

 

 

 

 

امیر احمدی
ارسال شده به وسیله: امیر احمدی

او دانشجوی مهندسی کامپیوتر گرایش نرم افزار است. برنامه نویسی با زبان های مختلفی را تجربه کرده است. در حال حاضر مدیر بخش وبسایت آیتیوم است. ودارای دواختراع ثبت شده در زمینه های الکترونیک و مکانیک میباشد

نظرات کاربران

  1. Avatar
    تاریخ 2015-08-23 17:06:21

    مو ضوع مفیدی بود .باتشکر

    پاسخ

    • Avatar
      تاریخ 2015-08-23 17:08:11

      خواهش می کنم.

      پاسخ

ارسال نظر

تصویر رو برو را وارد کنید!