REGEX и NETSTAT

Liroshka спросил: 13 июня 2018 в 05:12 в: python

У меня есть вывод netstat -nb в переменной (netstat_output). У меня есть IP-адрес в переменной (ip) и в порту (порт). Мне нужно выбрать программу, относящуюся к моему ip и порту. модель, о которой я думал, это: (ip +":" + str (порт) +"\ s. + \ s + [[. \ s] +]? [? (. +). exe]?" ). Теперь у меня есть 2 проблемы:

  1. что произойдет, если в программе нет '[' и ']?

  2. Что произойдет, если есть несколько ips, которые относятся к программе и мой ip в середине? Мне все еще нужно получить мою программу, и в строке, которую я написал в моем шаблоне, есть несколько нерелевантных строк ...


2 ответа

Liroshka ответил: 14 июня 2018 в 12:29
thx, я нашел шаблон, который работает эффективно: IP + ':' + PORT +"[^ [] + [(. +) \. exe]"
sln ответил: 13 июня 2018 в 07:24

Попробуйте что-то вроде:

Скомпонуйте регулярное выражение:

r"(?im)^[^\S\r\n]*(?:TCP|UDP)\b.*\b" 
+ ip + r":" + port 
+ r"\b.*\s+(?:^[^\S\r\n]*(?:TCP|UDP)\b.*\s+)*^[^\S\r\n]*\[*[^\S\r\n]*(\w+\.exe)"

Теперь выражение должно выглядеть примерно так:

r"(?im)^[^\S\r\n]*(?:TCP|UDP)\b.*\b52\.109\.88\.37:443\b.*\s+(?:^[^\S\r\n]*(?:TCP|UDP)\b.*\s+)*^[^\S\r\n]*\[*[^\S\r\n]*(\w+\.exe)"

Проверить его

https://regex101.com/r/Pykmbi/1

Результирующая программа находится в группе Capture 1

Readable regex version

 (?im)                                        # r"(?im)^[^\S\r\n]*(?:TCP|UDP)\b.*" +
 ^ [^\S\r\n]*                                
 (?: TCP | UDP )
 \b .*  \b 52 \. 109 \. 88 \. 37:443 \b .* \s+       # r"\b" + ip + r":" + port  r"\b.*\s+" + (?:                                          # r"(?:^[^\S\r\n]*(?:TCP|UDP)\b.*\s+)*" +
      ^ [^\S\r\n]* 
      (?: TCP | UDP )
      \b .* 
      \s+ 
 )* ^ [^\S\r\n]* \[* [^\S\r\n]*                  # r"^[^\S\r\n]*\[*[^\S\r\n]*(\w+\.exe)"
 ( \w+ \. exe )                               # (1)

Если вам не нужна вся структура указанного выше регулярного выражения, вы можете использовать это, которое при использовании IP / Port и EXE, дает вероятность успеха 99,9%.

r"(?is)\b" + ip + r":" + port 
+ r"\b.*?(\w+\.exe)"

дает

r"(?is)\b52\.109\.88\.37:443\b.*?(\w+\.exe)"

Test это

https://regex101.com/r/Pykmbi/2

sln ответил: 14 июня 2018 в 05:33
@ Лирошка - Не могу спорить с совершенством ..

Дополнительное видео по вопросу: REGEX и NETSTAT

Python Tutorial: re Module - How to Write and Match Regular Expressions (Regex)

Regular Expressions (Regex) Tutorial: How to Match Any Pattern of Text

Python 3 Programming Tutorial - Regular Expressions / Regex with re