|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.11.2010, 21:12 | #1 |
Пользователь
Регистрация: 15.09.2009
Сообщений: 44
|
Можно ли Connect'oм определить доступность Udp порта?
Здравствуйте. Я пишу сканер портов. С Tcp вроде справилась, а вот, как просканировать Udp (хотелось бы на C#) неизвестно. Читала про функции write() и recvfrom(), но их в C# я не нашла.
Может можно сделать так? Создаем UdpClient, и по ip и порту пытаемся с ним коннектится с помощью метода Connect. На MSDN написано, что, если возникает исключение ObjectDisposedException, то это значит, что объект UdpClient закрыт. Можно ли считать, что если объект закрыт, то и порт, через который мы коннектимся - закрыт? А, если этого исключения не возникает - открыт. Спасибо. |
07.12.2010, 00:03 | #2 |
Регистрация: 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 или нет: Код:
Последний раз редактировалось vizir1989; 07.12.2010 в 00:05. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
какое максимальное напряжение можно кратковременно подать на ПИН 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 |