Welcome to my World Вторник, 26.11.2024, 06:27
Любое использование материалов, их подборки, дизайна и элементов дизайна может осуществляться лишь с разрешения автора (правообладателя) и только при наличии ссылки на ресурс
Приветствую Вас Гость | RSS


Меню сайта

Категории раздела
Работа с контролами [3]
(Button)
Forms [1]
Работа с формами
Сеть [1]
Работа с сетью
Compact Framework [1]
Compact Framework
Внешние устройства [1]
Работа с внешними устройствами

Главная » Статьи » CSharp » Сеть

Сканер портов на C#
Сканер портов на C#.
 
 

 
В этом примере создадим программу сканирования портов, которая будет соединяться с IP-адресом по каждому порту из заданного диапазона.
 
Создадим цикл, в котором будем поочередно пытаться асинхронно подключаться к определенному адресу при помощи сокетов:
 
 
 
void Button1Click(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.Refresh();
         progressBar1.Value += 1;
      }
      else
      {
         soc.Close();
         listView1.Items.Add("Порт " + i.ToString());
         listView1.Items[i-BeginPort].SubItems.Add(" открыт");
         progressBar1.Value += 1;
      }
   }
} 
 
Метод BeginConnect() асинхронно пытается подключиться к удаленному хосту. Для него требуется метод обратного вызова, который должен вызвать метод EndConnect(), который в свою очередь завершит запрос на соединение и вернет соединенный сокет. Методу BeginConnect() передается три параметра:
  1. Удаленный хост
  2. AsyncCallback - используется для передачи указателя на функцию
  3. Сокет
 
Метод CallBBack:
private static void ConnectCallback(IAsyncResult ar)
{
   try
   {
      Socket client = (Socket) ar.AsyncState;
      client.EndConnect(ar);
      connectDone.Set();
   }
   catch (Exception e)
   {
   }
}
Категория: Сеть | Добавил: dev (15.12.2007)
Просмотров: 23903 | Комментарии: 8 | Рейтинг: 4.3/6
Всего комментариев: 8
8 Pietoupiess  
0
Водонепроницаемая экшен-камера. Совсем новая, компактная и в своём роде уникальная [url=http://www.centroline.ru видеокамера[/url] ради экстремальных видов спорта и активного отдыха.Она представляет собой мини-камеру, которая позволят вам посылать записанное фото и видео торчмя для свой айфон, смартфон или планшетный компьютер, а также позволяет воззриться в режиме реального времени по каналу беспроводной связи Wi-Fi.

7 Жорег  
0
Спасибо огромное!Именно то что я искал! есть пару идей для сканера:)

6 Tajik  
0
Sps za Isxodnika_))

5 pendalif  
0
retto, ты не умничай, тебе технологию показали, а вылизывать код народ сам будет

4 dima117  
0
согласен с retto, но не думаю, что следует применять такие жесткие меры.. :)
логику и UI лучше разделять

извините за отклонение от темы


3 PaLblch  
0
отличная программа. а можно в нее добавить функцию поиска из диапазона ip айпишника с открытым портом? номер порта указывается заранее.

2 Rombs  
0
Знаете, retto.
вместо того чтобы умничать, предложите свой вариант. А то блин на всех форумах посылаете на разные ресурсы "почитать", тратишь килочасы времени, для решения простой задачи. Для меня например, пример полезный. Спасибо автору. Конечно, я тоже не одобряю такой стиль, но интересующая меня тема с сокетами в C# тут присутствует, и вышел я сюда, ища именно это, а не то, как нужно прогарммировать, как инкапсулировать и т.д.

Автор, так держать!!!!


1 retto  
0
программиста который пишет вместо 3 строк текста в кнопке пишет несколько тысяч, надо долго бить головой об беэкспейс

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Поиск

Наш опрос
Оцените мой сайт
Всего ответов: 91

Друзья сайта
alsproject.ru

Статистика

Copyright MyCorp © 2024Сайт управляется системой uCoz