Создание сканера портов

В прошлой статье “Сокеты в C#” мы познакомились с сокетами и подробно рассмотрели классы для работы с ними. В этой статье мы разработаем простое приложение “Сканер портов” на языке C#.

Для начала в Visual Studio создаем Windows Forms проект:


Создание сканера портов

Создаем форму приложения:


Создание сканера портов

На форму добавляем следующие объекты:

  • 1 TextBox и меняем в свойствах «Name» на «tIPAddress»;
  • 1 NumericUpDown и меняем в свойствах «Name» на «nBeginPort»;
  • 1 NumericUpDown и меняем в свойствах «Name» на «nEndPort»;
  • 3 объекта Label (IP-адрес, Порты с, по);
  • 1 listView и добавляем ему столбцы (Порт, Открыт, Закрыт):

  • Создание сканера портов

  • 1 ProgressBar;
  • 1 Button (Сканировать).

После создания формы приложения нажимаем два раза на кнопку «Сканировать» и пишем код приложения:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Net.NetworkInformation;

namespace skaner_port
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        public static ManualResetEvent connectDone = new ManualResetEvent(false);

        private static void ConnectCallback(IAsyncResult ar)
        {
            try
            {
                Socket client = (Socket)ar.AsyncState;
                client.EndConnect(ar);
                connectDone.Set();
            }
            catch (Exception e)
            {

            }
        }

        public void button1_Click(object sender, EventArgs e)
        {
            int BeginPort = Convert.ToInt32(nBeginPort.Value);
            int EndPort = Convert.ToInt32(nEndPort.Value);

            int i;

            progressBar1.Maximum = EndPort - BeginPort + 1;

            progressBar1.Value = 0;
            listView1.Items.Clear();

            IPAddress addr = IPAddress.Parse(tIPAddress.Text);

            for (i = BeginPort; i <= EndPort; i++)
            {
                // Создаем и инициализируем сокет
                IPEndPoint ep = new IPEndPoint(addr, i);
                Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                // Пытаемся соединиться с сервером
                IAsyncResult asyncResult = soc.BeginConnect(ep, new AsyncCallback(ConnectCallback), soc);

                if (!asyncResult.AsyncWaitHandle.WaitOne(30, false))
                {
                    soc.Close();
                    listView1.Items.Add("Порт " + i.ToString());
                    listView1.Items[i - BeginPort].SubItems.Add("");
                    listView1.Items[i - BeginPort].SubItems.Add("закрыт");
                    listView1.Items[i - BeginPort].BackColor = Color.Bisque;
                    listView1.Refresh();
                    progressBar1.Value += 1;
                }
                else
                {
                    soc.Close();
                    listView1.Items.Add("Порт " + i.ToString());
                    listView1.Items[i - BeginPort].SubItems.Add("открыт");
                    listView1.Items[i - BeginPort].BackColor = Color.LightGreen;
                    progressBar1.Value += 1;
                }
            }
            progressBar1.Value = 0;
        }
    }
}

Метод BeginConnect() асинхронно пытается подключиться к удаленному хосту. Ему нужно передать метод обратного вызова, который должен вызвать метод EndConnect().

Метод EndConnect() завершает запрос на соединение и вернет соединенный сокет.

Если вы все сделали правильно, тогда скомпилируйте приложение и проверьте на работоспособность свое приложение. Будут вопросы пишите свои комментарии.

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

3 ответа к “Создание сканера портов”

Извините, а как правильно пользоваться этой программой? Просто пишу любые порты и все они открыты.

 

Доброго времени. А как сделать, что бы сканирование происходило о списку ip? Например: 192.0.0.1-192.255.255.255

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Entity Framework

Entity Framework

ADO.NET Entity Framework (EF) — объектно-ориентированная технология доступа к данным, является object-relational mapping (ORM) решением для .NET Framework от Microsoft. Предоставляет возможность взаимодействия с объектами

 
Работа с базой данных в C#

Работа с базой данных в C#

В данной статье мы подробно поговорим о разработке небольшого приложения с помощью Visual Studio базы данных и языка C#. Советуем поэтапно выполнять все инструкции из

 
Сокеты в С#

Сокеты в С#

Сокет – это один конец двухстороннего канала связи между двумя программами, работающими в сети. Используя два сокета, можно передавать данные между разными процессами (локальными или

 
Пространство имен System.Net.

Пространство имен System.Net.

В этой статье коротко поговорим о пространстве имен System.Net и некоторых его классах. В последующих статьях будем рассматривать другие его классы. Пространство имён System.Net содержит

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: