cr07 Ответов: 1

Как я могу получить вывод из cmd.exe и выберите/сохраните определенное слово


Здравствуйте, я хотел бы иметь возможность запустить команду arp-a, а затем выбрать из выходных данных только ip-адрес после слова interface.

Запустив приведенный ниже код, я бы получил вывод, но я не могу сохранить только ip-адрес.
Вывод выглядит следующим образом:

Интерфейс:192.168.2.27 ---0xb
Интернет-Адрес Физический Тип Адреса
192.168.2.11 40-c6-45-d5-ft-98 динамический
и т.д.....

Я хотел бы получить 192.168.2.27 и сохранить его в памяти file.txt, так что это будет выглядеть так:
ИС=192.168.2.27

Спасибо Вам за любой совет!

Что я уже пробовал:

Dim oProcess As New Process()
       Dim psi As New ProcessStartInfo
       psi.FileName = "arp"
       psi.Arguments = "-a"
       psi.UseShellExecute = False
       psi.RedirectStandardOutput = True
       Dim p As Process = Process.Start(psi)
       Dim s As String = p.StandardOutput.ReadToEnd()

       MessageBox.Show(s)

       Dim lines As String() = IO.File.ReadAllLines("c:\file.txt")
       Dim line1 As String = lines()

       If lines(1).StartsWith("ip") Then
           lines(1) = "ip=" + (s)
           Dim filePath As String = "c:\file.txt"
           System.IO.File.WriteAllLines(filePath, lines)
       End If



       End Sub

cr07

Спасибо за ваш ответ. Я попробовал ваш код, но я получаю ошибку для "IP", идентификатор ожидаемый. Извините, но я новичок в этом деле и знаю не так уж много.
Я попробовал также: s = s.Split(" ".ToCharArray)(1) и я могу получить ip после интерфейса, но теперь я понял, что мне нужен первый ip после Интернет-адреса.

cr07

Хорошо, поэтому я исправил скобки на () и теперь работает, но я получаю в результате все после "интерфейса". Есть ли способ, которым я могу получить только ip-адрес из второго ряда? Спасибо.

1 Ответов

Рейтинг:
1

phil.o

Вы можете попробовать регулярное выражение, чтобы изолировать IP - адрес:

Import System.Text.RegularExpressions

'' ...

Dim r As Regex = New Regex("^Interface:(?<IP>[\d]{1,3}.[\d]{1,3}.[\d]{1,3}.[\d]{1,3})")
Dim m As Match = r.Match(s)
Dim ip As String = m.Groups["IP"].Value

Записи:
Регулярное выражение для значения IP является быстро построенным и будет соответствовать недопустимым IP-адресам (например, числам больше 255). Вы можете найти более точные регулярные выражения для IP-адресов, но они обычно довольно длинные.
Регулярное выражение находит только адреса IPv4; для IPv6 вам понадобится другое регулярное выражение.
Существует бесплатный инструмент под названием Экспрессо[^] что позволяет очень удобно строить и тестировать регулярные выражения.

Надеюсь, это поможет. Любезно.