Определить по порту имя программы - 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