Я использую каналы C2Intel для поиска конкретных наблюдаемых, и когда я это делаю, я хотел бы извлечь/вырезать строку.
Если вы перейдете по ссылке/CSV-файлу, я смогу найти конкретный IP-адрес, то есть — 54.161.191.72.
Я хотел бы вырезать всю строку:
www.e-enroll-benefits.com, возможный домен Cobalt Strike C2,/enrollmentinfo/,54.161.191.72
Поскольку каждая строка уникальна, я не уверен, как бы мне поступить в этом процессе. Я думал найти длину, но не знаю, как это сделать, поскольку она различается.
Вот мой текущий код:
ip_address = "54.161.191.72"
lines = "https://raw.githubusercontent.com/drb-ra/C2IntelFeeds/master/feeds/domainC2swithURLwithIP-filter-abused.csv"
for line in lines:
if re.match("ip_address", line):
values_slice = line.split(": ")[-1]#not sure how you get the whole row?
Ценю любую помощь или руководство. Заранее спасибо!
Я попробовал более простой подход, и он у меня работает. Вместо посещения URL-адреса я загрузил файл csv в локальную папку, в идеале в ту же папку, где запускается скрипт Python для сохранения шага «os.chdir». Пожалуйста, смотрите ниже:
import os
os.chdir('/Users/***/***/') # please update this path to where your csv file downloaded is
ip_address = '54.161.191.72'
lines = open('domainC2swithURLwithIP-filter-abused.csv')
for line in lines:
if ip_address in line:
print(line)
Ниже приведен результат, который я получил: Рад ответить на любые вопросы, которые могут у вас возникнуть. Ваше здоровье!
Этот процесс был великолепен, я смог использовать эту структуру, обновив пару переменных. Работает идеально! Спасибо
Спасибо, что поделились, и я рад, что это помогло!
Ваш код не извлекает файл перед его использованием. Кроме того, у вас уже есть вся строка line
, вам просто нужно ее распечатать.
Вот обновленная версия, которая каждый раз извлекает ссылку и печатает строку, содержащую заданный IP-адрес.
import requests
URL = "https://raw.githubusercontent.com/drb-ra/C2IntelFeeds/master/feeds/domainC2swithURLwithIP-filter-abused.csv"
ip_address = "54.161.191.72"
c2list = requests.get(URL).text
for line in c2list.split("\n"):
if ip_address in line:
print(line)
Этот код разбивает ответ на строки и проверяет каждую строку на наличие указанного IP-адреса.
RegEx не нужен, чтобы просто отфильтровать строку.
Используйте if re.search(<regex_string>, line):
, когда требуется более сложное сопоставление с образцом.
Я надеюсь, что это решило вашу проблему!
Спасибо за эту итерацию, я использовал детали, чтобы сделать свою окончательную версию. Ваше здоровье
Не совсем понимаю, что вы подразумеваете под «вырезать строку», поэтому предполагаю, что вы просто хотите найти строку (строку), имеющую определенное значение.
Ваши данные имеют формат CSV, так почему бы не использовать встроенный модуль CSV? В конце концов, оно для этого и существует.
Попробуй это:
import csv
import requests
url = "https://raw.githubusercontent.com/drb-ra/C2IntelFeeds/master/feeds/domainC2swithURLwithIP-filter-abused.csv"
ip = "54.161.191.72"
with requests.get(url) as response:
response.raise_for_status() # check HTTP response
lines = response.text.splitlines()[1:] # split text (CSV) response into lines skipping the first row (column headings)
reader = csv.reader(lines) # construct the reader
for i, row in enumerate(reader): # enumerate the reader
if row[-1] == ip: # check last column
print(lines[i])
break
Выход:
www.e-enroll-benefits.com,Possible Cobalt Strike C2 Domain,/enrollmentinfo/,54.161.191.72
Я предлагаю распечатать каждую «строчную» переменную. Это не то, что вы хотите. Поскольку файл не загружается.
lines
— это всего лишь строка из одной строки, поэтому вы перебираете символы этой строки.