آموزش برنامه نویسی در زبانهای رایج مثل :asp و asp.net و php و html و
C و C++ و javascript و visualBasic و delphi و . . .
سه شنبه 16 شهريور 1389
آموزش هک ( جلسه ي ششم
- حرفه اي )
WWW.PRDEV.COM - Iranian Programming Developers
درس شماره 7
- خلاصه درس: در اين درس يک Port Scanner ساده به اسم
acw_spscan به زبان C مینويسيم. درک مطالب اين درس نياز به آشنايی با زبان
برنامهنويسی C دارد.
◊ يادآوری
قبلا گفتم که برای اينکه هکر خوبی بشيد، زبان C را
بايد ياد بگيريد. امروز اولين برنامه اينترنتی خود را به زبان C شروع
میکنيم.برنامهای که امروز مینويسيم، يک پورت اسکنر ساده (Simple Port Scanner)
است که acw_spscan.exe نام دارد. acw يعنی Artawill Commandline Windows و spscan
يعنی Simple Port Scanner. من سورس اين برنامه را با Borland C++ 5.02 کامپايل
کردم ولی فکر کنم روی هر نوع کامپايلر C ويندوز کار کند.
يک سری نکات در مورد هر برنامهای که با C برای ويندوز خواهم نوشت هست که فقط
امروز میگم و بعدا ديگه اشاره نخواهم کرد.
۱- هر برنامهای که من مینويسم، شامل دو فايل است که بايد داونلود کنيد: فايل
اصلی که پسوند C يا CPP دارد و يک فايل به يکی از نامهای acw_sock.h يا agw_sock.h
يا acu_sock.h ويا axu_sock.h که با توجه به نوع سيستمعامل (ويندوز يا يونيکس) و
نوع ظاهر برنامه (خط فرمان يا گرافيکی) يکی از اين چهارتا خواهد بود. اگر برنامه
برای ويندوز نوشته شده است، بايد قبل از کامپايل نهايی فايل WS2_32.LIB را هم به
پروژه اضافه کنيد.
۲- هر بار که برنامه جديدی خواهم نوشت فايلی که پسوند h دارد، کامل و کاملتر
میشود، پس هر وقت يک فايل جديد C يا CPP داونلود میکنيد، فايل h مربوطه را هم
داونلود کنيد.
۳- کامپايلر مورد استفاده در برنامههای ويندوز Borland C++ 5.02 است. اگر از
کامپايلر ديگری استفاده میکنيد، ممکن است لازم باشد که تغييراتی اعمال کنيد.
۴- سورس تمام توابع و برنامهها مشمول کپی رايت است ولی استفاده از توابع در
برنامههايتان در صورت عدم اعمال تغييرات در سورس بلامانع است. - اينههههههه !
◊ درباره
برنامه Artawill Command-prompt Windows - Simple Prot Scanner = acw_spscan
برنامه acw_spscan.exe عمل پورت اسکنينگ را به صورت
tcp و udp انجام میدهد. همانطوری که از نامش پيداست، برای ويندوز و بهصورت خط
فرمان عمل میکند.
اگر در command prompt تايپ کنيد: acw_spscan ،خطوط زير چاپ میشود:
Artawill Command-line Windows SimplePortScanner (acw_spscan.exe) v1.0
Programmed by Araz Samadi, ArtaWill.com
Usage: acw_spscan []
بنابراين مثلا اگر بخواهم سايت پی آر دو را (که ip
آن 63.148.227.65 است) برای پورتهای ۲۰ تا ۳۰ به صورت tcp اسکن کنم، بايد بنويسم:
acw_spscan 63.148.227.65 20 30 tcp
و جواب میشنوم:
Artawill Command-line Windows SimplePortScanner (acw_spscan.exe) v1.0
Programmed by Araz Samadi, ArtaWill.com
>TCP
[63.148.227.65] TCP 21 : OPEN
[63.148.227.65] TCP 25 : OPEN
Simple Port Scanner End.
که نشان میدهد، پورتهای ۲۱ و ۲۵ باز است.
◊ بررسی
سورس برنامه
من برای راحتی کار برنامهنويسی شبکه، يک سری تابع
تعريف کرده و آنها را در فايل acw_sock.h قرار دادهام که در برنامه اصلی آن را
include میکنم. حال به بررسی توابع مورد استفاده در برنامه امروز میپردازم ( اگر
خواهان اطلاعات بيشتری هستيد، سورس اين توابع را از فايل acw_sock.h بخوانيد ):
۱- (int arta_win_LoadWinsock(char, char ==>
در برنامهنويسی ويندوز قبل از استفاده از سوکت(socket)، بايد WinSock را لود کرد
که من اين کار را با اين تابع انجام میدهم. اگر بپرسيد سوکت چيست، میگويم سوکت
ارتباطی است از نوع TCP/IP که از پورت خاصی از يک کامپيوتر به سوی يک پورت خاص از
يک کامپيوتر ديگر برای رد و بدل کردن دادهها ايجاد میشود. کل برنامهنويسی شبکه
به کمک C با استفاده از سوکتهاست.
۵- (void arta_win_CloseSocket(int ==>
اين تابع، سوکتی را که با يکی از دو دستور بالا ايجاد کردهايم، میبندد.
arta_win_CloseSocket(sock);
۶- void arta_win_CreateServerAddressStructure
(* struct sockaddr_in *, unsigned short, char ) ==>
اين تابع اطلاعات لازم برای برقراری اتصال را مانند IP, Port میگيرد و در يک
structure مخصوص از نوع sockaddr_in قرار میدهد. اين structure در توابع بعدی
بهکار میرود.
۷- (* int arta_win_EstablishTcpSocketConnection(int,
struct sockaddr_in ==>
اين تابع sock (که از تابعهای ۳ يا ۴ بهدست آمده) و addr را (که از تابع ۶ حاصل
شده) میگيرد و يک ارتباط واقعی tcp تشکيل میدهد. اگر ارتباط بهوجود آمد، پورت
باز است وگرنه بسته است.
۸- (* int arta_win_EstablishUdpSocketConnection(int,
struct sockaddr_in ==>
اين تابع sock (که از تابعهای ۳ يا ۴ بهدست آمده) و addr را (که از تابع ۶ حاصل
شده) میگيرد و يک ارتباط واقعی udp تشکيل میدهد. اگر ارتباط بهوجود آمد، پورت
باز است وگرنه بسته است.
/* An ArtaWill Production - copyright(c) ArtaWill.com */
/* Programmed by: M.E */
/* This Source code and its Functions can be used - but no .... */
/* Funcions source or code can be done ! */
#include /* for printf(), fprintf() */
#include /* for exit() */
#include /* for strings */
#include "acw_sock.h"
void main(int argc, char *argv[])
{
struct sockaddr_in addr;
char *IP;
int sock;
int port;
int startport, endport;
int tcp_udp_both=1;
arta_commandline_win_StartMessage("SimplePortScanner ......");
if ((argc != 4) && (argc != 5)) /* Test for correct ...... */
{
arta_commandline_win_DieWithError("Usage: acw_spscan []\n");
exit(1);
}
IP = argv[1];
startport = atoi(argv[2]);
endport = atoi(argv[3]);
if(argc==5){
if(stricmp(argv[4],"udp")==0){tcp_udp_both=2;}
else if (stricmp(argv[4],"both")==0){tcp_udp_both=3;}
}
if(arta_win_LoadWinsock(2,0)==-1)
arta_commandline_win_DieWithError("ERR: Cannot load WinSock!");
اوايل برنامه يهسری توضيحات
بعدش يک سری هدر (header) را include کردهام از جمله acw_sock.h را
بعدش main شروع میشود و يک سری تعريف متغير داريم که به نوع اين متغير ها دقت
کنيد.
بعد از روی ورودی خط فرمان، متغيرها ست میشوند.
دو سطر آخر هم يک WinSock لود میکند.