LINUX.ORG.RU

Избранные сообщения vel

Git restore и git stash не убирают Changes not staged for commit:

Форум — Development

Не могу убрать сообщение про сабрепозиторий:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)
	modified:   modules/dclua/configs (modified content, untracked content)

Пробовал restore, stash, commit. Бесполезно :(

Из-за чего не могу выполнить stash apply.

 

steemandlinux
()

Лучший генератор речи из текста offline

Форум — General

Ранее пользовался rhvoice, но нашел качественнее - https://github.com/rhasspy/piper

Это лучшее, или есть еще варианты ?

 

x905
()

Telegram браузер по умолчанию

Форум — Desktop

Всем доброе утро. Юзаю дебиан 12 xfce. Не могу понять, как настроить браузер по умолчанию для открытия ссылок в телеграмм. В «приложениях по умолчанию» стоит яндекс браузер, который мне и нужен. Телеграмм открывает в firefox по стандарту, если поставить хромиум, то он берет инициативу на себя. Телеграмм пробовал с оф репы и flatpak.

Перемещено hobbit из general

 

copentry
()

Правило для udev: выполнять команду для текущей X-сессии при подключении мыши (Debian 12)

Форум — General

В продолжение Logitech Performance MX: настроить кнопку Zoom как среднюю кнопку мыши

Хочу, чтобы xinput set-button-map "$(xinput list --name-only | grep 'Logitech Performance MX' | xargs -I {} xinput list --id-only {})" 1 2 3 4 5 6 7 8 9 10 11 12 2 14 15 16 17 18 19 20 выполнялось всякий раз при подключении мыши (конкретной модели).

lsusb показывает её ID 062a:4101

Вначале была мысль, сделать правило для udev.

Создал такой /etc/udev/rules.d/PerformanceMX.rule с правами 0644:

ACTION=="add" ATTRS{idProduct}=="062a:4101", RUN+="xinput set-button-map $(xinput list --name-only | grep 'Logitech Performance MX' | xargs -I {} xinput list --id-only {}) 1 2 3 4 5 6 7 8 9 10 11 12 2 14 15 16 17 18 19 20"

Выполнил sudo udevadm control --reload-rules

Но это эффекта не даёт. Я думаю, дело в том, что xinput должен запускаться от текущего пользователя, а не root (может заодно и в том, что я правила для udev пишу неправильно).

Какое корректное решение?

 

eugrus
()

Как мониторить буст отдельных ядth CPU с amd_pstate=active?

Форум — Linux-hardware

Здравствуйте, товарищи.

Решил попробовать amd_pstate=active. В теории штука замечательная — процессор сам скейлит свою частоту в зависимости от нагрузки и может моментально перейти с минимальных «оборотов» на максимальные, не дожидаясь команды от ядра.

Но возникла вот такая проблема. Раньше с acpi_cpufreq я мог отслеживать частоту отдельных ядер в /proc/cpuinfo. Но с amd_pstate=active /proc/cpuinfo сообщает, что якобы только одно (нулевое) ядро разгоняется, а все остальные сидят на 550 MHz. Если бы это было так, то производительность в многопроцессных задачах должна была бы существенно просесть, чего не наблюдается.

Есть ли какой-то другой, более достоверный способ отслеживать частоту ядер?

 , ,

annulen
()

Поиск по кириллице в vim

Форум — General

Всех приветствую!

Часто редактирую в vim файлы с кириллицей. При необходимости выполнить поисковый запрос «/», соответственно, постоянно приходится переключать раскладку.

Вопрос в следующем : Может есть какая-то возможность назначить, скажем, на <leader>/ какой-то набор команд, который бы автоматом при входе в поисковый режим переключал раскладку на кириллицу, а затем, когда искомое найдено, возвращал обратно на латиницу?

Если быть точным, то использую не Vim, а Neovim.

 , ,

slava345
()

Vim8/9 + ctags, как поживаете?

Форум — Development

Галочка, ты щас умрёшь! После нескольких лет использования YCM он меня окончательно достал, своей жирнотой, тупаками и прочими отвалами с питонами. Да оно работает, но. Короче вернулся на ctags на самом деле я даже уже опопсел и забыл как его с вимом дружить, пришлось уточнять у гугла забытое.

Первую недельку я жил так

function UpdateTags()
    """""""""""""""""""""""""""""
    let projects = ["~/egnaroc/"] "сократил список до 1
    """""""""""""""""""""""""""""
    for proj in projects
        exec('!cd ' . proj . ' && ctags -R include') "  сократил вариации нахождения заголовков до 1
        tags+=proj . 'tags'
    endfor
endfunction

map <F12> :call UpdateTags() <CR>

Ну и как диды :tag tagname ctrl+] ctrl+t ctrl+x ctrl+o ctrl+p ctrl+n для подсказок прототипов, функций,структур, автодополнения и навигации по коду и файлам. (только gd) почему то не работает go declaration gf go file работает, но это надо с патчами ещё вспоминать ну да ладно.

Ну, чво, жопа то я ленивая надоело F12 нажимать и уже полез смотреть на плагины автоматизации ctags

Сначала накатил через Vundle

  "Plugin 'xolox/vim-easytags'
  "Plugin 'xolox/vim-misc'  "зависимость для easytags

Всё вроде хорошо, только вот есть нюанс, оно строит теги по FileType открыл файл *.c оно нагенерировало для него теги и закинуло в общий файл тегов или в файл проекта или/и для всего что в текущем каталоге где редактируемый файл. Удобно? Ну относительно, так как дабы поучить символы из заголовка где то в дебрях директорий надо до него ручками дойти открыть, потом вернутся и уже использовать там где был ранее нужные символы, да после десятка таких итераций весь проект будет проиндексирован, но блин надо изначально делать ctags -R ./ ибо смысл то что я могу прыгнуть из любого места кода проекта в любое по тегу. Короче морока, мало чем отличается от иногда нажать F12 и обновить все теги из всех заголовочных файлов проекта (и его зависимостей)

Ну единственное что удобно это оно именно что обновляет теги у редактируемого файла и это как бы дешевле чем всё обновлять, ноооо. Ладна потом ещё тройку попробовал (даже названия не помню) всё фигня и проще и удобнее руками теги создать 1 раз и обновлять иногда это.

Но я же ленивый поэтому ещё попробовал гутентагс, натюрлих и почти зер гуд квадратиш практиш

    Plugin 'ludovicchabant/vim-gutentags'

Это уже поинтереснее, можно указать так

let g:gutentags_project_root = ['~/egnaroc/','Makefile','.git']

И оно автоматически будет строить рекурсивно теги по этим «маркерам» оттуда где они есть, само автоматически инкрементально обновляя теги удаляя несуществующие, добавляя новые появившиеся. Ну тоесть если есть проект допустим используется git то просто найдя '.git' оно построит теги не по тому что есть в каталогах, а по тому что контролирует система версий (ну я так понял читая по диагонали). Короче работает, по триггерам определяет что каталог содержит проект и начинает само индексировать. Но вот тоже есть нюанс индексирует оно всё поэтому благо есть фильтр

let g:gutentags_ctags_exclude = [
    \ '.git',
    \ 'build',
    \ 'depends',
    \ 'docs',
    \ '.md',
    \ '.cache',
    \ 'tags',
    \ '.css',
    \ '.vim',
\]

Но лучше бы было типа gutentags_ctags_inclue ещё дабы явно задать некие правила что индексировать конкретно. И вот тут важное, оно то что я хочу автоматом индексирует проект, клёва, только вот беда, проект проектом, а есть ещё у нас всех /usr/include или ~/dev/depend1 ~/dev/depend2 из которых для проекта нужны заголовки (порой и не только), и как это разрешить в плагине? Н и к а к :( Иди ручками для внешних заголовочных файлов нагенерируй теги и отдельно подключай set tags+=~/теги_внешних_заголовков. Ну ещё до кучи supertab накатил. let g:SuperTabDefaultCompletionType = '<C-X><C-O>'

Вроде всё хорошо, но получается полумера какай то, как часто вы пишете код который ну полностью в себе и не нуждается во внешних файлах? Вот я про это вот и вот. По сути если чуть согнуть извилину то можно подумать что у нас в конкретном файле подключены заголовки и теги нужны только и только те которые соответствуют подключённым файлам заголовочным и вот к этим вот целям гутенгагса из ридми

Никакой другой зависимости, кроме запуска Vim: никакого Python, Ruby или чего-то еще.
Кроссплатформенность: должна работать, по крайней мере, на Ubuntu, Mac и Windows.
Инкрементная генерация тегов: не создавайте заново весь проект постоянно. Это может быть хорошо для небольших проектов, но это не масштабируется.
Управление внешним процессом: если процесс ctags занимает много времени, не запускайте другой, потому что я снова сохранил файл.
Поддерживайте согласованность файла тегов: не добавляйте просто теги текущего файла в файл тегов, иначе вы все равно будете "видеть" теги для удаленных или переименованных классов и функций.
Автоматически создайте файл тегов: вы открываете что-то из недавно разветвленного проекта, он должен начать индексировать это автоматически, точно так же, как в Sublime Text

Хочется ещё трассировку построения тегов по заголовочным файлам вглубъ, дабы не весь /usr/include сканировать (у меня тегов на 300 мегабайт выходит если всё сразу), а по зависимостям прыгать.

Ну пока вот как то так, а как вы поживаете с Vim и ctags кто чего использует, как, зачем и почему, какие проблемы. Вот хотелось бы со стороны тоже почитать, может чего подглядеть, может чего полезного узнаю :) Расскажите ::)

 , , , ,

LINUX-ORG-RU
()

SSH KEY менеджмент

Форум — Admin

Всем привет. Подскажите как вы делайте менеджмент ssh ключей, когда их более 40.

 

atel
()

nginx: переменная в ssl_certificate

Форум — General

Хочу в конфиге сделать что-то вроде такого:

server{
	server_name ^.*?\.(?<basename>.*?);
	...
	ssl_certificate /path/to/cert/$basename/cert.pem
}

Это позволило бы в одном месте конфига указать сертификаты сразу для нескольких доменов. В итоге переменная не применяется (хотя она точно непустая - проверял путём добавления её значения в заголовок ответа) - в логе сообщение о том, что по пути «/path/to/cert//cert.pem» сертификат не найден.

Версия nginx 1.21, версия модуля openssl 1.0.2k (built with OpenSSL 1.0.2k-fips 26 Jan 2017). Вроде переменные должны в этом месте поддерживаться с nginx 1.15.9 (у меня явно новее). И с версии openssl 1.0.2. Я как-то не так понимаю использование переменных в пути к сертификату?

 ,

Novascriptum
()

booty2 != booty 2.0

Форум — Talks

мемный заголовок))) ладно, теперь серьёзно. >:|

Я вернулся! И начал писать с нуля вторую версию своего имба-поделия под названием Booty. От слова Boot. Цель у этой штуки всего одна: лёгким движением пальцев рук создавать загрузочные образы операционных систем.

https://github.com/sp00f1ng/booty/tree/booty2 // Это пре-альфа версия, многие планируемые функции ещё не реализованы.

Сборка загрузочного образа состоит из трёх ключевых этапов: сборка ядра, сборка initramfs и сборка iso.

Система внутри — всегда ваша, любая, на выбор. Вы можете любую систему установить в директорию, в chroot, а потом закатать её в ISO всего одной командой booty chroot/, либо целиком весь /dev/sda упихать в загрузочный ISO или initrd, не суть важно. При этом, загружается система на ваш выбор, хоть в голое tmpfs, хоть в SquashFS + Overlay FS. Такая главная идея booty. Всё это уже реализовано в первой версии, но сейчас надо сделать _проще_.

Основные отличия от первой версии:

  • booty >= 2.0 теперь самостоятельно собирает ядро, проводя весь процесс «от» и «до»: скачает, распакует, соберёт, аккуратно положит куда надо.
  • Чёткое разделение на API и пользовательский интерфейс, то есть, каждая вызываемая функция теперь самодостаточна и может быть выполнена независимо от контекста: вы можете использовать интерфейс booty >= 2.0 по-отдельности для личных целей, например, собрать ядро последней версии.
  • Самая главная моя задача сделать booty >= 2.0 настолько юзер-френдли, насколько это в принципе возможно. Чтобы поведение предугадывалось и было логичным. Настолько, что запуск booty без каких-либо параметров всё равно выплюнет вам какой-нибудь загрузочный ISO, я пока только не решил, что в него складывать, но дело тривиальное задать все параметры по-умолчанию.

Например, запуск команды booty linux скачает ядро Linux последней версии, распакует, соберёт и установит во временную директорию.

Другие примеры:

booty linux 5.7.12 — соберёт ядро указанной версии.

booty linux --install-path / — соберёт ядро последней версии и установит прямо в /, так что если вы могли бы доверить свой / моей booty, этим можно пользоваться и вне контекста создания загрузочных образов. По-умолчанию же создаётся /tmp директория для --install-path, куда ядро будет установлено в любом случае.

Можно задать директорию для кэширования файлов, куда будут помещаться исходный код и собранные ядра. То есть, на каждый запуск booty вам не придётся ждать пока ядро скачается, или пока соберётся. Если вы собираете образы однотипных систем, то можете брать ядро из имеющегося кэша.

booty linux --cache /usr/src

Представим ситуацию:

1) Я хочу собрать 2 образа для сервера, и 8 образов для декстопа.

2) Ядро последней версии.

3) Конфиг разный.

booty linux 5.11.11 for-workgroups --config .config1 --cache /usr/src

booty linux 5.11.11 for-workstations --config .config2 --cache /usr/src

Ядра будут собраны ровно по одному разу, а далее, при повторном запуске сборки образов, они уже будут браться из кэша.

Грубо говоря-мягко выражаясь, запустив в цикле while true; do booty linux --cache /usr/src; done ядро будет загружено и собрано ровно один раз, а далее оно помещается в --cache, и при повторном запуске оно будет просто устанавливаться раз за разом во временную /tmp директорию. Так!

А ещё можно сделать принудительный --force-download и --force-rebuild если надо обновить данные в кэше.

А можно вообще не использовать кэш и каждый раз заново качать-собирать всё с нуля. Такое поведение по-умолчанию. Хозяин барин.

Другие команды:

booty linux_via_http версия имя --force-download --install-path путь, в будущем планируется добавить linux_via_git, но пока http и парсинг html-кода bash-скриптами работает стабильно, это не спеху. )))

booty linux_build директория-с-сорцами --config-file конфиг --install-path путь

booty ramdisk --image initrd.img для создания initramfs-образа, используя родные бинарники прямо из вашей системы. Опциональный busybox и другие плюшки будут прикручены уже апосля.

Вообще в этот раз планируется интерфейс делать примерно таким:

booty новая_папка(1)/ новая_папка(2)/ новая_папка(3)/ --profile overlayfs

И эта команда полностью, от и до, подготовит ядро, и упакует указанные директории в SquashFS, и в финале выплюнет загрузочный ISO с системой.

Простой запуск booty новая_папка(1)/ либо с указанием --profile initramfs приведёт к поведению по-умолчанию: упихать всю «новая_папка(1)» в initramfs-образ.

Теперь я планирую использовать профили, которые пользователи смогут создавать сами и расширять имеющиеся возможности booty.

Но на этом пока всё. Официальная документация — потом! Надо ещё много кода писать. =)

 

Spoofing
()

Помогите разобраться с radclient

Форум — Admin

Установил freeradius, прикрутил к нему mysql для авторизации, далее настройка DaloRadius.

root@radius:~# echo "User-Name=bruno,User-Password=boss123,Framed-IP-Address=1.2.3.4" | radclient localhost:1812 auth testing123
Sent Access-Request Id 27 from 0.0.0.0:33394 to 127.0.0.1:1812 length 51
Received Access-Accept Id 27 from 127.0.0.1:1812 to 127.0.0.1:33394 length 20

Вообще задание звучит так:

8) настроить выдачу дополнительных атрибутов в результате авторизации (например, Framed-IP-Address);
9) выполнить отправку аккаунтинг-запросов с помощью radclient: убедиться, что сессии в БД открываются (Start), обновляются (Interim-Update) и завершаются (Stop); разобраться с механизмом обработки запросов.

Атрибуты вроде добавляются но я не вижу их упоминания в выводе radtest и radclient

root@radius:~# radtest bruno boss123 localhost 0 testing123
Sent Access-Request Id 241 from 0.0.0.0:37079 to 127.0.0.1:1812 length 75
        User-Name = "bruno"
        User-Password = "boss123"
        NAS-IP-Address = 127.0.1.1
        NAS-Port = 0
        Message-Authenticator = 0x00
        Cleartext-Password = "boss123"
Received Access-Accept Id 241 from 127.0.0.1:1812 to 127.0.0.1:37079 length 20

Чем check attributes отличается от reply attributes

 

Shulman
()

Некоммутативное детское умножение

Форум — Talks

Суть, наверное, все знают. Кто не знает, вот картинка.

А теперь - разгадка! Оказывается, такое определение умножения вводится ещё в учебнике Бугаева за 1898 год! Нефиговое легаси.

Оказывается, объяснение у них есть, и довольно строгое.

Есть «детское» и «взрослое» умножение.

«Детское» умножение - это тоже двухместная операция, но на этом сходства заканчиваются.

«Детское» умножение - это двухместная операция, в которой на первом месте стоит объект реального мира (называемый «множимое»), а на втором месте - число (называемое «множитель»).

Если ты на первое место поставишь число, то у учителя в голове случится type error и компиляция сломается. По той же причине нельзя записать два объекта с размерностями в оба регистра.

«Взрослое» умножение им ещё рано изучать. Потому что это сложно.

Сложно это потому, что для того, чтобы использовать умножение в числах, нужно научиться абстрагировать задачу от конкретных «предметных» вещей вроде «разложить по 3 сырника на 2 тарелки» - в формат операций над числами. Абстрагирование - это сложно.

Вторая важный постулат в их логике в том, что им хочется иметь размерности. Например, раскладывая по 3 сырника на 2 тарелки, мы в идеале получаем запись: «3 сырника/тарелки * 2 тарелки = 6 сырников».

Но к сожалению, запись со сложными размерностями вида «сырник/тарелки» недоступна детям 2 класса. А в результате вычислений преподавателям всё-таки хочется убедиться, что при умножении 3 сырников на 2 тарелки у людей получатся именно «6 сырников», а не какая-нибудь дичь вроде «6 сырник-тарелок»

Вот такое объяснение, которое никто не просил, но я не мог не написать здесь

 ,

stevejobs
()

cross тулчейн

Форум — General

Собираю buildroot. У меня в системе установлен arm-none-eabi-gcc, которым я собирал ядро и загрузчик. buildroot же мне предлагает или собирать весь тулчейн с нуля, или же брать внешний тулчейн, в который уже входит libc и прочее.

А нельзя как-нибудь в рамках buildroot взять компилятор и линковщик из arm-none-eabi, и чтобы билдрут ими собрал libc и прочее? Неохота долго компилировать gcc

 

cvs-255
()

rsync - исключить из синхронизации каталог со специальным файлом

Форум — Admin
dir1
└── dir2
    └── .nosync

Как элегантно синхронизировать dir1, но пропустить все подкаталоги, содержащие файл .nosync?

 

aquadon
()

Squid в режиме HTTPS Forwarder

Форум — Admin

День добрый!

Давно стоит Сквид в режиме форвардера и все работает но тут появилась задача коннектиться к нему по HTTPS из локалки. При этом использовать самоподписанный сертификат с установкой на машины клиентов. Взял официальное вики https://wiki.squid-cache.org/ConfigExamples и начал настраивать.

Прекрасно работает следующее правило:
https_port 8.8.8.8:64000 tls-cert=/etc/letsencrypt/.../fullchain.pem tls-key=/etc/letsencrypt/.../privkey.pem

А вот это не работает c ошибкой PROXY_CERTIFICATE_INVALID:
https_port 10.10.10.10:64002 tls-cert=/etc/squid/squidCA.pem

В первом случае как вы понимаете letsencrypt а во втором самоподписанный сертификат для работы по IP. Сертификат делал через openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -extensions v3_ca -keyout myCA.pem -out myCA.pem потом перекинул в .der и установил как корневой на клиенте. В сертификате на всякий случай ЗАПОЛНЕНЫ ВСЕ ПОЛЯ, в т.ч. DN.

Все то же самое но как прозрачный прокси через intercept ssl-bump прекрасно работает, так же все работает если поднимать http_port вместо https_port с теми же настройками но я хочу шифровать как уже говорил и до прокси тоже.

Полный конфиг: https://pastebin.com/Bfwb1a2K Squid 4.6 собранный с SSL на Debian 11.

Что я делаю не так?

 , ,

FourtyTwo
()

Шоткат для ssh туннелей

Форум — Admin

Может есть какая то утилита, что бы поменьше boilerplate кода писать при создании ssh туннелей и автоматизации этого процесса?

 , ,

pon4ik
()

Распределение трафика в одном классе htb

Форум — Admin

Исходные данные: есть ограниченная полоса, для управления трафиком пользователей используется шейпер, созданный с помощью tc, дисциплина htb. Полоса делится на несколько классов с разными приоритетами. Для помещения трафика в каждый класс используется фильтрация по IP пользователя. В каждый класс помещается несколько пользователей. Распределение между классами замечательно работает.

Проблема: ожидается что в пределах одного класса полоса будет делиться между пользователями примерно равномерно. Т.е. классу в данный момент доступно, допустим, 12 мб/с, в нем три пользователя. Один пользователь может занять все 12, если работают двое - каждому достанется по 6, если трое - каждому по 4. По факту так не получается. Выделяемая полоса зависит от количества сессий. Один пользователь может запустить какой-нибудь торрент и съест практически всю полосу, выделенную классу, а двум другим, которые хотят, например, почитать почту, не остается почти ничего.

Пример создания класса:

#/sbin/tc class add dev eth0 parent 1:2 classid 1:20 htb rate 8000Kbit ceil 12000Kbit prio 1

# /sbin/tc qdisc add dev eth0 parent 1:20 handle 20 sfq perturb 10

# /sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 172.16.0.1/32 classid 1:20

# /sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 172.16.0.2/32 classid 1:20

# /sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 172.16.0.3/32 classid 1:20

Нужно, чтобы когда работают все трое (172.16.0.1, .2, .3) каждому доставалось примерно по 4 Мбит. А не так, чтобы 1 запустил 100 сессий и съел всё, а 2 и 3 запустили по одной сессии и ничего не получают. Предположительно здесь можно применить flow hash в filter, но пока не понимаю как. Мануалы читал, но в голове сумбур.

Отягчающие обстоятельства: По условиям эксплуатации сети приоритизация допустима только по IP пользователей, устраивать приоритизацию по типам сервисов (почта, серфинг, торрент и т.п.) - не предлагать. Создавать отдельный класс для каждого пользователя - выход, но плохой (наоборот, хочется от этого уйти по ряду причин).

 , , ,

mik73
()

tc shaper & vlan = багофича?

Форум — Admin

1) Вешаем шейпер на какой-нибудь сетевой интерфейс (ethX,bondX)

2) создаем в нем vlan-ы

3) обнаруживаем, что трафик идущий в vlan-ы шейпится!

С одной стороны трафик vlan-а никаким местом не относится к «родительскому» интерфейсу .

С другой стороны - халявный шейпер на несколько подсетей без потусторонних сил типа imq/ifb

А в варианте с native-vlan ограничение трафика становится более интересной задачей.

 , ,

vel
()

nDPI как замена l7filter [продолжение]

Форум — Admin

Продолжение длинной истории

Оригинальный рецепт для тех кто умеет самостоятельно прикладывать патчи и собирать ядра/софт.

Отдельно и более подробно для Ubuntu и CentOS от as_lan

На большом потоке ( ~300мбит/с ) cо всеми протоколами используется примерно 50-60% одного ядра Intel(R) Xeon(R) CPU E31230@3.20GHz. Если поток больше или процессор слабее, то включаем RPS или используем сетевые карты с multi-queue и irq-affinity. У меня оно тестируется на трафике до 400Мбит/~100к conntrack/~90kpps для x86 и x86_64.

В понятиях netfilter оно умеет проверять пакеты на принадлежность к протоколам (match) и ставить на пакеты метки/классы (target) по аналогии с MARK & CLASSIFY. Есть поддержка NET_NS и IPv6.

Требуется много памяти. На каждое соединение расходуется примерно ~850+280*0.7 байт. Этот объем варьируется в зависимости от 32/64 бита, с/без IPv6.

Исходники теперь есть на https://github.com/vel21ripn/nDPI/tree/netfilter

От основной ветки на github/ntop/nDPI/1.7-stable отличается меньшим потреблением памяти и «улучшением» определения bittorrent.

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

 , ,

vel
()