• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья TXT MultiTool или комбайн для работы со строками в текстовых файлах

я думаю ты прав и по тупому около вайтово ссать на ветер попадая себе на лицо - хихикать над красным скрином вт достаточно выгодно и жизнеспособно
Ну у меня та же версия, что и по ссылке выше, тот же детект всмысле, но них.я там нет по факту.
 
было бы классно
сортер логинов и паролей по определенному домену)
Что мешает воспользоваться функцией: 6. Отсортировать по доменам ?
Ну так конечно я понимаю чего ты хочешь, делать поиск по строке домена и вытягивать. Типа передаешь аргумент с доменом и алгоритм делает поиск по домену в строках вытаскивая их. Ну на это можно воспользоваться функцией извлечь Email или пароли....если у тебя лог разделен на delimiter в строках: :, |, / и т.д. А дальше уже пройтись сортером по домену в режиме на каждый домен отдельный файл. Ну хотя возможно ты и прав, если лог большой не совсем удобно это делать. Я подумаю на досуге. Может в будущем добавлю режим который будет конкретно вытаскивать только по определенному домену заданным пользователем. В общем да, мысль грамотная.
 
Последнее редактирование:
UPD. Version 0.9.1:
Добавлен модуль чистки строк в текстовом файле не содержащий латинские буквы, работает в 3-х режимах. Подробно описал в старт-посте.

Интерфейс работы:
1733063558899.jpeg


P.S. Просьба потестить по возможности, на моей генерке в 2 гигабайта вроде всё работает правильно, предупреждение: не забывайте сохранять бэкапы своих файлов =)
P.S.S. Возможно надо было сделать выбор через инпут все спецсимволы которые нужно учитывать во втором режиме, но это пока черновой вариант. Пока нужно реализовать весь функционал по моему составленному ТЗ и плану, а потом доработать. Кому надо можете в строке условия модуля в функции "is_latin_line: allowed_chars += "@._-"" ввести символы которые вам нужны при отработке файла.
 
Последнее редактирование:
UPD. Version 0.9.2:
Добавлен функционал построчного копирования строк из текстового файла, подробности в стартовом посте. Работает в двух режимах: Полное копирование строк из файла или по выбранному диапазону.

Примеры работы:
1733314969464.png

1733315093817.png
 
Объясните плиз что в софте от Lays выполняет функция "Нормализатор баз". Что она нормализует и по какому принципу работает? Мне что-то лень виртуалку поднимать для его запуска. =)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Объясните плиз что в софте от Lays выполняет функция "Нормализатор баз". Что она нормализует и по какому принципу работает? Мне что-то лень виртуалку поднимать для его запуска. =)
Если я не ошибаюсь, то приводит базу в нужный формат (не пользовался этим софтом, сужу по Crystal Sorter). Например, у тебя база формата {log:pass:link}, а тебе нужно {link:log:pass} и т.д.
 
Если я не ошибаюсь, то приводит базу в нужный формат (не пользовался этим софтом, сужу по Crystal Sorter). Например, у тебя база формата {log:pass:link}, а тебе нужно {link:log:pass} и т.д.
верно, он отсеивает все строки не подходящие под формат mail:pass, но TextUtils очень плохо нормализует, удаляет некоторые строки со спец. символами, не нужно брать с него пример
 
UPD. Version 0.9.3.1:
было бы классно
сортер логинов и паролей по определенному домену)
В функционал сортировки по домену добавлен режим filter_domains, указывать можно как списком через запятую так и просто указать требуемый домен для последующего экспорта. Интерфейс работы модуля:

1733511798018.png


P.S. Веду работу над нормализатором.
 
Последнее редактирование:
UPD. Version 0.9.4:
Добавлен функционал нормализатора строк. Работает в 4-х режимах:
  1. Форматирование строк (format) - выполняет форматирование строк в экспортируемый файл, указываете разделитель строки входящего файла и их формат к примеру "ip:mail:pass", указываете нужный формат "mail:pass:ip" на выходе волучаете отформатированные строки.
    1. format_string.jpg
  2. Фильтрация строк по формату (filter) - указываете разделитель, и формат тех строк которые нужно вытащить из файла, например только mail:pass, на выходе получаете отфильтрованные строки из файла.
    1734079841988.jpeg
  3. Очистка строк от спецсимволов (clean) - указываете спецсимволы которые вы хотите почистить из строк, на выходе получаете файл со строками без спецсимволов указанных алгоритму.
    1734079858416.png
  4. Обрезка строк по длине (trim) - указываете диапазон по какой длине отсеивать строки в экспортируемый файл, получаете файл со строками по указанному количеству символов диапазона.
    1734079870709.png
Код модуля (не влез в стартовый пост):

Python:
import os
import logging
import time
from colorama import Fore

# Настройка логгера
logger = logging.getLogger(__name__)
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s - %(message)s",
    handlers=[
        logging.StreamHandler(),
        logging.FileHandler("normalize_base.log", encoding="utf-8")
    ]
)

def normalize_lines(input_file: str, output_file: str, mode: str, delimiter: str, input_format: str = None,
                     format_order: str = None, valid_format: str = None, min_len: int = None, max_len: int = None, exclude_chars: str = None):
    """
    Нормализация строк файла в зависимости от заданного режима.

    :param input_file: Путь к входному файлу
    :param output_file: Путь к выходному файлу
    :param mode: Режим работы ("format", "filter", "clean", "trim")
    :param delimiter: Разделитель строк
    :param input_format: Формат входящих строк для режима "format" (например, "log:pass:link")
    :param format_order: Новый формат для режима "format" (например, "link:log:pass")
    :param valid_format: Формат для фильтрации строк в режиме "filter" (например, "mail:pass")
    :param min_len: Минимальная длина строки для фильтрации в режиме "trim"
    :param max_len: Максимальная длина строки для фильтрации в режиме "trim"
    :param exclude_chars: Набор символов, которые нужно исключить из строки (для режима "clean")
    """
    start_time = time.time()
    processed_lines = 0
    valid_lines = 0
    logger.info(f"Начало обработки. Режим: {mode}, Входной файл: {input_file}, Выходной файл: {output_file}")

    try:
        # Проверка выходной директории
        output_dir = os.path.dirname(output_file)
        if output_dir and not os.path.exists(output_dir):
            logger.info(f"Выходная директория {output_dir} не найдена. Создаём её.")
            os.makedirs(output_dir)

        with open(input_file, 'r', encoding='utf-8', errors='replace') as infile, \
             open(output_file, 'w', encoding='utf-8', errors='replace') as outfile:

            for line in (l.strip() for l in infile):
                processed_lines += 1

                if mode == "format":
                    # Проверка формата входящих строк и их переформатирование
                    input_keys = input_format.split(delimiter)
                    parts = line.split(delimiter)
                    if len(parts) == len(input_keys):
                        format_keys = format_order.split(delimiter)
                        reordered = delimiter.join(parts[input_keys.index(key)] for key in format_keys)
                        valid_lines += 1
                        yield reordered

                elif mode == "filter":
                    # Фильтрация строк по формату
                    parts = line.split(delimiter)
                    valid_keys = valid_format.split(delimiter)
                    if len(parts) == len(valid_keys):
                        valid_lines += 1
                        yield line

                elif mode == "clean":
                    # Очистка строки от пробелов и исключённых символов
                    if exclude_chars:
                        cleaned_line = ''.join(c for c in line if c not in exclude_chars).strip()
                    else:
                        cleaned_line = line.strip()
                    valid_lines += 1
                    yield cleaned_line

                elif mode == "trim":
                    # Отсечение строк по длине
                    if min_len <= len(line) <= max_len:
                        valid_lines += 1
                        yield line

    except Exception as e:
        logger.error(f"Ошибка обработки: {e}")

    finally:
        elapsed_time = time.time() - start_time
        logger.info(f"Обработка завершена за {elapsed_time:.2f} секунд.")
        logger.info(f"Всего строк обработано: {processed_lines}")
        logger.info(f"Строк, соответствующих условиям: {valid_lines}")

def process_lines(input_file, output_file, **kwargs):
    try:
        # Проверка выходной директории
        output_dir = os.path.dirname(output_file)
        if output_dir and not os.path.exists(output_dir):
            logger.info(f"Выходная директория {output_dir} не найдена. Создаём её.")
            os.makedirs(output_dir)

        processed_lines = 0
        with open(output_file, 'w', encoding='utf-8', errors='replace') as outfile:
            for line in normalize_lines(input_file, output_file, **kwargs):
                outfile.write(line + '\n')
                processed_lines += 1

        logger.info(f"Всего строк записано в файл: {processed_lines}")
    except Exception as e:
        logger.error(f"Ошибка при обработке строк: {e}")

if __name__ == "__main__":
    while True:
        print(Fore.YELLOW + "\nВыберите режим обработки:")
        print(Fore.LIGHTMAGENTA_EX + "1. Форматирование строк (format)")
        print(Fore.LIGHTCYAN_EX + "2. Фильтрация строк по формату (filter)")
        print(Fore.LIGHTRED_EX + "3. Очистка строк от спецсимволов (clean)")
        print(Fore.LIGHTBLUE_EX + "4. Обрезка строк по длине (trim)")
        print(Fore.LIGHTGREEN_EX + "0. Выход.")

        choice = input("Введите номер режима: ").strip()

        if choice == "1":
            mode = "format"
            input_file = input("Введите путь к входному файлу: ").strip()
            output_file = input("Введите путь к выходному файлу: ").strip()
            delimiter = input("Введите разделитель: ").strip()
            input_format = input("Введите ожидаемый формат входящей строки (например, log:pass:link): ").strip()
            format_order = input("Введите новый порядок формата (например, link:log:pass): ").strip()
            process_lines(input_file, output_file, mode=mode, delimiter=delimiter, input_format=input_format, format_order=format_order)

        elif choice == "2":
            mode = "filter"
            input_file = input("Введите путь к входному файлу: ").strip()
            output_file = input("Введите путь к выходному файлу: ").strip()
            delimiter = input("Введите разделитель: ").strip()
            valid_format = input("Введите допустимый формат (например, mail:pass): ").strip()
            process_lines(input_file, output_file, mode=mode, delimiter=delimiter, valid_format=valid_format)

        elif choice == "3":
            mode = "clean"
            input_file = input("Введите путь к входному файлу: ").strip()
            output_file = input("Введите путь к выходному файлу: ").strip()
            exclude_chars = input("Введите символы для исключения (например, !@#$%^&*): ").strip()
            process_lines(input_file, output_file, mode=mode, delimiter=None, exclude_chars=exclude_chars)

        elif choice == "4":
            mode = "trim"
            input_file = input("Введите путь к входному файлу: ").strip()
            output_file = input("Введите путь к выходному файлу: ").strip()
            min_len = int(input("Введите минимальную длину строки: ").strip())
            max_len = int(input("Введите максимальную длину строки: ").strip())
            process_lines(input_file, output_file, mode=mode, min_len=min_len, max_len=max_len)

        elif choice == "0":
            print("Выход из программы.")
            break

        else:
            print("Неверный выбор. Попробуйте снова.")
 
Последнее редактирование:
цены не будет, если сделаешь такое контекстное меню
Сделал отдельную версию для работы с контекстным меню для виндузятников (Тестировалось на Win 10 64bit). Учтите, что для работы утилит требуется рабочий интерпретатор в операционной системе, имхо это не совсем безопасно. Перед установкой петухона не забудьте поставить галочку:
1734195098124.jpeg


Есть 2 версии меню, одни модули работают только на файлах, другие (сравнение, объеденение текстовиков) только на папках.

На файлах меню выглядит так:
1734195320229.png


На папках так:
1734195400664.png


Установка:
1. Распакуйте архив в C:\MultitoolTXT\
Должно быть как-то так:
1734195513866.png

2. Запустите файл от имени администратора (не обязательно, но желательно) - install.bat, обязательно перед этим установите петухон с официального сайта (тестировал на версии 3.13.1) и не забудьте поставить галочку перед установкой "Add python.exe to PATH".
3. Если все успешно запустилось, у вас в контекстном меню должны появится все пункты для работы с текстовиками (показаны на скриншотах выше).

P.S. Если что-то не работает, просьба отписаться.

Видео по тестам отработки (поверхностное):

 

Вложения

  • MultitoolTXT_context_menu_win.zip
    42.7 КБ · Просмотры: 66
Последнее редактирование:
Сделал отдельную версию для работы с контекстным меню для виндузятников (Тестировалось на Win 10 64bit). Учтите, что для работы утилит требуется рабочий интерпретатор в операционной системе, имхо это не совсем безопасно. Перед установкой петухона не забудьте поставить галочку:
Посмотреть вложение 100099

Есть 2 версии меню, одни модули работают только на файлах, другие (сравнение, объеденение текстовиков) только на папках.

На файлах меню выглядит так:
Посмотреть вложение 100100

На папках так:
Посмотреть вложение 100101

Установка:
1. Распакуйте архив в C:\MultitoolTXT\
Должно быть как-то так:
Посмотреть вложение 100102
2. Запустите файл от имени администратора (не обязательно, но желательно) - install.bat, обязательно перед этим установите петухон с официального сайта (тестировал на версии 3.13.1) и не забудьте поставить галочку перед установкой "Add python.exe to PATH".
3. Если все успешно запустилось, у вас в контекстном меню должны появится все пункты для работы с текстовиками (показаны на скриншотах выше).

P.S. Если что-то не работает, просьба отписаться.

Видео по тестам отработки (поверхностное):

отлично ! Сделал большую работу !
 
Возможно ли интегрировать функцию, для поиска regex'ом по директориям.
На вин сервере, на больших файлах вечные траблы, dngrep тоже отказывается из .sql мыла доставать.
Или может кто посоветует утилиту, для таких дел.
 
Возможно ли интегрировать функцию, для поиска regex'ом по директориям.
TREE это умеет, если не ошибаюсь. Отдаст дерево.

На вин сервере, на больших файлах вечные траблы, dngrep тоже отказывается из .sql мыла доставать.
Большие файлы чего? Если поиск в sql то это тоже самое что txt.
Твои задачи в полной мере закроет PowerShellToolKit
 
подскажите, а чем можно обработать два списка ипов, что бы удалять чистить дубли ипов которые содкержаться в списке в котором строки шире чем просто список ип
ну в общем задача удалить строки слодержащие определенные строки из другого текста
 
подскажите, а чем можно обработать два списка ипов, что бы удалять чистить дубли ипов которые содкержаться в списке в котором строки шире чем просто список ип
ну в общем задача удалить строки слодержащие определенные строки из другого текста
может сначала почистить эти списки от лишнего, а потом удалять дубли ?
 
может сначала почистить эти списки от лишнего, а потом удалять дубли ?
если удалить лишнее то потеряется изначальное значение
у меня к примеру списки 10k с хттпс:\\site1\loginuuiop
хттпс:\\site1\loginin
хттпс:\\site2\loginon
хттпс:\\site3\logintv

и есть список site1 site2 site3
как мне удалить строки хттпс по списку который без хттпс
 
если удалить лишнее то потеряется изначальное значение
у меня к примеру списки 10k с хттпс:\\site1\loginuuiop
хттпс:\\site1\loginin
хттпс:\\site2\loginon
хттпс:\\site3\logintv

и есть список site1 site2 site3
как мне удалить строки хттпс по списку который без хттпс

я вобще пихарь а не питунчик, поэтому если всего 10к строк, то вот тебе пхп скриптик:

PHP:
<?php

function my_filter($var) {
    global $DELS;
    foreach ($DELS as $value) {
        $pos = stripos($var, $value);
        if ($pos !== FALSE) return FALSE;
    }
    return TRUE;
}

$URLS = file('urls.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$DELS = file('dels.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$RESULT = array_filter($URLS, "my_filter");
file_put_contents('result.txt', implode("\r\n", $RESULT));

?>

извиняюсь перед тс если флудим в его топике.
 
или вот немного улучшеная версия, но работает конкретно только с урлами.
прошлая может работать слюбыми строками, но на урлах у неё в теории могут быть ошибки.
PHP:
<?php

function my_filter($url) {
    global $DELS;
    foreach ($DELS as $value) if (strtolower(parse_url($url, PHP_URL_HOST)) === strtolower($value)) return FALSE;
    return TRUE;
}

$URLS = file('urls.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$DELS = file('dels.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$RESULT = array_filter($URLS, "my_filter");
file_put_contents('result.txt', implode("\r\n", $RESULT));

?>
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх