0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 47

Проверка открытых/закрытых портов

27.05.2017, 07:43. Показов 3869. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал тестовую программe которая посматривает определенный порт, а потом выводи соответствующее сообщение.
Но, она работает не корректно:
- не могу понять почему не когда не вызывается else, сразу выпадает исключение, если порт закрыт.
- если закрыть 80 порт, то всегда выпадает исключение на все порты, хоть они и не были закрыты в ручную
Если есть предложения как исправить эти ошибки, то пишите!)
Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.Net;
using System.Net.Sockets;
 
namespace test___1
{
    class Program
    {
        static void Main()
        {
            string hostName = "mail.yandex.ru";
 
            int port = 1295;
 
            try
            {
                HttpWebRequest reqFP = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com");
 
                HttpWebResponse rspFP = (HttpWebResponse)reqFP.GetResponse();
                
 
                if (HttpStatusCode.OK == rspFP.StatusCode)
                {
                    IPAddress[] IPa = Dns.GetHostAddresses(hostName);
 
                    Socket checkerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    try
                    {
                        checkerSocket.Connect(IPa[0], port);
 
                        if (checkerSocket.Connected == true)
                        {
                            checkerSocket.Close();
                            Console.WriteLine("Port " + port + " open");
                        }
                        else
                        {
                            checkerSocket.Close();
                            Console.WriteLine("Port " + port + " closed");
                        }
                    }
                    catch(Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }
            catch (WebException e)
            {
                Console.WriteLine(e.Message);
            }
            Console.ReadLine();
        }
    }
}
Добавлено через 18 часов 36 минут
неужели некто не знает?!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.05.2017, 07:43
Ответы с готовыми решениями:

Перечисление открытых сетевых портов
приветствую, нужна помощь знающих людей. есть задача, а именно нужно написать в форме программу, с использованием winAPI которая будет...

Количество открытых и закрытых скобок
Вводится последовательность символов, завершаеться символом «.» (Точка). Подсчитать количество открытых и закрытых квадратных скобок. Как...

определить равно ли колличество открытых и закрытых скобок
Дан текстовый файл, содержащий некоторый текст. Определить, равно ли количество открывающих и закрывающих скобой в тексте. Ответ вывести в...

14
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,762
27.05.2017, 08:26
Цитата Сообщение от nevbie Посмотреть сообщение
не могу понять почему не когда не вызывается else, сразу выпадает исключение, если порт закрыт.
Socket.Connect() всегда кидает исключение, если не может подключиться к указанному хосту. Вроде бы достаточно логично.
0
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 47
27.05.2017, 10:29  [ТС]
Usaga, то есть else всегда будет лишним!?
А что можете сказать по:
- если закрыть 80 порт, то всегда выпадает исключение на все порты, хоть они и не были закрыты?
0
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,762
27.05.2017, 10:49
Цитата Сообщение от nevbie Посмотреть сообщение
если закрыть 80 порт, то всегда выпадает исключение на все порты, хоть они и не были закрыты?
Ну это логично. Вы же зачем-то ломитесь в гугл перед соединением с хостом. Угадайте на каком порту висит www.google.com?
0
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 47
27.05.2017, 10:54  [ТС]
Дело в том, что мне надо определить какие порты открыты на машине, в данном случае я проверяю 80, 443, 1295
Может посоветуете хост на котором я смогу проверить все эти порты, закрывая и открывая поочередно?
0
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,762
27.05.2017, 10:59
nevbie, какой ещё хост?))) Подлючаетесь к целевой машине по указанным портам и всё. Получили ошибку - порт закрыт или машина недоступна. Всё. Причём тут гугл я так и не понял.
0
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 47
27.05.2017, 11:20  [ТС]
Вы наверное не поняли меня.
Моя программа работает как telnet.
На локальной машине через командную строку смотрю какие порты у меня в принципе открыты в данный момент, затем закрываю их при помощи брандмауэра,но все остается без изменений.
А вот когда захожу через телнет, то вижу, что те самые закрытые мной порты, действетельно закрылись.
Таков же принцип и моей программы, она отправляет запрос и получает или не получает ответ.

Добавлено через 1 минуту
Тоесть когда проверяем открытие портов изнутри, то информация не корректная, поэтому есть необходимость проверять извне

Добавлено через 34 секунды
мой код это делает но загвоздка заключается именно в 80 порту

Добавлено через 45 секунд
Если я в чем то не прав, то сорян)
0
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,762
27.05.2017, 11:22
nevbie, ничего не понял. Вы что хотите проверить? Доступность портов на удалённой машине? Причём здесь, тогда, порты на локальной машине? Или вы исходящие подключения блокируете на данные порты? Я вообще не понял ничего, если честно...
0
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 47
27.05.2017, 11:46  [ТС]
У меня есть клиентская машина, на которой неоходимо проверить порты.
Сначало я написал код по проверке этих портов:
Вот кусок:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
protected string GetCheckOpenPorts(int portNumber)
        {
            bool ipAvailable = true;
 
            IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
            IPEndPoint[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpListeners();
 
            foreach (IPEndPoint andPoint in tcpConnInfoArray)
            {
                if (andPoint.Port == portNumber)
                {
                    ipAvailable = false;
                    break;
                }
            }
 
            if (ipAvailable == false)
            {
                return PortOpen();
            }
            else
            {
                return PortCloseOrEstablished();
            }
        }
        protected string PortOpen()
        {
            return "Port " + portNumber + " open for incoming connection(LISTENING)";
        }
        protected string PortCloseOrEstablished()
        {
            return "Port " + portNumber + " busy or closed";
        }
    }
Добавлено через 16 минут
Но он не работает корректно! выдает ту же информацию что и netstat -aon.
Если закрыть порты на локальной машине и запустить netstat -aon снова, то покажет что порты открыты.
Как мне объяснили, что нельзя проверить порты локально! для этого нужно испотльзовать telnet.
Так вот моя прога которая выше это и пытается делать, заходя на хост, читая его IP и проверяет мой порт который мне нужно проверить.
Все бы ничего, но когда закрываю 80 порт, запускаю прогу, то вылетает экскпшен "Невозможно соедениться с удаленным сервером", ввожу другой порт, при закрытом 80 но тот же эксепшен, как будто 80 блокирует всех
0
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,762
27.05.2017, 12:09
Цитата Сообщение от nevbie Посмотреть сообщение
Но он не работает корректно! выдает ту же информацию что и netstat -aon.
Вы хотите сказать, что netstat -aon работает некорретно?

Цитата Сообщение от nevbie Посмотреть сообщение
Если закрыть порты на локальной машине и запустить netstat -aon снова, то покажет что порты открыты.
Что значит "закрыть порты локально"? Как закрыть? Брендмауэром\файерволом? Тогда к таким портам просто не будет доступа извне, но сами сокеты, конечно же, останутся висеть и ждать входящие подключения (которых уже не будет).
0
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,762
27.05.2017, 12:10
Цитата Сообщение от nevbie Посмотреть сообщение
Так вот моя прога которая выше это и пытается делать, заходя на хост, читая его IP и проверяет мой порт который мне нужно проверить.
Что?..
Изображения
 
0
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 47
27.05.2017, 12:50  [ТС]
В общем, как проверить порты (открыты или закрыты)?
Напишите код, я так понимаю, что написанное мной неверно.

Добавлено через 3 минуты
Usaga, Нет netstat -aon работает корректно. прога работает не корректно, она должна собирать достоверную инфу.
Закрываем Брендмауэром (создаем правила на входящие и исходящие 80 порт).
0
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,762
27.05.2017, 13:01
Цитата Сообщение от nevbie Посмотреть сообщение
Закрываем Брендмауэром (создаем правила на входящие и исходящие 80 порт).
Вот брендмауэр и нужно опрашивать. Ибо порты остаются открытыми. Брендмауэр - внешняя по отношению ко всему прога, со своим драйвером, который просто блокирует трафик. Сокеты ждущие входящие подключения об этом просто не знают и знать не могут, потому они и остаются открытыми. И netstat показывает, что порты открыты потому, что они действительно открыты. Закрыт доступ к ним извне, а это уже другое.

Надеюсь вы меня поняли...
0
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 47
27.05.2017, 13:10  [ТС]
Usaga, но ок! а как опросить Брендмауэр на наличие открытых/закрытых портов которые нужны именно мне при помощи С#?
Если есть возможность дайте код.
0
Эксперт .NET
 Аватар для Usaga
14059 / 9268 / 1346
Регистрация: 21.01.2016
Сообщений: 34,762
27.05.2017, 13:11
nevbie, гуглите документацию на используемый вами брендмауэр. Может это можно сделать, может и нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.05.2017, 13:11
Помогаю со студенческими работами здесь

Проверить численное соответствие открытых и закрытых скобок
Дан файл программы на языке Паскаль. Проверить численное соответствие открытых и закрытых скобок.

Какие измерительные преобразователи применяются в закрытых и открытых сосудах?
5.4.4 Какие измерительные преобразователи применяются в закрытых и открытых сосудах выбрать правильный ответ? a) ΔР = 0 ...

Вывести на экран лишь строки с соответствием открытых и закрытых скобок
Дан файл F.Вывести на экран лишь строки с соответствием открытых и закрытых скобок.

Проверить что количество открытых скобок равно количеству закрытых
Ввести произвольный тест. Проверить, в заданном тексте количество от-крытых скобок равно количеству закрытых скобок. Помогите пожалуйста....

Проверить текст программы на Паскале на несоответствие числа открытых/закрытых скобок
Дан текстовый файл f, содержащий программу на языке паскаль. Проверить эту программу на несоответствие числа открывающих и закрывающих...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru