Определить по порту имя программы - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Всем добра. Как мне определить программу по порту на своем ПК? Вожу в TextBox1 порт (заранее уже известно что он открыт) жму кнопку и происходит вывод имени программы которая использует этот порт в TextBox2. Что то на подобии консольной команды

netstat

Например проверяю порт открыт/закрыт так:
Поиск не дал результата. Заранее спасибо.

Решение задачи: «Определить по порту имя программы»

textual
Листинг программы
Imports System.Text.RegularExpressions
 
Public Class Form1
    Public Function Dos_Win(ByVal DosStr As String) As String
        Dim bytes_in() As Byte
        Dim bytes_out() As Byte
 
        bytes_in = System.Text.Encoding.GetEncoding(1251).GetBytes(DosStr)
        bytes_out = System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding(866), System.Text.Encoding.GetEncoding(1251), bytes_in)
        Dos_Win = System.Text.Encoding.GetEncoding(1251).GetString(bytes_out)
 
    End Function
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ListBox1.Items.Clear()
        Dim connect As System.Diagnostics.Process
        connect = New System.Diagnostics.Process()
        Dim arg As String = "netstat -a -n -o -p TCP" 'команда для получения списка
        connect.StartInfo.FileName = "C:\Windows\System32\cmd.exe"
 
        connect.StartInfo.Arguments = "/k " & arg
        connect.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
        connect.StartInfo.UseShellExecute = False
        connect.StartInfo.RedirectStandardOutput = True
        connect.StartInfo.CreateNoWindow = True
        connect.Start() 'запускаем
        Dim result As String = connect.StandardOutput.ReadToEnd ' перенаправляем вывод
        connect.WaitForExit()
 
        Dim res() As String = Split(Dos_Win(result), vbCrLf) ' полученную строку пилим по строкам и  заполняем listbox
        For i = 0 To res.Count - 1
            ListBox1.Items.Add(res(i))
        Next
        Dim res_string As String = ""
        For i = 0 To ListBox1.Items.Count - 1
            ListBox1.SelectedIndex = i
            Dim sel As String = ListBox1.SelectedItem
            If sel.Contains(":" & TextBox1.Text & " ") Then 'если выбранный элемент содержит введенный порт
                res_string = ListBox1.SelectedItem
                Dim nums() As String = (From M As Match In Regex.Matches(res_string, "\d+") Select M.Groups(0).Value).ToArray() ' заполняем массив nums всеми найденными числами
                TextBox2.Text = nums(nums.Count - 1) 'пишем в textbox2 последнее найденное число в строке это будет pid обьекта
                Dim localById As Process = Process.GetProcessById(TextBox2.Text)
                TextBox3.Text = localById.ProcessName ' пишем в textbox3 имя процесса, найденного по pid
            End If
        Next
    End Sub
 
End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы