Parity check با سی شارپ :: V i R u s Ʒ²

V i R u s Ʒ²

هک و امنیت

V i R u s Ʒ²

هک و امنیت

Virus 32

💢 دوستانم بی دفاع و دشمنانم بی جواب نخواهند ماند 💢

-->
آخرین نظرات
  • ۲۲ مرداد ۰۲، ۰۰:۳۴ - Sami
    مرسی
  • ۱۴ مرداد ۰۲، ۱۴:۴۶ - farhad
    salam

Parity check با سی شارپ

به نام خالق زیبایی ها

در این پست قصد دارم برنامه ParityCheck( بررسی تعداد زوج بودن یا نبودن 8 بیت  در شبکه کامپیوتری) رو خدمتتون آموش بدم، امیدوارم کمکی کرده باشم برا بچه هایی که درس شبکه در دانشگاه قراره پاس کنن و همه عزیزان و همراهان Virus32.

همراه ما باشید.

خب برای ابتدای کار شما یک وبفرم(WinForm) تو سی شارپ  میسازید و نیاز به تعدادی:

1- 9 عدد Lable (برای نمایش و ...)

2- 1 عدد TextBox (وارد کردن بیت های ورودی  )

3- 2 عدد Button (یکی برای نمایش و یکی برای برگشت)

4- 1عدد CheckBox (اضافه کردن نویز به داده ورودی در صورت نیاز)

هرجای کد نیاز به توضیح باشه حتما توضیحش رو میدم و نه بصورت کلی.

این تعداد کنترل های مورد نیاز رو با توجه به تصویرقرار میدم(میتونه سلیقه ای باشه) ولی حتی الامکان با توجه به تصویر جاگذاری بشه بهتره.

 

 

خب حالا میریم سراغ کد نویسی. با توجه به تصویری که براتون گذاشتم دارم کد نوشته شده است.

1- کد زیر رو سراسری تعریف کنید 

آرایه تعریف میکنیم برای ورودی که جلوتر کار دارین باهاش

int[] array_input;

2- روی Button اولی(اجرا کن) دوبار کلیک میکنیم و قطعه کد زیر رو مینویسیم.

توضیحات رو تو کد دادم که گله مند نشید:wink

            int input = -1;
            input = textBox1.Text != "" ? int.Parse(textBox1.Text) : -1;
            if (input > 11111111 || input < 0 )
            {
                MessageBox.Show("داده شما به درستی وارد نشده است","سیستم",MessageBoxButtons.OK,MessageBoxIcon.Warning,MessageBoxDefaultButton.Button1);
                textBox1.Clear();
                textBox1.Focus();
                input = -1;
            }
            else
            {
                
                
                string me = "";
                bool result = true;

                Add_Array(input);
             
                if (checkBox1.Checked)
                {
                    Make_Noise();
                }
               

                me = Messageboxshowing_array();
                label1.Visible = true;
                label1.Text = me;
                label2.Visible = true;
                label3.Visible = true;
                label4.Visible = true;

                label4.Text = textBox1.Text;
                label5.Visible = true;
                label6.Visible = true;
                label7.Visible = true;
                label7.Text = array_input[8].ToString();
                result = CheckParity();//تابع چک کننده درست بودن یا نبودن رو میریزه تو یه متغییر
                label8.Visible = true;
                label8.Text = array_input[8].ToString();

                label9.Visible = true;
                //اگه نویزی وارد بشه و مقدار 8 بیت رو تغییر بده داده با خطا مواجه گردید 
                if (!result)
                {
                    label9.Text = " داده با خطا دریافت شده است ";
                    label9.ForeColor = Color.Red;
                }
                else//در غیر اینصورت داده به درستی رسیده است
                {
                    label9.Text = " داده  به درستی دریافت شده است ";
                    label9.ForeColor = Color.Green;
                }

                
                
            }

2- خب حالا زمان نوشتن توابعی هستش که قراره برنامه رو اجرا کنن.

اولبن تابع Add_Array هستش که داده 8 بیت رو از ورودی میگیره و داده که از سمت چپ وارد کردیم رو باید با محاسباتی که نوشته شده بررسی کنه و از سمت راست  اضافه بشه و داده ما در این تابع بصورت کامل ذخیره میشه و در توابع دیگر نیاز داریم خیلی بهش:

public void Add_Array(int x)
        {
            

            array_input = new int[9]; //برای نشون دادن زوج (0)و فرد (1) هستش

            for (int i = 7; i >= 0; i--) 
            {
                array_input[i] = x % 10;
                x = x / 10;
            }

            array_input[8] = Checkeven() ? 0 : 1;
        }

3- خب حالا این تابع موظف هستش با توجه به تابع قبلی که داده رو ذخیره کرده بیاد و زوج بودن این داده رو بررسی کنه، میپرسین چطوری؟ 

خب ما میدونیم که زوج بودن فرمولش چیه(هر عددی که باقی مانده اون بر 2 برابر 0 بشه زوجه دیگه)

دقیقا همین کار این تابع انجام میده:

 public bool Checkeven()
        {
           
            int c = 0;
            bool even = false;

            for (int i = 0; i < 8; i++)
            {
                if (array_input[i]==1)
                {
                    c++;
                }
            }

            if (c % 2 == 0)
            {
                even = true;
            }
            return even;
        }

4- تابع بعدی ایجاد نویز برای داده ورودیمونه:

 public void Make_Noise()
        {
            /*
        تابع ایجاد نویز بصورت رندوم و قرار گیری اون تو 8 بیت ورودی
            */
            int x = 0;
            Random R = new Random(DateTime.Now.Millisecond);
            x = R.Next(0, 7);
            array_input[x] = array_input[x] == 0 ? 1 : 0;
        }

5- تابع Messageboxshowing_array  میاد داده رو بصورت کلی ذخیره میکنه و جهت نمایش نشون میده چه با نویز و چه بدون نویز:

 public string Messageboxshowing_array()
        {
            string myarray = "";
            for (int i = 0; i < 8; i++)
            {
                myarray += array_input[i];

            }
            return myarray;
        }

6- و آخرین تابع CheckParity میباشد که قاره درستی داده هارو بررسی کنه که داده ای که ما ذخیره کردیم؛ همون داده ای هست که سمت گیرنده دریافت شده؟

اگه درست همونی که ما وارد کردیم، فرستنده گرفت که جوابش درست در میاد 

اگه داده ما که وارد کردیم و زمانی که نویز وارد شده و این دو مقدار برابر هم نباشد که جوابشو میشه خیر

توسط این تابع رله میشه:

public bool CheckParity()
        {
           
            bool correct = true;

            int new_parity = -1;
            new_parity = Checkeven() ? 0 : 1;

            if (new_parity != array_input[8])
            {
                correct = false;
            }

            array_input[8] = new_parity;

            return correct;
        }

7-پیشفرض تمامی Lable ها رو غیر قابل رویت(پنهان) میکنیم و در دکمه دومی این قطعه کد رو مینویسیم که برگشت رو همینطور کنه:

 private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            checkBox1.Checked = false;
            label1.Visible = false;
            label2.Visible = false;
            label3.Visible = false;
            label4.Visible = false;
            label5.Visible = false;
            label6.Visible = false;
            label7.Visible = false;
            label8.Visible = false;
            label9.Visible = false;
        }

حالا کد ما تموم شده و آماده اجراست.

قبل از اون یک قطعه کد دیگه هم هست برای محکم کاری نوشته میشه میشه که جلوی داده غلط به TextBox رو میگیره پس برید Event تکس باکس و KeyPress رو پیدا کنید و این کد رو بنویسید

if(!char.IsControl(e.KeyChar)&&!char.IsDigit(e.KeyChar)||e.KeyChar>'1')
            {
                e.Handled = true;
                MessageBox.Show("فقط عدد");
            }

کد ما به سلامتی بطور کامل تموم شده

اگه جایی مبهم بودبراتون سوال بفرمایید، من و دوستای عزیزم در خدمتتونیم.

امیدوارم در تمامی مراحل زندگیتون موفق باشد.

 

نظر (۱)

سلام خسته نباشید

این جریان به چه دردی میخوره؟

یعنی زوج یا فرد بودنش رو بفهمیم چی میشه؟

Virus32 محمدرضا نوربخش :
درود
اگه با شبکه آشناییت داشته باشید
ParityChek به این شکله که داده از سمت client به سمت Server فرستاده میشه
گیرنده یا Server (یا هرچیز دیگه) داده رو دریافت میکنه و میاد داده رو از لایه 7 به سمت لایه 1 که همون لایه فیزیکی هست میفرسته(این لایه ها بحث جداگانه دارن)
لایه فیزیکی چیزی از داده متوجه نمیشه عملا و میاد داده رو به صورت سیگنال 0 و 1 درمیاره و متوجه میشه داده چیه
حالا اگه تعداد 1 هایی که دریافت میکنه زوج باشند مقدار 0 میده که آقا تعدا  1 من زوج هست
و اگه تعداد 1 های دریافتی فرد باشه مقدار 1 به اون اضافه میکنه تا زوج بشه
برای مثال: داده هشت بیتی  11011100 فرستاده میشه با شمارش تعداد 1 ها میفهمین داده فرد هست برای همین یه عدد 1 به دنباله عدد اضافه میکنه تا داده درست دربیاد => 11011100  1 
دقیقا ما تو این بحثمون Parity check زوج هستش
در حقیقت 0و1 که اضافه میشه نشون دهنده فرد یا زوج بودن داده دریافتی هستش
امیدوارم متوجه عرض بنده شده باشید
برای همین مهمه که داده به چه شکلی به سمت گیرنده فرستاده شده و گیرنده اون داده رو چه به صورت درست یا بصورت نویز دریافت کرده باشه
و با توجه به مواردی که در شبکه هست یک نمونه اون همین داستان ParityChek  هستش

Virus32 Virus 32 :
تو شبکه های کوچیک به عنوان تست خطا هم میشه از این روش کمک گرفت
مثلا تو شبکه میتونیم اطلاعاتی با پریتی زوج ارسال کنیم و ببینیم اطلاعاتی که دریافت میشه پریتی زوج هست یا فرد
اگه فرد بود یعنی یکی از بیت ها در حین انتقال جابجا شده
میتونیم ازش به عنوان بیت کمکی اضافه برای کاهش درصد خطا استفاده کنیم
مثل حفره اضافی در نوارهای مغناطیسی که بجای 8 حفره از 9 حفره تشکیل میشه

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی