/ در اشتراک رایگان, سورس ویژوالبیسیک, ویژوالبیسیک / توسط
آخرین زمان ویرایش:

مجموعه سورس کدهای ویژوالبیسیک ۶ قسمت ۲۲

جهت مطالعه و دسترسی به سورس ها به ادامه مطلب مراجعه نمائید

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

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

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

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

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

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

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

همین موضوع نیز در کامپیوتر رعایت میشود اما با کمی تفاوت .
دو کامپیوتر برای برقراری ارتباط باید دو خصیصه را در نظر داشته باشند

IP
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
۱
MIB_TCP_STATE_LISTEN
۲
MIB_TCP_STATE_SYN_SENT
۳
MIB_TCP_STATE_SYN_RCVD
۴
MIB_TCP_STATE_ESTAB
۵
MIB_TCP_STATE_FIN_WAIT1
۶
MIB_TCP_STATE_FIN_WAIT2
۷
MIB_TCP_STATE_CLOSE_WAIT
۸
MIB_TCP_STATE_CLOSING
۹
MIB_TCP_STATE_LAST_ACK
۱۰
MIB_TCP_STATE_TIME_WAIT
۱۱
MIB_TCP_STATE_DELETE_TCB
۱۲

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

dwRemotePort شماره پورت هاست را میدهد

فرم مورد نیاز :

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

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

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

Ip Local
Port Local
Ip Host
Port Host

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

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

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

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 در اینجا تابع اسکن آی پی ها را فرا خوانی میکنیم و مقدار برگشتی آن یعنی

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

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

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

If lngRetVal = ERROR_NOT_SUPPORTED Then

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

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

CopyMemory lngRows, arrBuffer(0), 4

For i = 1 To lngRows

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

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

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

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

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

نوشته های مشابه

مجموعه سورس کدهای ویژوالبیسیک ۶ قسمت ۲۱

جهت مطالعه و دسترسی به سورس ها به ادامه مطلب مراجعه نمائید (بیشتر…)

آموزش PHP (پی اچ پی) – قسمت بیستم

در ادامه مطلب همراه ما باشید (بیشتر…)

 کانال تلگرام داده باران شارژ آنلاین

نظری بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *