Домой Network Создание сканера портов: Справочник по C#

Создание сканера портов: Справочник по C#

984
0


      IP инструмент сканирования может оказаться полезным, если вы хотите проверить безопасность вашего компьютера. Открытый порт это не обязательно приглашение для хакеров, так как приложения и сервисы вашего или другого компьютера могут использовать порты для выхода в Интернет или локальную сеть. Например, для веб-сервера по умолчанию открыт 80-й порт, или на FTP-сервере — 21-й порт. Рассмотрим класс TcpClient, расположенный в пространстве имен «System.Net.Sockets» и обеспечивает простые методы для подключения, а также отправки и получения потоков данных в сети. Рассмотрим проверку открытых портов удаленного сетевого устройства.
      Создайте проект Windows Form в Microsoft Visual Studio и добавьте на главную форму следующие элементы управления:

  • backgroundWorker1 – служит для запуска процесса проверки открытых портов сетевого устройства в другом потоке;
  • textBox1 – текстовое поле для ввода сетевого адреса устройства;
  • numericUpDown1 – элемент управления для ввода стартового номера порта;
  • numericUpDown2 – элемент управления для ввода конечного номера порта;
  • listBox1 – элемент управления для вывода открытых/закрытых портов;
  • button1 – кнопка запуска процесса получения открытых/закрытых портов, заданного диапазона.

У вас получится приведенная ниже форма:

      Выберете элемент управления «numericUpDown1» и перейдите в его свойства. Найдите свойство «Maximum», выставляющее максимальное значение, которое можно выбрать в данном элементе управления и выставьте значение 25.

      Выполните такую же операцию с компонентом «numericUpDown2» и дополнительно выставьте в свойстве «Value», значение 25. Данный параметр установит это значение по умолчанию.Сделайте двойной клик по компоненту «backgroundWorker1», вы перейдете в автоматически созданный метод «backgroundWorker1_DoWork», события «DoWork». Это событие возникает при вызове метода «RunWorkerAsync» и код размещенный в данном методе выполняется в отдельном потоке, что позволяет предотвратить зависание приложения, при долгом выполнении каких либо действий. Добавьте приведенный ниже код в тело данного метода.

// Заносим в переменную StartPort стартовый номер порта из компонента NumericUpDown
int StartPort = Convert.ToInt32(numericUpDown1.Value);
// Заносим в переменную EndPort конечный номер порта из компонента
int EndPort = Convert.ToInt32(numericUpDown2.Value);

for (int CurrPort = StartPort; CurrPort <= EndPort; CurrPort++)
{
//Инициализируем новый экземпляр класса
System.Net.Sockets.TcpClient TcpScan = new System.Net.Sockets.TcpClient();
try
{
//Выполняем подключение клиента к указанному порту заданного узла.
TcpScan.Connect(textBox1.Text, CurrPort);
//Если подключение выполнено успешно то выводим в listBox1
PortOpen(CurrPort);
}
catch
{
//Если возникло исключение то порт закрыт
PortClose(CurrPort);
}
//Переводим курсор на последнюю строку списка
selectedIndex();
}

      В данном коде используется цикл «for», где в качестве условия, устанавливается начальное значение переменной i равное номеру порта, указанного в элементе управления «numericUpDown1», а в качестве условия окончания цикла, выставляется значение, указанное в элементе управления «numericUpDown2». Данный цикл выполняется с шагом, равному единице. В теле данного цикла создается новый экземпляр класса «System.Net.Sockets.TcpClient» и выполняется вызов метода «Connect». Данный метод подключает клиента к удаленному TCP-узлу, указанному в элементу управления «textBox1» и номеру порта который каждый раз увеличивается в условии цикла. Если код вызывает исключение, это вероятно, потому что подключение было неудачным. Однако если нет никаких исключений, это означает, что TcpClient успешно подключен к порту и, таким образом, порт открыт. 
      Обработчик событий «DoWork» не позволяет выполнять действия ни с какими объектами пользовательского интерфейса. Для обхода данного ограничения в коде присутствует вызов методов «selectedIndex», «PortOpen», «PortClose». Данные методы выполняют указанный делегат асинхронно в потоке, в котором был создан базовый дескриптор элемента управления. Добавьте в листинг главной формы код объявления данных методов.

public void selectedIndex()
{
try
{
if (InvokeRequired)
BeginInvoke(new MethodInvoker(delegate
{
listBox1.SelectedIndex = listBox1.Items.Count - 1;
}));
else
{
listBox1.SelectedIndex = listBox1.Items.Count - 1;
}
}
catch (Exception) { }
}

public void PortOpen(int port)
{
try
{
if (InvokeRequired)
BeginInvoke(new MethodInvoker(delegate
{
listBox1.Items.Add("Порт " + port + " открыт");
}));
else
{
listBox1.Items.Add("Порт " + port + " открыт");
}
}
catch (Exception) { }
}

public void PortClose(int port)
{
try
{
if (InvokeRequired)
BeginInvoke(new MethodInvoker(delegate
{
listBox1.Items.Add("Порт " + port + " закрыт");
}));
else
{
listBox1.Items.Add("Порт " + port + " закрыт");
}
}
catch (Exception) { }
}

      Перейдите в конструктор главной формы, выполнив сочетание клавиш «Shift+F7». Найдите добавленный компонент «backgroundWorker1», сделайте по нему клик правой клавишей мыши и выберете из появившегося контекстного меню, пункт «Свойства».

      В окне свойств, перейдите в события данного компонента, нажав в верхней части на значок «молнии». Найдите и сделайте двойной клик левой клавишей мыши по событию «RunWorkerCompleted». Вы перейдете в автоматически созданный метод «backgroundWorker1_RunWorkerCompleted». Добавьте в него приведенный ниже код.

//Разблокируем кнопку по завершению процесса
button1.Enabled = true;

      Для запуска процесса проверки открытых портов необходимо перейти в конструктор главной формы, выполнив сочетание клавиш «Shift+F7» и сделать двойной клик левой клавишей мыши по компоненту «button1». Вы перейдете в автоматически созданный метод «button1_Click» события компонента «Click». Добавьте приведенный ниже код в тело данного метода.

//Очищаем список перед выводом данных
listBox1.Items.Clear();
//Блокируем кнопку, для предотвращения повторного запуска
//процесса, при уже запущенном процессе
button1.Enabled = false;
backgroundWorker1.RunWorkerAsync();

      Запустите ваш проект, нажав на клавиатуре, клавишу «F5». Введите адрес сетевого устройства и выставьте значения начального и конечного портов, которые программа будет проверять. Нажмите кнопку «Старт», по мере сканирования программа будет построчно выводить в компонент «listbox1» данные об открытых или закрытых портах.

Ссылка для скачивания примера: Rusfolder.net

Создание сканера портов: Справочник по C#

0.00 (0%) 0 votes

ЧИТАТЬ ТАКЖЕ:  Автоматическая авторизация на Facebook при использовании элемента управления WebBrowser: Справочник по C#

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь