Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

Определить занятость портов на локальном компьютере

17.04.2017, 05:29. Показов 1397. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте.
Определяю какие порты и чем заняты из командной строки (netstat –aon, tasklist).
Существуют ли в .Net функции, облегчающие эту задачу?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.04.2017, 05:29
Ответы с готовыми решениями:

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

Sharepoint на локальном компьютере
Доброго времени суток! Нужно создать веб-страничку с использованием sharepoint. SharepointServer или sharepoint foundation установить не...

MySQL на локальном компьютере
Здравствуйте! Установил MySQL на Win XP. Всё запустилось. Создал юзеров. В Службах БД запущена. Существует ли способ проверить что...

6
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
17.04.2017, 10:34
jkrnd, в самом .NET нет. Это довольно специфическая и редкая задача чтобы ради нее держать классы. Думаю что можно найти готовые решения работающие через Windows API.
1
Лень — мое второе и
 Аватар для Orlangur
3228 / 2416 / 687
Регистрация: 28.11.2014
Сообщений: 3,601
Записей в блоге: 3
17.04.2017, 11:31
jkrnd, можно выхлоп из этого же netstat'a и распилить
VB.NET
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Imports System
Imports System.Collections.Generic
Imports System.Diagnostics
Imports System.Text.RegularExpressions
 
Public Class Form1
 
    Public Shared Function GetActiveConnections(ByVal includeProcess As Boolean) As List(Of ActiveConnection)
 
        Dim process As New Process()
 
        process.StartInfo.FileName = "netstat.exe"
 
        If includeProcess Then
            process.StartInfo.Arguments = "-aon"
        End If
 
        process.StartInfo.CreateNoWindow = True
        process.StartInfo.ErrorDialog = False
        process.StartInfo.RedirectStandardOutput = True
        process.StartInfo.UseShellExecute = False
 
        process.Start()
 
        process.WaitForExit(5000)
 
        Dim output As String = process.StandardOutput.ReadToEnd()
 
        Return ParseConnections(output)
 
    End Function
 
    Private Shared Function ParseConnections(ByVal input As String) As List(Of ActiveConnection)
 
        Dim list As New List(Of ActiveConnection)
 
        Dim allLines() As String = input.Replace(vbCr, "").Split(Chr(10))
 
        Dim connection As ActiveConnection = Nothing
        For Each line As String In allLines
 
            If line.Trim().Length > 0 Then
                If ParseActiveConnection(line.Trim(), connection) Then
                    list.Add(connection)
                End If
            End If
 
        Next line
 
        Return list
 
    End Function
 
    Private Shared Function ParseActiveConnection(ByVal input As String, ByRef connection As ActiveConnection) As Boolean
 
        Dim patternSpaces As String = "(\s+)"
        Dim patternProtocol As String = "(?<proto>[A-Z\d]+)"
        Dim patternLocal As String = "(?<local>[A-Za-z\d:_.]+)"
        Dim patternForeign As String = "(?<foreign>[A-Za-z\d:_.]+)"
        Dim patternState As String = "(?<state>[A-Z_\d]+)"
        Dim patternPid As String = "?(?<pid>\d+)?"
 
        Dim pattern As String = patternProtocol & patternSpaces & _
         patternLocal & patternSpaces & patternForeign & _
         patternSpaces & patternState & patternSpaces & patternPid
 
        Dim addConnection As Boolean = False
 
        Dim matchConnection As Match = Regex.Match(input, pattern)
 
        If matchConnection.Success Then
            connection = New ActiveConnection
 
            connection.Protocol = matchConnection.Groups("proto").Value
            connection.LocalAddress = matchConnection.Groups("local").Value
            connection.ForeignAddress = matchConnection.Groups("foreign").Value
            connection.State = matchConnection.Groups("state").Value
            connection.ProcessID = CInt(matchConnection.Groups("pid").Value)
 
            addConnection = True
 
        Else
            Dim patternExe As String = "\[(?<exe>[A-Za-z\d.]+)\]"
            Dim matchExe As Match = Regex.Match(input, patternExe)
 
            If matchExe.Success Then
                connection.ProcessExecutable = matchExe.Groups("exe").Value
            End If
        End If
 
        Return addConnection
 
    End Function
 
 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
 
        Dim list As List(Of ActiveConnection) = GetActiveConnections(True)
 
        For i = 0 To list.Count - 1
            ListView1.Items.Add(list(i).Protocol).SubItems.AddRange(New String() {list(i).LocalAddress, list(i).ForeignAddress, list(i).State, list(i).ProcessID, Process.GetProcessById(list(i).ProcessID).ProcessName})
        Next
 
    End Sub
  
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ListView1.View = View.Details
        ListView1.GridLines = True
        ListView1.Columns.Add("Protocol", 100, HorizontalAlignment.Left)
        ListView1.Columns.Add("Local Address", 200, HorizontalAlignment.Left)
        ListView1.Columns.Add("ForeignAddress", 200, HorizontalAlignment.Left)
        ListView1.Columns.Add("State", 100, HorizontalAlignment.Left)
        ListView1.Columns.Add("ProcessID", 100, HorizontalAlignment.Left)
        ListView1.Columns.Add("Process name", 150, HorizontalAlignment.Left)
        ListView1.FullRowSelect = True
    End Sub
End Class
 
Public Class ActiveConnection
    Public Protocol As String = ""
    Public LocalAddress As String = ""
    Public ForeignAddress As String = ""
    Public State As String = ""
    Public ProcessID As Integer
    Public ProcessExecutable As String = ""
End Class
3
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
17.04.2017, 12:08  [ТС]
Orlangur1991, кликаю по Button - загружается новая форма, данных в списке нет
VB.NET
1
2
3
4
5
6
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim list As List(Of ActiveConnection) = GetActiveConnections(True)
        For i = 0 To list.Count - 1
            ListView1.Items.Add(list(i).Protocol).SubItems.AddRange(New String() {list(i).LocalAddress, list(i).ForeignAddress, list(i).State, list(i).ProcessID, Process.GetProcessById(list(i).ProcessID).ProcessName})
        Next
    End Sub
Вложения
Тип файла: rar NetStat.rar (16.3 Кб, 4 просмотров)
0
Лень — мое второе и
 Аватар для Orlangur
3228 / 2416 / 687
Регистрация: 28.11.2014
Сообщений: 3,601
Записей в блоге: 3
17.04.2017, 12:23
jkrnd, это странно, попробуйте готовый
Вложения
Тип файла: zip NetStat_View.zip (13.7 Кб, 4 просмотров)
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
17.04.2017, 13:50  [ТС]
Orlangur1991, почему количество адресов с портами, выводимых с помощью Вашей программы не совпадает с результатом выполнения команды netstat - aon в консоли? (намного меньше).
0
Лень — мое второе и
 Аватар для Orlangur
3228 / 2416 / 687
Регистрация: 28.11.2014
Сообщений: 3,601
Записей в блоге: 3
17.04.2017, 18:13
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

jkrnd, программа не моя. Тут не отображаются адреса IPv6, а так же порты UDP. Видимо надо править регулярки, чтобы схватывалось все
VB.NET
1
2
3
4
5
6
 Dim patternSpaces As String = "(\s+)"
        Dim patternProtocol As String = "(?<proto>[A-Z\d]+)"
        Dim patternLocal As String = "(?<local>[A-Za-z\d:_.]+)"
        Dim patternForeign As String = "(?<foreign>[A-Za-z\d:_.]+)"
        Dim patternState As String = "(?<state>[A-Z_\d]+)"
        Dim patternPid As String = "?(?<pid>\d+)?"
а в них я ничего не понимаю

Добавлено через 3 часа 59 минут
jkrnd, можно ещё сплитом все это порубить
VB.NET
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
56
57
58
59
60
61
62
63
Dim out As String = ""
    Dim tmp As New ListBox
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim process As New Process()
 
        process.StartInfo.FileName = "netstat.exe"
 
 
        process.StartInfo.Arguments = "-aon"
 
 
        process.StartInfo.CreateNoWindow = True
        process.StartInfo.ErrorDialog = False
        process.StartInfo.RedirectStandardOutput = True
        process.StartInfo.UseShellExecute = False
 
        process.Start()
 
        process.WaitForExit(3000)
 
        out = process.StandardOutput.ReadToEnd()
        TextBox1.Text = out
        split_out(out)
    End Sub
    Sub split_out(ByVal output As String)
        Dim spl1() As String = Split(output, vbCrLf)
        tmp.Items.AddRange(spl1)
 
        For i = 4 To tmp.Items.Count - 1
 
            Dim res() As String = Split(format_string(tmp.Items.Item(i)), " ")
 
            If res.Count = 5 Then
                ListView1.Items.Add(Trim(res(1))).SubItems.AddRange(New String() {res(2), res(3), "", res(4), Process.GetProcessById(res(4)).ProcessName})
            ElseIf res.Count = 6 Then
                ListView1.Items.Add(Trim(res(1))).SubItems.AddRange(New String() {res(2), res(3), res(4), res(5), Process.GetProcessById(res(5)).ProcessName})
            End If
 
        Next
    End Sub
    Function format_string(ByVal output As String)
        Dim was_space As Boolean = False
        Dim result As String = ""
 
        For i = 0 To output.Length - 1
 
 
            If output(i) = " " Then
                If was_space = True Then
                    result &= ""
                Else
                    result &= output(i)
                End If
 
                was_space = True
            Else
                result &= output(i)
                was_space = False
            End If
 
        Next
        Return result
    End Function
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.04.2017, 18:13
Помогаю со студенческими работами здесь

Запуск zf на локальном компьютере
доброго времени пытаюсь освоиться с zf. дошел аж до установки, скачать - скачал! ...

Настройка БД на локальном компьютере
Имеется база данных с расширением .DAT, и программа редактирования и управления для неё. Не могу запустить на локальном ПК, по сетке...

Открытие порта на локальном компьютере
Здравствуйте. Подскажите пожалуйста. есть сервер и компьютеры входящие в домен, как с сервера открыть порты и интернет на определенных...

БД Access 2007 на локальном компьютере
БД Access 2007 находится на том же компьютере, что и сервер. Пишу (файл - bd.php): &lt;?php // Location to file $db =...

Поиск файлов на локальном компьютере
Доброго всем времени суток! Подскажите как на С++ получить список корневых директорий(С: , Е: и тд)?Есть какая-нибудь функция типа как...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru