یه روش کامل و کلی دیگه واسه هک کردن.

تقسیم بندی آدرس‌های ip

آدرس‌های ip به ۵ کلاس تقسیم‌بندی می‌شوند که A تا E نام‌ دارند ولی از این بین سه کلاس اول (یعنی C,B,A) کاربرد عملی دارند که آنها را شرح می‌دهیم:

۱- کلاس A: اگر ip را به‌صورت xxx.yyy.yyy.yyy در نظر بگیرید، این کلاس تمام ipهایی را شامل می‌شود که xxx بین ۱ تا ۱۲۶ است. این کلاس ویژه backbone های بزرگ اینترنتی است و در هنگام ثبت domain برای گرفتن ip از آنها استفاده می‌شود. بنابراین اکثر سایت‌ها چنین ipهایی دارند. این کلاس را 8/ هم می‌گویند.

۲- کلاس B: این کلاس تمام ipهایی را شامل می‌شود که xxx بین ۱۲۸ و ۱۹۱ است. این کلاس هم از جمله کلاس‌های پرکاربرد است. این کلاس را 16/ هم می‌گویند.

۳- کلاس C: این این کلاس تمام ipهای را شامل می‌شود که xxx بین ۱۹۲ و ۲۲۳ است. این کلاس معمولا به ISP هایی که خدمات dial-up ارائه می‌دهند، تعلق می‌گیرد (این جمله چندان مستند نیست.). بنابراین اگر به‌صورت dial-up به اینترنت متصل شوید، چنین ip می‌گیرید. این کلاس را 24/ هم می‌گویند.

سوالی که پیش می‌آید این است که xxx چرا نه در کلاس A و نه در B، عدد ۱۲۷ را شامل نمی‌شود؟ جواب این‌ است که ۱۲۷ برای کامپیوتر خودمان رزرو شده است. مثلا 127.0.0.1 معمولا یعنی localhost یعنی خودمان.

به‌دست آوردن ip خودتان بعد از اتصال به اینترنت

برای این‌کار راههای متفاوتی وجود دارد:

۱- راحت‌ترین راه استفاده از دستور ipconfig است. من با تایپ کردن آن به نتایج زیر رسیدم:

Windows 2000 IP Configuration

PPP adapter neda:

Connection-specific DNS Suffix . :

IP Address. . . . . . . . . . . . : 217.66.198.116

Subnet Mask . . . . . . . . . . . : 255.255.255.255

Default Gateway . . . . . . . . . : 217.66.198.116

که آدرس ip تان را می‌توانید در سطر Ip Address ببینید. (مسئله پروکسی را فعلا نادیده بگیرید)

۲- بعد از اتصال به اینترنت حداقل یک صفحه باز کنید و بعد دستور netstat -n را در command prompt تایپ کنید. من با تایپ این دستور به نتایج زیر رسیدم:

Active Connections

Proto Local Address Foreign Address State

TCP 217.66.198.116:2469 64.58.76.177:80 ESTABLISHED

TCP 217.66.198.116:2471 66.163.175.130:80 ESTABLISHED

TCP 217.66.198.116:2473 212.73.194.143:80 ESTABLISHED

TCP 217.66.198.116:2474 212.73.194.143:80 ESTABLISHED

TCP 217.66.198.116:2476 212.73.194.136:80 SYN_SENT

ستونی که زیر عبارت Local Address قرار دارد، ip من در آن اتصال است. بنابراین ip من در آن اتصال 217.66.198.116 بوده است.

ادامه مبحث Footprinting برای سرورها

قبلا بحث را با روش پیدا کردن ip سرورها (سایت‌ها) شروع کردیم. حالا کمی در مورد whois می‌آموزیم. لازم به ذکر است که هنوز درمورد FootPrinting کلاینت‌ها صحبتی نکرده و نمی‌کنم.

Whois چیست؟

تعریف کلی برای whois نمی‌توان ارائه داد ولی فعلا منظور ما از Whois همان کسب اطلاعات در مورد یک سایت است. (قبلا با نوع خاصی از whois برای تبدیل domain به ip آشنا شده‌اید).
کاری که امروز می‌خواهم انجام دهم کسب اطلاعات در مورد یک شماره ip و یا یک domain (مثلا irib.com ) خاص است. برای کسب این اطلاعات باید به اینترنت وصل شده و به‌طریقی به یک سری سایت‌های خاص که وظیفه ثبت domain , ... را دارند متصل شده و اطلاعات را از آنها درخواست کنم. این سایت‌های خاص database (بانک‌های اطلاعاتی) ویژه این وظایف را دارند. برای کسب این اطلاعات از سایت‌ها روش‌های زیر را می‌توان به‌کار برد:

۱- اگر از طریق سیستم عامل یونیکس یا لینوکس به اینترنت وصل شده‌اید، دستوری به اسم whois در آنها وجود دارد. و یا می‌توانید از نرم‌افزارهای خاصی که برای این سیستم‌عامل‌ها وجود دارد (مثل Xwhois ) استفاده کنید. ولی فعلا بحث روی ویندوز است و این دستور در ویندوز وجود ندارد.

۲- برای whois کردن در ویندوز نرم‌افزارهای زیادی وجود دارد (که به زودی نوشتن یک whois متوسط را در زبان C یاد خواهم داد.) از مشهورترین این نرم‌افزارها Netscan tools و SamSpade است. ولی از اینها هم فعلا صرف نظر می‌کنم تا شما بیشتر با جزئیات این‌ کار آشنا شوید.

۳- روشی که ما در این جلسه به کار می‌بریم، استفاده از سایت‌هایی است که این جستجو را برای ما انجام می‌دهند. بحث را شروع می‌کنم:

datebase های whois در چه سایت‌هایی وجود دارد؟

تعداد زیادی از سایت‌ها این داده‌ها را دارند که مشهورترین‌ها عبارتند از:

whois.internic.net (The InterNIC)

whois.onlinenic.com (The OnLineNIC)

whois.arin.net (American Registry for Internet Numbers)

whois.ripe.net (European IP Address Allocations)

whois.apnic.net (European IP Address Allocations)

whois.nic.mil (US Military)

whois.nic.gov (US Government)

اولین سایت مشهورترین سایت ثبت domain برای org , net , com است.
توجه کنید که امروزه سایت‌های مختلفی عمل ثبت domain را انجام می‌دهند و برای اینکه در مورد یک سایت خاص (که در واقع یک domain خاص دارد) اطلاعاتی کسب کنیم باید اطلاعات مربوطه را از آن سایتی بگیریم که ثبت domain را انجام داده است و چون این کار مشکلی است به جای استفاده از خود سایت‌های بالایی، از سایت‌هایی دیگر استفاده می‌کنیم که این کار را برای ما ساده‌تر می‌کنند (خود آن سایت‌ها در نهایت اطلاعاتشان را از سایت‌های اصلی می‌گیرند و فقط یک نقش واسط دارند... لازم به‌ذکر است که ایجاد چنین صفحات وبی زیاد هم مشکل نیست.). سایت مورد علاقه من برای کسب اطلاعات سایت زیر است:

http://www.samspade.org/t/whois?a=xxxxxxxxx

که بجای xxxxxxxxx آدرس سایت و یا ip آنرا می‌نویسیم و آدرس حاصله را در مرورگر خود می‌بینیم. مثلا اگر بخواهم در مورد سایت sazin.com اطلاعاتی به‌دست بیاورم، می‌نویسم:

http://www.samspade.org/t/whois?a=sazin.com

و اطلاعات زیر به دست می‌آید:

sazin.com is registered with BULKREGISTER.COM, INC. - redirecting

to whois.bulkregister.com


whois -h whois.bulkregister.com sazin.com

The data in Bulkregister.com's WHOIS .........................(deleted)


SazinNetWork

2nd.Floor,Bldg#116,Mollasadra Ave.

Tehran, TEH 14358

IR


Domain Name: SAZIN.COM


Administrative Contact:

???????????@hotmail.com

Sazin Rasaneh Co.

4th.Floor,Bldg.339,Mirdamad Ave.

Tehran, TEH 19696

IR

Phone: +98 21 8787064

Fax: +98 21 8789841

Technical Contact:

???????????????@hotmail.com

Sazin Rasaneh Co.

4th.Floor,Bldg.339,Mirdamad Ave.

Tehran, TEH 19696

IR

Phone: +98 21 8787064

Fax: +98 21 8789841


Record updated on 2002-03-02 05:47:36

Record created on 1999-05-10

Record expires on 2007-05-10

Database last updated on 2002-09-15 08:58:02 EST


Domain servers in listed order:


DNS.SAZIN.COM 80.78.134.221

S1.SAZIN.COM 63.148.227.63

S2.SAZIN.COM 63.148.227.64

ملاحظه می‌کنید که اطلاعات زیادی در مورد این سایت را به این طریق می‌توان به‌دست آورد. اطلاعاتی درمورد آدرس ISP ، شخصی که به‌عنوان Admin کار ثبت را انجام داده است و ... البته باز هم نمی‌توان در مورد صحت و سقم آن اظهارنظر قطعی داشت.
تعدادی از مهمترین اطلاعات را در قسمت DNS Servers یا Domain servers (که در این مثال در آخر قرار دارد) می‌بینید. بعدا در مورد این آدرس‌ها توضیح خواهم داد ولی فعلا می‌گم که به کمک همین چند آدرسی که در آخر به‌دست آوردیم به کمک دستوری به نام nslookup می‌توان اطلاعات با ارزش‌تری به‌دست آورد که به‌زودی یاد می‌گیرید.

_______________________________________________________________________________________

چگونگی استفاده از nslookup


وقتی که DNS Server یک سایت را به‌دست آورده باشیم (از طریق whois )، به کمک دستور nslookup می‌توان اطلاعاتی اضافی در مورد آن سایت پیدا کرد. طریقه استفاده این دستور به صورت زیر است:
فرض کنید که من می‌خواهم از Domain Server سایت خودم (far30.com) اطلاعاتی به‌دست بیارم. اگر به این سایت whois کنم، می‌بینم که دوتا Name Server یا DNS Server دارد:

s1.sazin.com

s2.sazin.com

حالا دیگر آدرس DNS Server مربوط به far30.com را دارم و می‌توانم شروع کنم:

۱- دستور nslookup را در command prompt نوشته و اجرا می‌کنم:

C:\>nslookup

و نتایج را می‌بینم:

*** Can't find server name for address 192.168.20.3: Non-exi...

*** Can't find server name for address 192.168.20.1: Non-exi...

*** Default servers are not available

Default Server: UnKnown

Address: 192.168.20.3


>

علامت > یعنی شما می‌توانید دستورات را تایپ کنید.

۲- در جلوی علامت < دستور زیر را تایپ می‌کنیم:

> server dns_server

که به جای dns_server باید آدرس DNS Server سایت موردنظر را بنویسم. پس برای سایت far30.com می‌شود:

> server s1.sazin.com

و جواب می‌شنوم:

Default Server: s1.sazin.com

Address: 63.148.227.63

اگر در این مرحله پیغام خطا می‌گیرید، باید دوباره این دستور را تایپ کنید و نیز می‌توانید از DNS Server دومی که در whois برای far30.com به‌دست آوردیم ، استفاده کنیم.

۳- دستور زیر را تایپ کنید:

> set type=any

۴- حالا به کمک دستور زیر اطلاعات را به‌دست می‌آوریم:

> ls -d site_name .

که برای far30.com می‌شود:

>ls -d far30.com.

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

[s1.sazin.com]

far30.com. SOA s1.sazin.com admin.sazin.com.

(2002070412 3600 600 86400 3600)

far30.com. A 63.148.227.65

far30.com. NS s1.sazin.com

far30.com. NS s2.sazin.com

far30.com. MX 10 mail.far30.com

far30.com. MX 15 far30.com

ftp CNAME far30.com

mail A 63.148.227.65

www CNAME far30.com

far30.com. SOA s1.sazin.com admin.sazin.com.

(2002070412 3600 600 86400 3600)

>

بعدا در مورد کاربرد تک‌تک اینها صحبت خواهم کرد ولی بعضی از آنها همین‌طوری هم اطلاعات واضحی دارند.

۵- دستور exit را مقابل < تایپ کرده و از nslookup خارج می‌شویم.



شما برای تمرین همین کار را در مورد سایت neda.net.ir انجام دهید.

تقسیم‌بندی پورت‌ها از روی شماره آنها

۱- پورت‌های 0 تا 1023 :
مشهورترین پورت‌ها هستند و معمولا هرکدام برای یک سرویس خاص استفاده می‌شود. با تعدادی از این پورت‌ها در جلسات قبل آشنا شده‌اید.

۲- پورت‌های 1024 تا 49151 :
این سری از پورت‌ها مشخصا با هیچ‌یک از سرویس‌های اینترنتی مرتبط نیستند بلکه وقتی که با یک ابزار شبکه مانند مرورگر اینترنت(مثل Internet Explore یا Netscape Navigator )، نرم‌افزار ارسال و دریافت E-mail (مثل Outlook یا Edura )، نرم‌افزارهای FTP (مثل WS-FTP یا Cute-FTP ) کار می‌کنید، یکی از این پورت‌ها به صورت random باز شده و یک ارتباط با سرور (با توجه به‌نوع سرویس اینترنتی که می‌دهد که یکی از پورت‌های 0 تا 1023 است) برقرار شده و داده‌ها ارسال و دریافت می‌شوند. یعنی پورت شما یکی از پورت‌های این قسمت است و پورت سرور یکی از پورت‌های بالایی.این سری پورت‌ها را پورت‌های register شده هم می‌گویند.

۳- پورت‌های 49152 تا 65535 :
این سری از پورت‌ها به‌ندرت استفاده می‌شوند. کاربرد اساسی آنها برای یک سری سرویس‌های خاص اینترنتی است و یا توسط trojanها (که برای Hack کردن کامپیوتر است) است. البته خیلی از trojanهای معروف از پورت‌های ردیف ۲ هم استفاده می‌کنند و این تقسیم‌بندی‌ها همیشه برقرار نیست و به‌همین علت است که گاهی پورت‌ها را به دو‌دسته زیر 1024 و بالای 1024 تقسیم‌ می‌کنند.

◊ TCP و UDP چیست؟

مدل TCP/IP که برای ارتباط اینترنتی به‌کار می‌رود، می‌توان به لایه‌های مختلفی تقسیم‌بندی کرد که بعدا بیشتر توضیح می‌دم، اما یکی از این لایه‌ها، لایه ارتباط host2host است که خود شامل دو پروتکل است به نامهای TCP و UDP :

۱- (TCP (Transmission Control Protocol :
این پروتکل قوی‌تر و قابل اعتمادتر است و اصولا پروتکل مهمتری نسبت به UDP محسوب می‌شود. این پروتکل توانایی بازبینی بسته‌هاو کنترل خطا را هم دارد.

۲- (UDP (User Datagram Protocol :
این پروتکل برای کاهش overflow طراحی شده است و در خیلی از موارد وابسته به TCP است.

نکته مهم این است که وقتی با یک پورت خاص روی یک کامپیوتر دیگر ارتباط برقرار می‌کنیم، این ارتباط می‌تواند از نوع TCP یا UDP باشد. بنابراین وقتی می‌خواهیم یک کامپیوتر خاصی را از نظر پورت‌ها بررسی کنیم، هردو باید بررسی شود.

______________________________________________________________________________________

معمول‌ترین Scanning ها کدامند؟

دو نوع معمول Scanning وجود دارد:

۱- IP Scanning :
فرض کنید که شما یک سری IP مربوط به یک ISP خاص را دارید و می‌خواهید بدانید که در این لحظه کدام‌ها فعال (up) هستند تا فقط آنها را بررسی کنید و نه‌ همه را. این موضوع را بعدا توضیح می‌دم ( این کار معمولا موقعی پیش می‌آید که قرار است کلاینت هک کنید و مهم نیست چه کسی باشد )

۲- Port Scanning :
در این حالت ما IP یا IPهای مورد نظر را انتخاب کرده‌ایم و حالا می‌خواهیم بدانیم که کدام پورت‌ها روی آن کامپیوترها باز است. این کار به کمک نرم‌افزارهای خاصی انجام می‌شود که مبحث امروز ماست.

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

برای اینکه تعیین کنیم که یک پورت روی یک سرور باز است یا نه، معمولا باید یک TCP connect scan انجام دهیم. اول این را بگم که Port Scanning انواع مختلف دارد که فعلا ما نوع TCP connect را مدنظر داریم. این نوع اسکن سه مرحله دارد که به آن TCP's 3-way handshakeمی‌گویند:
۱- اول کامپیوتر ما به سمت سرور یک SYN packet می‌فرستد که به معنی درخواست اتصال است.
۲- اگر سرور این درخواست را قبول کند، در مرحله دوم سرور به سمت ما یک SYN/ACK packet می‌فرستد.
۳- در مرحله آخر کامپیوتر ما یک ACK packet به سمت سرور می‌فرستد.

نوع دیگری از پورت اسکن TCP SYN scan نام دارد. با توجه به اینکه معمولا اگر پورت اسکن به روش بالا (TCP connect scan) انجام دهیم، معمولا در سرور این اتصال ذخیره خواهد شد و بعدا می‌تواند ما را ردیابی کنند، به جای آن می‌توان از TCP SYN scan استفاده کرد. در این نوع اسکن، مراحل ۱ و ۲ از بالا انجام می‌شود ولی مرحله ۳ نه! اگر در مرحله ۲ به ما یک SYN/ACK برسد، آن پورت باز است و اگر یک RST/ACK برسد، یعنی بسته است.

انواع دیگری از پورت اسکنینگ هم وجود دارد مثل UDP scan, TCP Window scan, TCP ACK scan, TCP Null, TCP Xmas Tree, TCP FIN Scan

چگونه می‌توان عمل Port scanning را انجام داد؟

در تمام مطالبی که تا این مرحله گفته‌ام سعی کرده‌ام که فقط از ابزارهای موجود در ویندوز استفاده کنم و هیچ ابزار دیگری به‌کار نبرم، اما در مبحث پورت اسکنینگ چون هیچ ابزاری در ویندوز برای این‌ کار نیست، به‌ناچار باید یک سری برنامه را از اینترنت داون‌لود کنید. (توجه داشته باشید که فعلا حرفی از لینوکس نزده‌ام و سعی می‌کنم فعلا هیچ بحثی را در مورد آن مطرح نکنم)

برای Port Scanning می‌توان از ابزارهای مختلفی استفاده کرد که اکثرا برای لینوکس طراحی شده‌اند، اما مهم‌ترین پورت اسکنرها برای ویندوز عبارتند از:

۱- نرم‌افزار NMapWin v1.3.0 :
نسخه گرافیکی و مخصوص ویندوز برای nmap است (nmap در لینوکس استفاده می‌شود). nmap از کامل‌ترین ابزارهایی است که هکر‌ها استفاده می‌کنند که علاوه بر توانایی انواع پورت اسکنینگ‌ها، می‌تواند کارهای بسیاری چون تشخیص سیستم‌عامل سرور و ... را انجام دهد. این ابزار را بعدا توضیح خواهم داد ولی فعلا برای کار ما بیش‌ از حد کامله ;-)

۲- NetScanTools Pro 2000 :
این هم از بهترین‌هاست ولی چون پولی است به‌ جای داون‌لود باید در CD هایی که در بازار هست پیدایش کنید.

۳- WinScan :
برای اسکن کردن TCP (ونه UDP) می‌توانید از آن استفاده کنید. من زیاد ازش خوشم نیومد.

۴- ipEye v1.2 :
من در این درس از این نرم‌افزار استفاده خواهم کرد، برای داون‌لود آن می‌توانید به سایت http://www.ntsecurity.nu/ مراجعه کنید یا مستقیما با کلیک روی این لینک آن را داون‌لود کنید. لازم است بگویم که این نرم‌افزار فقط در ویندوز ۲۰۰۰ و xp کار می‌کند و نیز در یک بار اجرا فقط یک ip را می‌تواند تست کند. ضمنا فقط TCP را تست می‌کند.

چگونه از ipEye برای پورت اسکنینگ استفاده کنیم؟

ipEye در command prompt این نتایج ظاهر می‌شود:

ipEye 1.2 - (c) 2000-2001, Arne Vidstrom (arne.vidstrom@ntsecurity.nu)

- http://ntsecurity.nu/toolbox/ipeye/


Error: Too few parameters.


Usage:


ipEye -p [optional parameters]

ipEye -p

[optional parameters]


is one of the following:

-syn = SYN scan

-fin = FIN scan

-null = Null scan

-xmas = Xmas scan>br>

(note: FIN, Null and Xmas scans don't work against Windows systems.


[optional parameters] are selected from the following:

-sip = source IP for the scan

-sp = source port for the scan

-d = delay between scanned ports in milliseconds

(default set to 750 ms)


فرض کنید که می‌خواهیم سایت سازین را از نظر پورت‌ها از پورت ۱ تا ۲۰۰ تست کنیم. اول باید ip آن را به دست بیاوریم که می‌شود، 63.148.227.65 و حالا به کمک دستور زیر آن را بررسی می‌کنیم:

ipeye 63.148.227.65 -syn -p 1 200

دقت کنید که 63.148.227.65 عدد ip سازین، syn- یعنی SYN SCAN و p 1 200- یعنی تست از پورت ۱ تا ۲۰۰ باشد. البته پارامترهای دیگری را هم می‌شود ست کرد که فعلا به درد ما نمی‌خورد. با اجرای این دستور به نتایج زیر می‌رسیم:

ipEye 1.2 - (c) 2000-2001, Arne Vidstrom (arne.vidstrom@ntsecurity.nu)

- http://ntsecurity.nu/toolbox/ipeye/

با تایپ 1-20 [drop]

21 [open]

22 [closed or reject]

23-24 [drop]

25 [open]

26-52 [drop]

53 [open]

54-79 [drop]

80 [open]

81-109 [drop]

110 [open]

111-142 [drop]

143 [open]

144-200 [drop]

201-65535 [not scanned]

Closed یعنی کامپیوتر در آن طرف هست ولی به پورت گوش نمی‌دهد، Reject یعنی اینکه یک firewall هست که اجازه اتصال به آن پورت را نمی‌دهد، Drop یعنی اینکه یک firewall همه‌چیز را پس‌ می‌زند و یا اصلا کامپیوتری اونور نیست، Open هم که یعنی باز.
در مورد سازین می‌بینید که از بین پورت‌های ۱ تا ۲۰۰ ، پورت‌های ۲۱، ۲۵، ۵۳، ۸۰، ۱۱۰، ۱۴۳ باز است و می‌توان به‌ آنها telnet کرد. دقت کنید که تا تمام پورت‌هایی که مشخص شده، تست نشده است، هیچ نتیجه‌ای نشان داده نمی‌شود و یه‌کم صبر می‌خواد.

_____________________________________________________________________________________

یادآوری

قبلا گفتم که برای اینکه هکر خوبی بشید، زبان 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);

}

در اینجا پیغام انتهایی چاپ شده و سوکت بسته می‌شود.

نوشته شده در تاریخ سه شنبه 6 اردیبهشت 1390    | توسط: بهنام مبارکی    | طبقه بندی: hack pc and site،     | نظرات()