پورت اسکنر سی شارپ (گرافیکی) 2 :: V i R u s Ʒ²

V i R u s Ʒ²

هک و امنیت

V i R u s Ʒ²

هک و امنیت

Virus 32

💢 دوستانم بی دفاع و دشمنانم بی جواب نخواهند ماند 💢

-->
آخرین نظرات
  • ۶ ارديبهشت ۰۳، ۱۶:۱۵ - hidden
    test

سلام مجدد :) دیگه چرت و پرت نمیگم اینجا، چون این پست خودش به اندازه کافی طولانی هست دیگه کاسه داغ تر از آش نمیشم :/ خب همونطور که میدونید توو  پست قبل طرز طراحی دیزاین رو گفتیم و توو این پست میخوایم کد پورت اسکنر گرافیکی مون رو بنویسیم...  


اول از همه که میدونید نیاز به کتابخونه داریم تا به شبکه اتصال داشته باشیم:

using System.Net.Sockets;
using System.Threading;

خب حالا بدون مقدمه متغیر های زیر رو با مقادیرشون تعریف کنید:

bool bScanning = false;
string cCurrIP = "127.0.0.1";
string cEndIP = "127.0.0.1";
Thread[] ScanThread;
int nStartPort = 0, nEndPort = 1000, nCurrPort = 0, nThreadCount = 100, nTimeOut = 150;
private delegate void SetTextCallback(string text);


دیگه به بزرگی خودتون ببخشید چون اگه توضیح بدم پست خیلی خیلی طولانی میشه و همچنین تعداد کاراکترهای این پست بیشتر از حد مجاز میشه، هرجا لازم به توضیح بود توو کامنت بپرسین بهتون جواب میدم.

خب حالا پشت سر هم متد های زیر رو تعریف میکنیم، اول متد اسکن آیپی:
private void ScanIP(string tCurrip)
{
nCurrPort = nStartPort;
nThreadCount = Convert.ToInt32(textBox5.Text);
ScanThread = new Thread[nThreadCount];
for (int i = 0; i <= ScanThread.Length - 1; i++)
{
ScanThread[i] = new Thread(new ThreadStart(ScanPorts));
ScanThread[i].Name = "Thread " + i;
ScanThread[i].IsBackground = true;
ScanThread[i].Start();
Text = string.Concat(new object[]
{
"Threads: ",
i + 1,
" | Scanning IP: ",
tCurrip,
" | Start Port: ",
textBox2.Text,
" | End Port: ",
textBox3.Text
});
}
Thread.Sleep(200);
}

حالا بعد از اون متد اسکن پورت رو باید تعریف کنیم:
private void ScanPorts()
{
do
{
nCurrPort++;
int num = nCurrPort;
try
{
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(cCurrIP, num);
Thread.Sleep(nTimeOut);
if (tcpClient.Connected)
{
WriteToList(cCurrIP + ":" + num);
WriteToResults("1");
tcpClient.Close();
}
else
{
WriteToResults("0");
}
}
catch
{
WriteToResults("0");
}
finally
{
progressBarInc("");
}
}
while (nCurrPort < nEndPort);
nThreadCount--;
if (nThreadCount == 1)
{
cCurrIP = GetNextIP(cCurrIP);
WriteToResults("2");
Thread.Sleep(500);
if (cCurrIP != GetNextIP(cEndIP))
{
progressBarInc("reset");
Form1.SetTextCallback method = new Form1.SetTextCallback(ScanIP);
base.Invoke(method, new object[]{cCurrIP});
}
else
{
progressBarInc("");
bScanning = false;
MessageBox.Show("Scan Completed Successfully.", "Scan Results");
}
}
}

متد زیر هم تعریف کنید که توو این متد ما از آرایه استفاده کردیم.
اگه نمیدونید آرایه چیه حق دارین چون تاحالا فکر نکنم توو پستی ازش صحبت کرده باشیم ولی بچه های برنامه نویس و رشته کامپیوتر خوب میدونن، حتی توو زبان های دیگه مثل ++C هم داریم و اینکه توضیح آرایه رو اینجا نمیتونم بگم چون گفتم تعداد کارکتر این پست محدوده ولی خلاصه بهتون بگم که ما به جای اینکه بیایم هی از متغیر های با نام مختلف استفاده کنیم به جاش از آرایه استفاده می کنیم، حالا توو پست های بعدی توضیحات بیشتری بهتون میدم
private string GetNextIP(string cCurrentIP)
{
string[] array = cCurrentIP.Split(new char[]{'.'});
string result;
if (cCurrentIP == "255.255.255.255")
{
result = "0.0.0.0";
}
else
{
int[] array2 = new int[4];
for (int i = 0; i < array2.Length; i++)
{
array2[i] = Convert.ToInt32(array[i]);
}
string text;
if (array2[3] >= 255)
{
array2[2]++;
text = Convert.ToString(string.Concat(new object[]
{
array2[0],
".",
array2[1],
".",
array2[2],
".1"
}));
}
else
{
array2[3]++;
text = Convert.ToString(string.Concat(new object[]
{
array2[0],
".",
array2[1],
".",
array2[2],
".",
array2[3]
}));
}
if (array2[2] >= 256)
{
array2[1]++;
text = Convert.ToString(string.Concat(new object[]
{
array2[0],
".",
array2[1],
".0.1"
}));
}
if (array2[1] >= 256)
{
array2[0]++;
text = Convert.ToString(array2[0] + ".0.0.1");
}
result = text;
}
return result;
}
public void WriteToList(string sText)
{
Thread.Sleep(100);
if (listView1.InvokeRequired)
{
Form1.SetTextCallback method = new Form1.SetTextCallback(SetText);
base.Invoke(method, new object[]{sText});
}
else
{
SetText(sText);
}
}
 
متد زیر رو هم تعریف کنید تا بتونیم با استفاده ای این متد نتایج رو وارد لیست ویو کنیم:
private void SetText(string sText)
{
string[] array = sText.Split(new char[]{':'});
listView1.BeginUpdate();
ListViewItem listViewItem = new ListViewItem();
listViewItem.Text = array[0];
ListViewItem.ListViewSubItem listViewSubItem = new ListViewItem.ListViewSubItem();
listViewSubItem.Text = array[1];
listViewItem.SubItems.Add(listViewSubItem);
listViewSubItem = new ListViewItem.ListViewSubItem();
listViewSubItem.Text = "Open";
listViewItem.SubItems.Add(listViewSubItem);
listView1.Items.Add(listViewItem);
listView1.EndUpdate();
}

متد‌ زیر هم که برای اینه بفهمیم یه پورت بازه یا نه:
private void WriteToResults(string sText)
{
Thread.Sleep(100);
Form1.SetTextCallback method = new Form1.SetTextCallback(SetResult);
base.Invoke(method, new object[]{sText});
}

خب رسیدیم به متدی که شاید یکم بعضیا متوجه نشن مجبورم توضیح بدم :( توو متد زیر از ساختار سوویچ کیس استفاده کردیم، Switch Case هم مثل آرایه توو برنامه نویسی کاربرد داره چون تاحالا توو وب ندیدین مجبورم یه توضیح مختصری بدم، ساختار سوییچ یا ساختار چند انتخابی مثل همون if های توو در توو هه که با توجه به متغیری که مقدار ثابت دارن به ما اجازه چند انتخاب رو میده...
متد زیر هم که بعد از این که فهمیدیم پورت بازه یا بسته، حاصل رو توو لیبل به ما نشون میده.
private void SetResult(string sText)
{
switch (Convert.ToInt32(sText))
{
case 0:
{
int num = Convert.ToInt32(label10.Text);
num++;
label10.Text = Convert.ToString(num);
break;
}
case 1:
{
int num = Convert.ToInt32(label9.Text);
num++;
label9.Text = Convert.ToString(num);
break;
}
default:
{
int num = Convert.ToInt32(label11.Text);
num++;
label11.Text = Convert.ToString(num);
break;
}
}
}

متد زیر هم که معلومه برای فرآیند پروگرس باره ProgressBar و مراحل اسکن رو در قالب اون به ما نشون میده:
public void progressBarInc(string sText)
{
Thread.Sleep(100);
try
{
if (progressBar1.InvokeRequired)
{
Form1.SetTextCallback method = new Form1.SetTextCallback(SetPB);
if (sText != "reset")
{
base.Invoke(method, new object[]
{
"invoke"
});
}
else
{
base.Invoke(method, new object[]{"reset"});
}
}
else
{
progressBar1.Value++;
}
}
catch
{
}
}


متد زیر هم همینطور وضعیت پروگرس بار رو تعیین میکنیم:
private void SetPB(string sText)
{
if (sText == "reset")
{
progressBar1.Value = 0;
}
else
{
progressBar1.Value++;
}
if (progressBar1.Value == progressBar1.Maximum)
{
progressBar1.Value = progressBar1.Maximum - 1;
button1.Text = "Start Scan";
}
}


کد های زیر هم که معلومه مربوط به باتن Button1 هه که باید برای باتنمون تعریف بشه:
if (!this.bScanning)
{
bScanning = true;
button1.Text = "Stop Scan";
cCurrIP = textBox1.Text;
nStartPort = Convert.ToInt32(textBox2.Text);
nEndPort = Convert.ToInt32(textBox3.Text);
nTimeOut = Convert.ToInt32(textBox4.Text);
progressBar1.Minimum = 0;
progressBar1.Maximum = nEndPort - nStartPort + 1;
progressBar1.Value = 0;
label9.Text = label10.Text = label11.Text = "0";
listView1.Items.Clear();
ScanIP(cCurrIP);
}
else
{
int num = this.ScanThread.Length - 1;
DialogResult dialogResult = MessageBox.Show("Are you sure you want to cancel the scan?", "Cancel Scanning...", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
if (dialogResult == DialogResult.Yes)
{
for (int i = 0; i <= num; i++)
{
if (ScanThread[i].IsAlive)
{
ScanThread[i].Abort();
Text = "Active Threads:" + (nThreadCount - i) + " Virus32 Port Scanner";
}
}
bScanning = false;
Text = "Port Scanner";
button1.Text = "Start Scan";
MessageBox.Show("Scan progress aborted!", "Scan Progress Canceled");
}
}

با عرض معذرت میدونم این پست خیلی کدها و ساختار و متد های متنوعی داشت که خیلیاش شاید برای شما تازگی داشته باشه و اینکه نشد توضیح بدم چون تعداد کاراکتر پست ها محدوده و به اندازه کافی این پست طولانی شد و بیشتر از این جواب نمیده، اگرم جایی مفهوم نبود یا مشکلی بود توو کامنت ها بگین نوکرتونم هستم بهتون جواب میدم.  دیگه فک کنم دِین‌م رو به سی شارپ ادا کرده باشم D:
امیدوارم که از این پست لذت کافی رو برده باشین و در راه خیر ازش بهره ببرید ;)      موفق باشید، با تچکر ;)

 ایران هم که هنوز پرچمش بالاست، باور ندارین؟ اون بالا رو نگاه کنین کنار تیتر وب ;)  

نظر (۲)

خیلی خوبه که اینهمه شور و اشتیاق داری

عالی عزیزجان

موفق باشی بچه محل

Virus32 32 Attacker ‌ :
سلام محمد جون زحمت دکتی، تی فدا ♡

خییییییییلی عالی بود اتکر عزیز

Virus32 32 Attacker ‌ :
فدات مسترجان خودت عالی♡
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی