PDA

View Full Version : port اسکنر - تشخیص وضعیت پورت



xm0r741
شنبه 30 بهمن 1395, 17:22 عصر
با سلام دوستان

من یه فرم دارم توش 8تا دکمه داره و هرکدام از دکمه ها یه فرمو باز میکنه که دارای محتویات خود هستند

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

حالا من این کنسولو نمیتونم از گزینه add new itemsاضافه کنم ولی میتونم توی add new project

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

ممنون

xm0r741
شنبه 30 بهمن 1395, 23:07 عصر
با سلام دوستان

من یه فرم دارم توش 8تا دکمه داره و هرکدام از دکمه ها یه فرمو باز میکنه که دارای محتویات خود هستند

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

حالا من این کنسولو نمیتونم از گزینه add new itemsاضافه کنم ولی میتونم توی add new project

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

ممنون

سلام دوستان
من فهمیدم با این دستور میشه کنسول بالا بیاد

private void button1_Click(object sender, EventArgs e)
{
AllocConsole();
}

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AllocConsole();
ممنون میشم بگید کد های کنسولو از کجاش شروع کنم تا اجرا شن

Mahmoud.Afrad
یک شنبه 01 اسفند 1395, 00:35 صبح
چند راه حل وجود داره:
1- کدها رو در یک نوع پروژه(ویندوز اپلیکیشن) بنویسید. اگر نمیتونید کدهای کنسول رو تبدیل کنید، کدهاتون رو قرار بدید تا دوستان در تبدیلش کمک کنند.
2- در پروژه ای که اصل هست، پروژه دیگر رو Add Reference کنید و ازش استفاده کنید.(در اینصورت سولوشن شما حداقل دارای دو پروژه خواهد بود)
3- دو پروژه رو یکی کنید(کنسول اپلیکیشن). به اینصورت که در پروژه کنسول، فرم جدید یا فرمی که از قبل ایجاد کردید رو اضافه و کدنویسی کنید.
از بین سه گزینه بالا، گزینه اول رو پیشنهاد میکنم.
4- اما کار بهتر این هست که کدی که منطق و محاسبات برنامه تون هست و ربطی به کنسول و فرم نداره را در یک پروژه از نوع Class Library قرار بدید. در اینصورت میتونید به راحتی در هر نوع پروژه ای اعم از ویندوزفرم، کنسول، وب اپلیکیشن و ... استفاده کنید.

xm0r741
یک شنبه 01 اسفند 1395, 02:20 صبح
با سلام
و ممنون که پاسخ دادین
در قالب فرم نوشتم سرعت ترد خیلی کمه و هنگ میکنه راستیتش فول پورت اسکنر هس و از پورت 1 تا 990

اینم کد ویندوزیمه اما تو همین 20تا پورت میمونه و هنگ میکنه

private void button1_Click(object sender, EventArgs e)
{
string Target = textTarget.Text;
short[] porty = new short[] {20,21,22,23,25,53,80,137,138,139,143,161,162,179, 389,443,636,989,990 };
foreach(short i in porty)
{
try
{
TcpClient kilent = new TcpClient(Target, i);
listBox1.Items.Add("Port" + Convert.ToString(i) + "Is Open");
}
catch
{
listBox1.Items.Add("Port" + Convert.ToString(i) + "Is Close");
}
}
}
اما تو کنسول توی کسزی از ثانیه جواب میده
ممنون میشم از اساتید کمک کنن خیلی لنک موندم

Mahmoud.Afrad
یک شنبه 01 اسفند 1395, 16:37 عصر
از تردها کمک بگیرید تا UI فریز نشه. به صورت موازی هم میتونید استفاده کنید.
string Target = textTarget.Text;
List<int> ports = new List<int>(new[] {20, 21, 22, 23, 25, 53, 80, 137, 138, 139, 143, 161, 162, 179, 389, 443, 636, 989, 990});
System.Threading.Tasks.Parallel.ForEach(ports, i =>
{
try
{
using (TcpClient client = new TcpClient(Target, i))
{
listBox1.Invoke(new MethodInvoker(() => { listBox1.Items.Add("Port " + i + " Is Open"); }));
}
}
catch (SocketException se)
{
listBox1.Invoke(new MethodInvoker(() => { listBox1.Items.Add("Port " + i + " Is Close"); }));
}
});

اگر از دات نت 3.5 استفاده میکنید ، بسته زیر رو به رفرنس های پروژه اضافه کنید
https://www.nuget.org/packages/TaskParallelLibrary

xm0r741
یک شنبه 01 اسفند 1395, 18:56 عصر
با سلام دوست عزیز و خیلی خیلی ممنون از کمکت
اما باز مشکل فریز دارم


private void button1_Click(object sender, EventArgs e)
{
string Target = textTarget.Text;
short[] porty = new short[] {20,21,22,23,25,53,80,137,138,139,143,161,162,179, 389,443,636,989,990 };
foreach(short i in porty)
{
try
{
TcpClient kilent = new TcpClient(Target, i);
listBox1.Items.Add("Port" + Convert.ToString(i) + "Is Open");
}
catch
{
listBox1.Items.Add("Port" + Convert.ToString(i) + "Is Close");
}
}

}

private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
}
}

این کل کدی هس که من استفاده میکنم

واین عکس او صفحه
144532

Mahmoud.Afrad
یک شنبه 01 اسفند 1395, 19:53 عصر
شما در حد copy & paste هم اگر عمل کنید با کدی که بنده گذاشتم به جواب خواهید رسید.

xm0r741
یک شنبه 01 اسفند 1395, 19:58 عصر
با سلام
کردم باز فریز میشد اما بعد از 2 مین تموم میکنه
راستی از دات نت 4.5.2
استفاده میکنم به خاطر رفرنسها
مهند س ممنوندمت گرم حل شد