آموزش ویژوال بیسیک و برنامه نویسی

سورس,ویژوال بیسیک,نرم افزار,باشگاه,بدنسازی,فوتبال,آنالیز,پیش بینی,کد,برنامه نویسی

آموزش ویژوال بیسیک و برنامه نویسی

سورس,ویژوال بیسیک,نرم افزار,باشگاه,بدنسازی,فوتبال,آنالیز,پیش بینی,کد,برنامه نویسی

نحوه نوشتن جاسوس شبکه و اینترنت

مقدمه :

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



جاسوس

جاسوس به کسی میگویند که حواسش به برقراری ارتباط  و نوع برقراری ارتباط افراد باهم باشد و آن را بلافاصله به مافوق خودش گزارش کند و این یعنی جاسوسی کردن ؟؟؟

جاسوس شبکه

نرم افزاری است که وقتی دو کامپیوتر با هم گفتگو میکنند متوجه شده و اعلام میکند نمونه ای از یک جاسوس در زیر نمایش داده میشود.

همانگونه که مشاهده میشود این جاسوس در حال وارسی دور و اطراف خود میباشد و نحوه شناخت آن هم همان عینک دودی آن است

چگونه میتوان جاسوس شبکه نوشت :

آیا تا بحال به نحوه کار سیستم های فایروال (نرم افزارهای فایروال یا دیواره آتش) فکر کرده اید آیا تا بحال به ارتباطات شبکه ای اندیشیده اید

میدانید میتوان یک برنامه فایروال نوشت تا با نصب آن روی کامپیوتر شبکه از ارتباطات نا معقول جلوگیری کرد ؟

  •  چگونه میتوان یک فایروال خوب نوشت ?

برای پاسخ به این سوال نخست باید پرسید :

  1. من از کجا میتوانم بفهمم که یک کامپیوتر به سیستم من متصل شده است ؟
  2. و هم اکنون این ارتباط در چه وضعیتی قرار دارد؟
  3. آیا ارتباط قطع شده یا هنوز هم ارتباط برقرار است ؟
  4. اینها سوالهایی است که قبل از فایروال نویسی باید بدانها پاسخ داد ؟

برای پاسخ به این سوالها باید نخست نحوه برقراری ارتباط را دانست

پس سوال نخست آنکه : نحوه برقراری ارتباط میان دو کامپیوتر چگونه میباشد

پس از پاسخ به این سوال سوال دومی مطرح میشود و آن اینکه : خوب چه کامپیوتر هایی به کامپیوتر من متصل هستند

و پس از آن باید بدنبال فایروال و بلوک کردن ارتباط بود

نحوه برقراری ارتباط میان دو کامپیوتر چگونه میباشد

هر ارتباطی نیاز به یک رابط و مرتبط کنند دارد برای نمونه همین زبان ؛ وقتی دو ایرانی با هم سخن میگویند با زبان پارسی که قراردادمشترک میان این دو میباشد سخن میگویند و اگر یک نفر ایرانی با یک فیلپینی بخواهد سخن بگوید باید با زبانی که میان آن دو مشترک میباشد سخن بگوید که هر دو بتوانند این را متوجه شوند(به این همان پروتکلProtocol  یا قرارداد نحوه سخن گفتن میگویند)  اما لب و زبان (منظور کام) همان وسیله ای است که با آن میتوان سخن گفت و این وسیله در هر دو نفر یکسان است و تنها راه برقراری ارتباط میان دو نفر همین لب و زبان میباشد به این درگاه ارتباطی میگویند .

دو کامپیوتر برای سخن گفتن نیز نیاز به وسیله ای دارند تا با هم سخن بگویند این نقش در یک کامپیوتر چگونه ایفا میشود ؟

وقتی دو فرد میخواهند با هم ارتباط برقرار کنند چگونه این کار را انجام میدهند این ارتباط به چه صورت میباشد دو نفر میتوانند با روشهای زیر با هم ارتباط برقرار کنند

  • سخن گفتن
  • نگاه کردن
  • لمس کردن
  • ...

همین موضوع نیز در کامپیوتر رعایت میشود اما با کمی تفاوت .

دو کامپیوتر برای برقراری ارتباط باید دو خصیصه را در نظر داشته باشند 

  1. IP 
  2. Port
  • آی پی که یک خصیصه منحصر به فرد برای یک کامپیوتر میباشد یعنی هر کامپیوتر برای خود یک شماره آی پی دارد که برای خودش میباشدو هیچ کامپیوتر دیگری یافت نمیشود که مقدار آی پی آن همین مقدار باشد 
  •  پورت شماره درگاهی است که دو کامپیوتر با هم میخواهند از طریق آن درگاه سخن بگویند

خوب با داشتن این دو اطلاعات میتوان دو کامپیوتر را با هم ارتباط داد

استاندارد ارتباطی میان دو کامپیوتر (البته در سری سیستم عامل ویندوز) وین سوکت(WinSocket) نام دارد و تقریبا در همه انواع ارتباطها از این استاندارد(که مشابه همان پرتکل است) استفاده میکند مثلا اینترنت اکسپلورر IE و شبکه دو نمونه کاملا بزرگ استفاده از این قرارداد یعنی وین سوکت میباشد

توابع API مرتبط با استاندارد وین سوکت :

این توابع همه در فایل wsock32.dll موجود میباشند

  • Closesocket
  • Connect
  • Gethostbyname
  • Gethostname
  • Getsockopt
  • Htons
  • inet_addr
  • inet_ntoa
  • ntohs
  • recv
  • Send
  • Setsockopt
  • Socket
  • WSAAsyncSelect
  • WSACancelBlockingCall
  • WSACleanup
  • WSAGetLastError
  • WSAIsBlocking
  • WSAStartup

IP Helper چیست ؟

یک سری توابع مربوط به کار با آی پی درون یک فایل Dll با نام iphlpapi.dll قرار دارد

ما در اینجا فقط با یکی از این توابع کار داریم با نام GetTcpTable که در زیر نحوه تعریف کردن آن را مشاهد مینمایید:

Declare Function GetTcpTable Lib "iphlpapi.dll" (ByRef pTcpTable  As Any, ByRef pdwSize As Long, ByVal bOrder As Long) As Long

این تابع میتواند به ما مقادیر آی پی و پورتهایی که هم اکنون توسط ما یا کامپیوترهای دیگر اشغال گردیده را بدهد. حال به تعریف مقادیر پارامترهای این تابع میپردازیم:

  • pTcpTable : تایپ از نوع MIB_TCPROW است که خود به صورت زیر تعریف میشود)در اینجا آدرس آن به تابع پاس داده میشود و لازم به ذکر است اگر مقدار صفر برای این پارامتر داده شود برگشتی مقدار حافظه مورد نیاز جهت دریافت اطلاعات را برمیگرداند در مثال زیر این قسمت کاملا مشخص است)

Private Type MIB_TCPROW

  •     dwState As Long
  •     dwLocalAddr As Long
  •     dwLocalPort As Long
  •     dwRemoteAddr As Long
  •     dwRemotePort As Long
  • End Type
  • : dwState وضعیت فعلی ارتباط را مشخص میکند که میتواند مقادیر زیر باشد

نام مقدار

مقدار

MIB_TCP_STATE_CLOSED

1

MIB_TCP_STATE_LISTEN

2

MIB_TCP_STATE_SYN_SENT

3

MIB_TCP_STATE_SYN_RCVD

4

MIB_TCP_STATE_ESTAB

5

MIB_TCP_STATE_FIN_WAIT1

6

MIB_TCP_STATE_FIN_WAIT2

7

MIB_TCP_STATE_CLOSE_WAIT

8

MIB_TCP_STATE_CLOSING

9

MIB_TCP_STATE_LAST_ACK

10

MIB_TCP_STATE_TIME_WAIT

11

MIB_TCP_STATE_DELETE_TCB

12

  • dwLocalAddr شماره آی پی لوکال را میدهد (بصورت یک عدد که ما باید آن را بصورت فرمت xxx.xxx.xxx.xxx در آوریم)
  • dwLocalPort شماره پورت لوکال را میدهد
  • dwRemoteAddr شماره آی پی هاست را میدهد (بصورت یک عدد که ما باید آن را بصورت فرمت xxx.xxx.xxx.xxx در آوریم)
  • dwRemotePort شماره پورت هاست را میدهد
  • فرم مورد نیاز :

    برای برنامه نویسی جاسوس شبکه باید نخست نیازها بررسی شود

    خوب ما چه چیز نیاز داریم

    • یک تایمر
    • یک لیست ویو
    • یک چک باکس

    اینها را برای چه میخواهیم خوب در زیر توضیح داده شده است

    تایمر: این را برای این نیاز داریم تا بتوانیم لحظه به لحظه با اسکن کردن ‘ آی پی های مرتبط را تشخیص دهیم . بهترین زمان برای اسکن کردن هر یک ثانیه میباشد

    لیست ویو : برای اینکه بتوانیم مقادیر مربوط به pTcpTable از تابع را نمایش دهیم . این لیست ویو باید شامل این هدرها باشد

    • Ip Local
    • Port Local
    • Ip Host
    • Port Host

    چک باکس : بعد از اجرای برنامه میبینید که یک سری پورتها توسط خود سیستم (سیستم شما) جهت استفاده های خاص مورد استفاده قرار گرفته که این ها همه یک خصلت مشترک دارند و آن لوکال آی پی آنها Local IP همه یا 0.0.0.0 و یا 127.0.0.1 میباشد با این چک باکس میخواهیم این اطلاعات اضافی را از نمایشمان حذف کنیم.

    برنامه ماجول فرم :

    نخست تعریف توابع و ثابتها

    نخست تعریف تایپ مورد نیاز

    Private Type MIB_TCPROW

        dwState As Long

        dwLocalAddr As Long

        dwLocalPort As Long

        dwRemoteAddr As Long

        dwRemotePort As Long

    End Type

    تعریف ثابتهای خطا

    Private Const ERROR_BUFFER_OVERFLOW = 111&

    Private Const ERROR_INVALID_PARAMETER = 87

    Private Const ERROR_NO_DATA = 232&

    Private Const ERROR_NOT_SUPPORTED = 50&

    Private Const ERROR_SUCCESS = 0&

    تعریف ثابتهای وضعیت ارتباط

    Private Const MIB_TCP_STATE_CLOSED = 1

    Private Const MIB_TCP_STATE_LISTEN = 2

    Private Const MIB_TCP_STATE_SYN_SENT = 3

    Private Const MIB_TCP_STATE_SYN_RCVD = 4

    Private Const MIB_TCP_STATE_ESTAB = 5

    Private Const MIB_TCP_STATE_FIN_WAIT1 = 6

    Private Const MIB_TCP_STATE_FIN_WAIT2 = 7

    Private Const MIB_TCP_STATE_CLOSE_WAIT = 8

    Private Const MIB_TCP_STATE_CLOSING = 9

    Private Const MIB_TCP_STATE_LAST_ACK = 10

    Private Const MIB_TCP_STATE_TIME_WAIT = 11

    Private Const MIB_TCP_STATE_DELETE_TCB = 12

    تعریف توابع مورد نیاز

    Private Declare Function GetTcpTable Lib "iphlpapi.dll" (ByRef pTcpTable As Any, _

    ByRef pdwSize As Long, ByVal bOrder As Long) As Long

    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _

    (ByRef pDest As Any, ByRef pSource As Any, ByVal Length As Long)

    حال یک تابع نیاز داریم که یک عدد لانگ Long را بگیرد و تبدیل به یک رشته (استرینگ) با فرمت xxx.xxx.xxx.xxx نماید این تابع را در زیر تعریف میکنم

    Private Function GetIpFromLong(lngIPAddress As Long) As String

        '

        Dim arrIpParts(3) As Byte

        '    CopyMemory به لیست آی پی آی موجود در سایت نگاه کنید

        CopyMemory arrIpParts(0), lngIPAddress, 4

         GetIpFromLong = CStr(arrIpParts(0)) & "." & CStr(arrIpParts(1)) _

     & "." & CStr(arrIpParts(2)) & "." & CStr(arrIpParts(3))

     End Function

    حالا تابعی نیاز داریم تا وضعیت های پیشامده در ارتباط را بصورت یک رشته به ما برگرداند

    Private Function GetState(lngState As Long) As String

        '

        Select Case lngState

            Case MIB_TCP_STATE_CLOSED: GetState = "CLOSED"

            Case MIB_TCP_STATE_LISTEN: GetState = "LISTEN"

            Case MIB_TCP_STATE_SYN_SENT: GetState = "SYN_SENT"

            Case MIB_TCP_STATE_SYN_RCVD: GetState = "SYN_RCVD"

            Case MIB_TCP_STATE_ESTAB: GetState = "ESTAB"

            Case MIB_TCP_STATE_FIN_WAIT1: GetState = "FIN_WAIT1"

            Case MIB_TCP_STATE_FIN_WAIT2: GetState = "FIN_WAIT2"

            Case MIB_TCP_STATE_CLOSE_WAIT: GetState = "CLOSE_WAIT"

            Case MIB_TCP_STATE_CLOSING: GetState = "CLOSING"

            Case MIB_TCP_STATE_LAST_ACK: GetState = "LAST_ACK"

            Case MIB_TCP_STATE_TIME_WAIT: GetState = "TIME_WAIT"

            Case MIB_TCP_STATE_DELETE_TCB: GetState = "DELETE_TCB"

        End Select

        '

    End Function

    این تابع شماره پورت بازگشته را بصورت هگزا دسیمال برمیگرداند بنابر این باید یک تابع باشد تا عدد را به شماره پورت واقعی تبدیل کند که در زیر تعریف شده است .

    Private Function GetTcpPortNumber(DWord As Long) As Long

        GetTcpPortNumber = DWord / 256 + (DWord Mod 256) * 256

    End Function

    حال میرسیم به برنامه اصلی برنامه ای که بصورت زمانی اجرا میشود و آی پی های اسکن شده را نمایش میدهد این برنامه را در تایمرمان قرار میدهیم.

    Private Sub timNetWorkSpyer_Timer()

        '

        Dim arrBuffer() As Byte

        Dim lngSize As Long

        Dim lngRetVal As Long

        Dim lngRows As Long

        Dim i As Long

        Dim TcpTableRow As MIB_TCPROW

        Dim lvItem As ListItem

        '

        ListView1.ListItems.Clear

        '

        lngSize = 0

        '

        ' به ما مقدار حافظه مورد نیاز را میدهد lngSize در اینجا تابع اسکن آی پی ها را فرا خوانی میکنیم و مقدار برگشتی آن یعنی

        '  این مقدار بما کمک میکند که بر اساس آن حافظه در اختیار بگیریم

        ' Call the GetTcpTable just to get the buffer size into the lngSize variable

        lngRetVal = GetTcpTable(ByVal 0&, lngSize, 0)

        ' آیا با خطا روبروشده ایم

        If lngRetVal = ERROR_NOT_SUPPORTED Then

            '

            'This API works only on Win 98//2000 and NT4 with SP4

            MsgBox "IP Helper is not supported by this system."

            Exit Sub

            '

        End If

        '

        ' در اختیار گیری حافظه

        ReDim arrBuffer(0 To lngSize - 1) As Byte

        '

        ' فراخوانی تابع مجدد ولی اینبار دریافت مقدار مورد نیاز

        lngRetVal = GetTcpTable(arrBuffer(0), lngSize, 0)

        ' آیا با خطا روبروشده ایم نه پس

        If lngRetVal = ERROR_SUCCESS Then

            '

            ' چهار بایت نخست تعداد سطرهای برگشتی را مشخص میکند

            'The first 4 bytes contain the quantity of the table rows

            'Get that value to the lngRows variable

            CopyMemory lngRows, arrBuffer(0), 4

            '

            For i = 1 To lngRows

                ' هر سطر را در ساختار مربوط به آن کپی میکنیم

                'Copy the table row data to the TcpTableRow structure

                CopyMemory TcpTableRow, arrBuffer(4 + (i - 1) * Len(TcpTableRow)), Len(TcpTableRow)

                ' این قسمت مربوط به چک باکس روی فرم است

                If Not ((Check1.Value = vbChecked) And  ـ

    (GetIpFromLong(TcpTableRow.dwLocalAddr) = "0.0.0.0" Or  ـGetIpFromLong(TcpTableRow.dwLocalAddr) = "127.0.0.1")) Then

                    ' وحالا به لیست ویو مقادیر را اضافه میکنیم

                    With TcpTableRow

                        Set lvItem = ListView1.ListItems.Add(, , GetIpFromLong(.dwLocalAddr))

                        lvItem.SubItems(1) = GetTcpPortNumber(.dwLocalPort)

                        lvItem.SubItems(2) = GetIpFromLong(.dwRemoteAddr)

                        lvItem.SubItems(3) = GetTcpPortNumber(.dwRemotePort)

                        lvItem.SubItems(4) = GetState(.dwState)

                    End With

                    '

                End If

                '

            Next i

            '

        End If

        '

    End Sub

    مرحله پایانی نیز در آن لود فرم مقدار زیر را بنویسید

    Private Sub Form_Unload(Cancel As Integer)

        Unload Me

    End Sub

    حالا با اجرای برنامه همه آی پی های مرتبط با پورتها نمایش داده میشود

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

    راستش را بخواهید به هیچ دردی

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

    نمونه هایی از کاربردهای این نرم افزار به شرح زیر است

    ü     فهمیدن لحظه ای برقراری یک ارتباط ناخواسته (مثلا هکری به شما وصل شده باشد)

    ü     نوشتن برنامه فایروال برای خودتان تا از ارتباط میان پورتها خاص و یا آی پی های خاص با کامپیوتر خود جلوگیری کنید

    ü     و کاربردهایی دیگر که شاید شما بتوانید از آنها استفاده کنید

     

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد