Определить по порту имя программы - Visual Basic .NET
Формулировка задачи:
Всем добра.
Как мне определить программу по порту на своем ПК?
Вожу в TextBox1 порт (заранее уже известно что он открыт) жму кнопку и происходит вывод имени программы которая использует этот порт в TextBox2.
Что то на подобии консольной команды
Поиск не дал результата.
Заранее спасибо.
netstat
Например проверяю порт открыт/закрыт так:
Листинг программы
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- BackgroundWorker1.RunWorkerAsync()
- End Sub
- Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
- Dim ip As New TcpClient()
- Try
- ip.Connect("127.0.0.1", "тут порт")
- Catch ex As Exception
- MsgBox("Порт закрыт")
- End Try
- If ip.Connected Then
- MsgBox("Порт открыт")
- End If
- ip.Close()
- End Sub
Решение задачи: «Определить по порту имя программы»
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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д