1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 33

Перечисление открытых сетевых портов

24.10.2013, 13:25. Показов 5728. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
приветствую, нужна помощь знающих людей. есть задача, а именно нужно написать в форме программу, с использованием winAPI которая будет показывать открытые сетевые порты, сколько времени открыт порт, информацию (путь, версии, имя (это основное)...).
сам никогда с winAPI не работал, вообще не знаю что да как. если мой вопрос носит исчерпывающий характер, то прошу скинуть ссылку где есть подобная проблема. может у кого есть какие-нибудь наработки что поможет мне в изучении текущей задачи. в любом случае спасибо!
на данный момент курирую MSDN и google, но продвижений нет(
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.10.2013, 13:25
Ответы с готовыми решениями:

Проверка открытых/закрытых портов
Написал тестовую программe которая посматривает определенный порт, а потом выводи соответствующее сообщение. Но, она работает не...

Перечисление Com портов
В общем есть такая задачка, есть девайс, который передают данные по блютузу....в комп через USB воткнут приемник, который работает с компом...

Просмотр открытых портов
Добрый день! Как посмотреть открытые порты из интернета? Насколько я понимаю есть в bridge и firewall. Так получается что в файрволе...

11
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 33
26.10.2013, 11:18  [ТС]
ребят, на данный момент добился показа сетевых портов, но так и не понял как можно сделать чтоб показывал путь и сколько времени открыт порт, как можно сделать показ?
и еще один вопрос, нужно чтоб при нажатии на кнопку программа показывала, имя пользователя (реализовал) и тип учетной записи, http://msdn.microsoft.com/en-u... .110).aspx , у меня почему то их код не работает, видимо из-за примечаний написанных к платформе.
делаю без winapi
0
Заблокирован
26.10.2013, 11:28
Цитата Сообщение от Raytt Посмотреть сообщение
ребят, на данный момент добился показа сетевых портов
Дайте код, интересно же.
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 33
26.10.2013, 11:36  [ТС]
сканер
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
            textBox5.Text = "127.0.0.1";
        }
 
        public void Scan()
        {
            int StartPort = Convert.ToInt32(1);
            int EndPort = Convert.ToInt32(100);
            int i;
 
            progressBar1.Maximum = EndPort - StartPort + 1;
            progressBar1.Value = 0;
            listView1.Items.Clear();
 
 
            IPAddress IpAddr = IPAddress.Parse(textBox5.Text);
            for (i = StartPort; i <= EndPort; i++)
            {
                //Создаем сокет
                IPEndPoint IpEndP = new IPEndPoint(IpAddr, i);
                Socket MySoc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //Пробуем подключится к указанному хосту
                IAsyncResult asyncResult = MySoc.BeginConnect(IpEndP, new AsyncCallback(ConnectCallback), MySoc);
 
 
 
                if (!asyncResult.AsyncWaitHandle.WaitOne(30, false))
                {
                    MySoc.Close();
                    listView1.Items.Add("Порт " + i.ToString());
                    listView1.Items[i - StartPort].SubItems.Add("закрыт");
                    listView1.Items[i - StartPort].SubItems.Add(textBox2.Text);
                    listView1.Items[i - StartPort].SubItems.Add(textBox2.Text);
                    progressBar1.Value += 1;
                }
                else
                {
                    MySoc.Close();
                    listView1.Items.Add("Порт " + i.ToString());
                    listView1.Items[i - StartPort].SubItems.Add("открыт");
                    listView1.Items[i - StartPort].BackColor = Color.LightGreen;
                    listView1.Items[i - StartPort].SubItems.Add("пока хз");
                    listView1.Items[i - StartPort].SubItems.Add(textBox2.Text);
                    progressBar1.Value += 1;
 
                }
            }
имя пользователя
C#
1
2
3
4
        {
            String host = System.Net.Dns.GetHostName();
            textBox2.Text = host.ToString();
        }
Добавлено через 1 минуту
сканер естественно будет от 0-65536. в моем случае до 100 для удобства отладки
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
26.10.2013, 12:44
Вместо сканирования портов лучше заюзать какую-нибудь стандартную API-шку.
Например, GetTcpTable или GetExtendedTcpTable.
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 33
26.10.2013, 12:56  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Вместо сканирования портов лучше заюзать какую-нибудь стандартную API-шку.
Например, GetTcpTable или GetExtendedTcpTable.
а у Вас случаем нет никаких наработок?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
26.10.2013, 13:08
Цитата Сообщение от Raytt Посмотреть сообщение
а у Вас случаем нет никаких наработок?
Для таких вещей наработки не нужны
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.10.2013, 16:57
Процессы и сеть.
Только тему до конца прочитайте, там есть косяки...
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 33
26.10.2013, 18:52  [ТС]
Цитата Сообщение от NickoTin Посмотреть сообщение
Процессы и сеть.
Только тему до конца прочитайте, там есть косяки...
спасибо за ссылку!
почитал несколько раз, но уперся в следующее:
если в свойствах проекта разрешить небезопасный код, то проект запускается и показывает почти пустую консоль\
если изменить структуру IN_ADDR, то появляются две ошибки: "Не удается неявно преобразовать тип "ulong" в "uint". Существует явное преобразование (возможно, пропущено приведение типов) и ошибка направляет на

C#
1
2
  in_addr0.S_addr = (ulong)tcpRows[i].dwLocalAddr;
                        in_addr1.S_addr = (ulong)tcpRows[i].dwRemoteAddr;
если изменить как Вы писали "измени тип возвращаемый inet_ntoa на StringBuilder" то ошибок еще больше
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 33
26.10.2013, 18:55  [ТС]
если заменить ulong на uint ошибки все исчезают, но отображение в консоли остается таким же
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.10.2013, 20:06
Raytt, условие перед этим просмотрите, и подумайте что нужно с ним сделать.
C#
1
if (Process.GetProcessById((int)tcpRows[i].dwOwningPid).ProcessName == "uTorrent") {
Еще заметил такую особенность что в студии во время отладки выполнение падает на вызове inet_ntoa, но под Windbg всё нормально... Поэтому стоит заменить inet_ntoa на RtlIpv4AddressToString или же самостоятельно преобразовать адрес из полей s_b1, s_b2, s_b3, s_b4 структуры IN_ADDR.

Если всё-таки не получится...
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
        [DllImport( "Ws2_32.dll", SetLastError = true, CharSet = CharSet.Ansi )]
        static extern string inet_ntoa (
            [In] IN_ADDR in_addr
            );
 
        [DllImport( "ntdll.dll", SetLastError = true, CharSet = CharSet.Unicode )]
        unsafe private static extern IntPtr RtlIpv4AddressToString (
            uint* Addr,
            StringBuilder S
            );
 
        unsafe static void Main ( string[] args )
        {
            MIB_TCPROW2[] tcpRows;
            IN_ADDR in_addr0 = new IN_ADDR(), in_addr1 = new IN_ADDR();
 
            do
            {
                tcpRows = GetTcpRows();
                Console.Clear();
                Console.WriteLine( "Process\t\tPID\tProtocol\tLocal Address\tLocal Port\tRemote Address\tRemote Port\tState\tOffload State" );
                for ( int i = tcpRows.Length - 1; i >= 0; i-- )
                {
                    //if ( Process.GetProcessById( (int)tcpRows[i].dwOwningPid ).ProcessName == "uTorrent" )
                    //{
                    //// RtlIpv4AddressToString
                    //StringBuilder addr0 = new StringBuilder( 16 ),
                    //              addr1 = new StringBuilder( 16 );
                    //var addr = tcpRows[i].dwLocalAddr;
                    //RtlIpv4AddressToString( &addr, addr0 );
                    //addr = tcpRows[i].dwRemoteAddr;
                    //RtlIpv4AddressToString( &addr, addr1 );
 
                    in_addr0.S_addr = tcpRows[i].dwLocalAddr;
                    in_addr1.S_addr = tcpRows[i].dwRemoteAddr;
 
                    Console.WriteLine( string.Format( "{0}\t{1}\t{2}\t\t{3}\t{4}\t\t{5}\t{6}\t{7}\t{8}",
                        Process.GetProcessById( (int)tcpRows[i].dwOwningPid ).ProcessName,
                        tcpRows[i].dwOwningPid,
                        "TCP",
                        //addr0,
                        string.Format( "{0}.{1}.{2}.{3}", in_addr0.S_un_b.s_b1, in_addr0.S_un_b.s_b2, in_addr0.S_un_b.s_b3, in_addr0.S_un_b.s_b4 ),
                        ntohs( (ushort)tcpRows[i].dwLocalPort ),
                        //addr1,
                        string.Format( "{0}.{1}.{2}.{3}", in_addr1.S_un_b.s_b1, in_addr1.S_un_b.s_b2, in_addr1.S_un_b.s_b3, in_addr1.S_un_b.s_b4 ),
                        ntohs( (ushort)tcpRows[i].dwRemotePort ),
                        tcpRows[i].dwState,
                        tcpRows[i].dwOffloadState )
                        );
                    //}
                }
            } while ( Console.ReadLine() != "end" );
        }
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 33
07.11.2013, 15:07  [ТС]
и так на текущий момент сделал почти все, определение открытых портов идет через сокет, но есть одна проблема, как можно определить:
1) сколько времени открыт порт
2) кто из пользователей открыл порт
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2013, 15:07
Помогаю со студенческими работами здесь

Перечисление UDP портов на локальном компьютере.
Этот скрипт перечисляет только порты для одного сетевого адаптера: #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include...

p2p подключение без открытых портов
Хотелось бы понять как создать подключение без открытых портов. Например LOI (Lan on internet) легко создает Слышал что-то про Teredo,...

Обмен данными без открытых портов
Может звучит глупо, но можно ли организовать обмен данными, при том, что все порты закрыты? Ну или как тогда программно открыть порты?...

Поиск открытых портов на удаленной машине
Подскажите или направьте меня, как сделать так что бы программа перебирала по ip адресам машины в сети (подсети) и узнавала слушаеться...

База для хранения списка открытых портов
Здравствуйте. Есть задача хранения в базе результатов сканирования хостов. Дело в том, что каждому ip адресу соответствует множество...


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

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

Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru