Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2010, 21:12   #1
Dasharnb777
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 44
Подмигивание Можно ли Connect'oм определить доступность Udp порта?

Здравствуйте. Я пишу сканер портов. С Tcp вроде справилась, а вот, как просканировать Udp (хотелось бы на C#) неизвестно. Читала про функции write() и recvfrom(), но их в C# я не нашла.
Может можно сделать так?
Создаем UdpClient, и по ip и порту пытаемся с ним коннектится с помощью метода Connect. На MSDN написано, что, если возникает исключение ObjectDisposedException, то это значит, что объект UdpClient закрыт.
Можно ли считать, что если объект закрыт, то и порт, через который мы коннектимся - закрыт?
А, если этого исключения не возникает - открыт.
Спасибо.
Dasharnb777 вне форума Ответить с цитированием
Старый 07.12.2010, 00:03   #2
vizir1989
 
Регистрация: 07.05.2010
Сообщений: 9
По умолчанию

Сканирование UDP-портов проверкой ICMP-сообщения "Порт недоступен"
Большинство серверов в ответ на пакет, прибывший на закрытый UDP-порт, отправляют ICMP-сообщение "Порт недоступен" (Port Unreachable - PU). Таким образом, если в ответ на UDP-пакет пришло ICMP-сообщение PU, то сканируемый порт является закрытым, в противном случае (при отсутствии PU) порт открыт. Поскольку нет гарантии, что запросы от хоста дойдут до сервера, пользователь должен позаботиться о повторной передаче UDP-пакета, который, по всей видимости, оказался потерянным.

Сканирование UDP-портов с использованием функций recvfrom() и write()
Этот метод используется в случае, когда пользователь, проводящий сканирование, не обладает статусом Root на хосте. Поскольку не-root пользователь не может "читать" ICMP-сообщение PU, в ОС, поддерживающих механизм сокетов (например в Linux), имеется возможность получения информации о состоянии UDP-порта косвенным способом. Так, например, попытка вызова функции write() на закрытый порт обычно приводит к возникновению ошибки.
Функция recvfrom() в этом плане более информативна. Вызов ее на неблокированный UDP-сокет сервера обычно возвращает ошибку EAGAIN (Try Again - "попытайтесь еще раз", код 13) в случае, когда ICMP-сообщение не было принято, и ECONREFUSED (Connection Refused - "соединение закрыто", код 111), если ICMP-сообщение было принято. Таким образом, по этим признакам также возможно определить состояние портов сканируемого сервера.
Взято из http://cherepovets-city.ru/insecure/...p-portscan.htm

Вот так вот можно определить открыт ли порт udp или нет:


Код:
            IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(serverHost), portNum);
            EndPoint endPoint = new IPEndPoint(IPAddress.Parse(serverHost), portNum);
            Socket socket = new Socket(ipe.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
            byte[] sendbytes = Encoding.ASCII.GetBytes("Hello, my great friends");
            Socket icmpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
            byte[] icmpbytes = new byte[256];
            //socket.SendTo(sendbytes, ipe);
            icmpSocket.SendTo(icmpbytes, endPoint);
            socket.Connect(ipe);
            socket.Send(sendbytes, sendbytes.Length, 0);
            
            if (icmpSocket.ReceiveFrom(icmpbytes, ref endPoint) > 0)
                Console.WriteLine("Icmp message has been reseived. Port is not open");
Т.е. в случае, если порт оказывается закрыт, то сервак остылает клиенту icmp message.

Последний раз редактировалось vizir1989; 07.12.2010 в 00:05.
vizir1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
какое максимальное напряжение можно кратковременно подать на ПИН LPT порта ? Joslen_bomon Компьютерное железо 16 23.03.2010 16:01
Можно ли имея F:TextFile определить... Alex Cones Общие вопросы Delphi 5 12.12.2009 21:31
как можно читать бинарные данные, через UDP? b_gafurov Работа с сетью в Delphi 0 06.04.2009 15:15
Можно-ли прочитать данные с COM-порта в VBA? Gawwws Microsoft Office Excel 1 28.10.2008 15:26
Как получить данные с COM-порта или другого любого порта? DeLure Общие вопросы C/C++ 5 20.09.2007 00:50