خلاصه درس: در این درس یک 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 انجام میدهد. همانطوری که از نامش پیداست، برای ویندوز و بهصورت خط فرمان عمل میکند.
داونلود فایلاجرایی ( acw_spscan.exe )
داونلود فایل برنامه ( acw_spscan.cpp )
داونلود فایل هدر ( acw_sock.h )
اگر در 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 با استفاده از سوکتهاست.
if(arta_win_LoadWinsock(2,0)==-1)
arta_commandline_win_DieWithError("ERR: Cannot load WinSock!");
دو خط بالا برای لودکردن WinSock ورژن 2.0 بهکار میرود.
۲- (void arta_win_CleanWinsock(void ==>
در آخر برنامه باید WinSockی را که با دستور بالا ایجاد کردهایم، بهکمک دستور این قسمت ببندیم:
arta_win_CleanWinsock();
۳- (int arta_win_CreateTcpSocket(void ==>
این تابع یک سوکت از نوع tcp ایجاد میکند.
if((sock=arta_win_CreateTcpSocket())==-1)
arta_commandline_win_DieWithError("ERR: Cannot Create Socket!");
دو خط بالا برای ایجاد یک سوکت tcp بهکار میرود.
۴- (int arta_win_CreateUdpSocket(void ==>
این تابع یک سوکت از نوع udp ایجاد میکند.
if((sock=arta_win_CreateUdpSocket())==-1)
arta_commandline_win_DieWithError("ERR: Cannot Create Socket!");
دو خط بالا برای ایجاد یک سوکت udp بهکار میرود.
۵- (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 در توابع بعدی بهکار میرود.
arta_win_CreateServerAddressStructure(&addr,port,IP);
۷- (* int arta_win_EstablishTcpSocketConnection(int, struct sockaddr_in ==>
این تابع sock (که از تابعهای ۳ یا ۴ بهدست آمده) و addr را (که از تابع ۶ حاصل شده) میگیرد و یک ارتباط واقعی tcp تشکیل میدهد. اگر ارتباط بهوجود آمد، پورت باز است وگرنه بسته است.
if(arta_win_EstablishTcpSocketConnection(sock, &addr)==-1){
....
}
۸- (* int arta_win_EstablishUdpSocketConnection(int, struct sockaddr_in ==>
این تابع sock (که از تابعهای ۳ یا ۴ بهدست آمده) و addr را (که از تابع ۶ حاصل شده) میگیرد و یک ارتباط واقعی udp تشکیل میدهد. اگر ارتباط بهوجود آمد، پورت باز است وگرنه بسته است.
if(arta_win_EstablishUdpSocketConnection(sock, &addr)==-1){
....
}
حالا یک توضیح کلی میدم:
اولین سطرهای برنامه را بررسی میکنم
/* An ArtaWill Production - copyright(c) ArtaWill.com */
/* Programmed by: Araz Samadi - Ali1000 Hacker */
/* 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 لود میکند.
حالا ادامه:
if(tcp_udp_both!=2){
puts(">TCP ");
for(port=startport;port<=endport;port++){
printf(" [%s] TCP %5d : Testing... ",IP,port);
if((sock=arta_win_CreateTcpSocket())==-1)
arta_commandline_win_DieWithError("ERR: Cannot Crea....");
arta_win_CreateServerAddressStructure(&addr,port,IP);
if(arta_win_EstablishTcpSocketConnection(sock, &addr)==-1){
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b........");
}
else{
printf("\b\b\b\b\b\b\b\b\b\b\b");
printf("OPEN \n");
}
arta_win_CloseSocket(sock);
}
}
اگر قرار باشد که tcp چک شود، این خطوط اجرا میشوند. در این سطرها یک اتصال tcp خاص باید ایجاد شود و اگر این عمل موفق بود، آن پورت باز است.
حالا ادامه برنامه:
if(tcp_udp_both!=1){
puts(">UDP ");
for(port=startport;port<=endport;port++){
printf(" [%s] UDP %5d : Testing... ",IP,port);
if((sock=arta_win_CreateUdpSocket())==-1)
arta_commandline_win_DieWithError("ERR: Cannot Cre....!");
arta_win_CreateServerAddressStructure(&addr,port,IP);
if(arta_win_EstablishUdpSocketConnection(sock, &addr)==-1){
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b.....");
}
else{
printf("\b\b\b\b\b\b\b\b\b\b\b");
printf("OPEN \n");
}
arta_win_CloseSocket(sock);
}
}
همان کارها را ولی اینبار برای udp انجام میدهد.
و حالا آخر برنامه:
puts(" \n");
arta_commandline_win_EndMessage("Simple Port Scanner");
arta_win_CloseSocket(sock);
arta_win_CleanWinsock();
exit(0);
}
در اینجا پیغام انتهایی چاپ شده و سوکت بسته میشود.
◊ یادآوری
قبلا گفتم که برای اینکه هکر خوبی بشید، زبان 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 انجام میدهد. همانطوری که از نامش پیداست، برای ویندوز و بهصورت خط فرمان عمل میکند.
داونلود فایلاجرایی ( acw_spscan.exe )
داونلود فایل برنامه ( acw_spscan.cpp )
داونلود فایل هدر ( acw_sock.h )
اگر در 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 با استفاده از سوکتهاست.
if(arta_win_LoadWinsock(2,0)==-1)
arta_commandline_win_DieWithError("ERR: Cannot load WinSock!");
دو خط بالا برای لودکردن WinSock ورژن 2.0 بهکار میرود.
۲- (void arta_win_CleanWinsock(void ==>
در آخر برنامه باید WinSockی را که با دستور بالا ایجاد کردهایم، بهکمک دستور این قسمت ببندیم:
arta_win_CleanWinsock();
۳- (int arta_win_CreateTcpSocket(void ==>
این تابع یک سوکت از نوع tcp ایجاد میکند.
if((sock=arta_win_CreateTcpSocket())==-1)
arta_commandline_win_DieWithError("ERR: Cannot Create Socket!");
دو خط بالا برای ایجاد یک سوکت tcp بهکار میرود.
۴- (int arta_win_CreateUdpSocket(void ==>
این تابع یک سوکت از نوع udp ایجاد میکند.
if((sock=arta_win_CreateUdpSocket())==-1)
arta_commandline_win_DieWithError("ERR: Cannot Create Socket!");
دو خط بالا برای ایجاد یک سوکت udp بهکار میرود.
۵- (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 در توابع بعدی بهکار میرود.
arta_win_CreateServerAddressStructure(&addr,port,IP);
۷- (* int arta_win_EstablishTcpSocketConnection(int, struct sockaddr_in ==>
این تابع sock (که از تابعهای ۳ یا ۴ بهدست آمده) و addr را (که از تابع ۶ حاصل شده) میگیرد و یک ارتباط واقعی tcp تشکیل میدهد. اگر ارتباط بهوجود آمد، پورت باز است وگرنه بسته است.
if(arta_win_EstablishTcpSocketConnection(sock, &addr)==-1){
....
}
۸- (* int arta_win_EstablishUdpSocketConnection(int, struct sockaddr_in ==>
این تابع sock (که از تابعهای ۳ یا ۴ بهدست آمده) و addr را (که از تابع ۶ حاصل شده) میگیرد و یک ارتباط واقعی udp تشکیل میدهد. اگر ارتباط بهوجود آمد، پورت باز است وگرنه بسته است.
if(arta_win_EstablishUdpSocketConnection(sock, &addr)==-1){
....
}
حالا یک توضیح کلی میدم:
اولین سطرهای برنامه را بررسی میکنم
/* An ArtaWill Production - copyright(c) ArtaWill.com */
/* Programmed by: Araz Samadi - Ali1000 Hacker */
/* This Source code and its Functions can be used - but no .... */
/* Funcions source or code can be done ! */
#include
#include
#include
#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 لود میکند.
حالا ادامه:
if(tcp_udp_both!=2){
puts(">TCP ");
for(port=startport;port<=endport;port++){
printf(" [%s] TCP %5d : Testing... ",IP,port);
if((sock=arta_win_CreateTcpSocket())==-1)
arta_commandline_win_DieWithError("ERR: Cannot Crea....");
arta_win_CreateServerAddressStructure(&addr,port,IP);
if(arta_win_EstablishTcpSocketConnection(sock, &addr)==-1){
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b........");
}
else{
printf("\b\b\b\b\b\b\b\b\b\b\b");
printf("OPEN \n");
}
arta_win_CloseSocket(sock);
}
}
اگر قرار باشد که tcp چک شود، این خطوط اجرا میشوند. در این سطرها یک اتصال tcp خاص باید ایجاد شود و اگر این عمل موفق بود، آن پورت باز است.
حالا ادامه برنامه:
if(tcp_udp_both!=1){
puts(">UDP ");
for(port=startport;port<=endport;port++){
printf(" [%s] UDP %5d : Testing... ",IP,port);
if((sock=arta_win_CreateUdpSocket())==-1)
arta_commandline_win_DieWithError("ERR: Cannot Cre....!");
arta_win_CreateServerAddressStructure(&addr,port,IP);
if(arta_win_EstablishUdpSocketConnection(sock, &addr)==-1){
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b.....");
}
else{
printf("\b\b\b\b\b\b\b\b\b\b\b");
printf("OPEN \n");
}
arta_win_CloseSocket(sock);
}
}
همان کارها را ولی اینبار برای udp انجام میدهد.
و حالا آخر برنامه:
puts(" \n");
arta_commandline_win_EndMessage("Simple Port Scanner");
arta_win_CloseSocket(sock);
arta_win_CleanWinsock();
exit(0);
}
در اینجا پیغام انتهایی چاپ شده و سوکت بسته میشود.
کوچیک ::: دوشنبه 86/7/9::: ساعت 3:0 صبح
نظرات دیگران: نظر
لیست کل یادداشت های این وبلاگ
>> بازدیدهای وبلاگ <<
بازدید امروز: 3
بازدید دیروز: 34
کل بازدید :31905
بازدید دیروز: 34
کل بازدید :31905
>>اوقات شرعی <<
>> درباره خودم <<
>>لوگوی وبلاگ من<<
>>آرشیو شده ها<<
>>جستجو در وبلاگ<<
جستجو:
>>اشتراک در خبرنامه<<
>>تبلیغات<<