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

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

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

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

netstat

Например проверяю порт открыт/закрыт так:
Листинг программы
  1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  2. BackgroundWorker1.RunWorkerAsync()
  3. End Sub
  4. Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
  5. Dim ip As New TcpClient()
  6. Try
  7. ip.Connect("127.0.0.1", "тут порт")
  8. Catch ex As Exception
  9. MsgBox("Порт закрыт")
  10. End Try
  11. If ip.Connected Then
  12. MsgBox("Порт открыт")
  13. End If
  14. ip.Close()
  15. End Sub
Поиск не дал результата. Заранее спасибо.

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

textual
Листинг программы
  1. Imports System.Text.RegularExpressions
  2.  
  3. Public Class Form1
  4.     Public Function Dos_Win(ByVal DosStr As String) As String
  5.         Dim bytes_in() As Byte
  6.         Dim bytes_out() As Byte
  7.  
  8.         bytes_in = System.Text.Encoding.GetEncoding(1251).GetBytes(DosStr)
  9.         bytes_out = System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding(866), System.Text.Encoding.GetEncoding(1251), bytes_in)
  10.         Dos_Win = System.Text.Encoding.GetEncoding(1251).GetString(bytes_out)
  11.  
  12.     End Function
  13.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  14.         ListBox1.Items.Clear()
  15.         Dim connect As System.Diagnostics.Process
  16.         connect = New System.Diagnostics.Process()
  17.         Dim arg As String = "netstat -a -n -o -p TCP" 'команда для получения списка
  18.         connect.StartInfo.FileName = "C:\Windows\System32\cmd.exe"
  19.  
  20.         connect.StartInfo.Arguments = "/k " & arg
  21.         connect.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
  22.         connect.StartInfo.UseShellExecute = False
  23.         connect.StartInfo.RedirectStandardOutput = True
  24.         connect.StartInfo.CreateNoWindow = True
  25.         connect.Start() 'запускаем
  26.         Dim result As String = connect.StandardOutput.ReadToEnd ' перенаправляем вывод
  27.         connect.WaitForExit()
  28.  
  29.         Dim res() As String = Split(Dos_Win(result), vbCrLf) ' полученную строку пилим по строкам и  заполняем listbox
  30.         For i = 0 To res.Count - 1
  31.             ListBox1.Items.Add(res(i))
  32.         Next
  33.         Dim res_string As String = ""
  34.         For i = 0 To ListBox1.Items.Count - 1
  35.             ListBox1.SelectedIndex = i
  36.             Dim sel As String = ListBox1.SelectedItem
  37.             If sel.Contains(":" & TextBox1.Text & " ") Then 'если выбранный элемент содержит введенный порт
  38.                 res_string = ListBox1.SelectedItem
  39.                 Dim nums() As String = (From M As Match In Regex.Matches(res_string, "\d+") Select M.Groups(0).Value).ToArray() ' заполняем массив nums всеми найденными числами
  40.                 TextBox2.Text = nums(nums.Count - 1) 'пишем в textbox2 последнее найденное число в строке это будет pid обьекта
  41.                 Dim localById As Process = Process.GetProcessById(TextBox2.Text)
  42.                 TextBox3.Text = localById.ProcessName ' пишем в textbox3 имя процесса, найденного по pid
  43.             End If
  44.         Next
  45.     End Sub
  46.  
  47. End Class

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


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

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

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы