<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://178.140.10.58:8080/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://178.140.10.58:8080/feed.php">
        <title>Библиотека знаний - network</title>
        <description>Заметки IT программиста</description>
        <link>http://178.140.10.58:8080/</link>
        <image rdf:resource="http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg" />
       <dc:date>2026-04-16T22:15:01+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=network:kubernetes"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=network:netstat"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=network:nmap"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=network:owasp-zap"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=network:sqlmap"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=network:squid"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=network:tor"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=network:transmission"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg">
        <title>Библиотека знаний</title>
        <link>http://178.140.10.58:8080/</link>
        <url>http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
    </image>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=network:kubernetes">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-19T12:19:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Kubernetes</title>
        <link>http://178.140.10.58:8080/doku.php?id=network:kubernetes</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:kubernetes&amp;amp;do=showtag&amp;amp;tag=%5Bkubernetes%5D&quot; class=&quot;wikilink1&quot; title=&quot;tag:kubernetes&quot; rel=&quot;tag&quot;&gt;[kubernetes]&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;kubernetes&quot;&gt;Kubernetes&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Kubernetes&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;kubernetes&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;23-48&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;k3s&quot;&gt;k3s&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/detail.php?id=network%3Akubernetes&amp;amp;media=network:how-it-works-k3s-revised.svg&quot; class=&quot;media&quot; title=&quot;network:how-it-works-k3s-revised.svg&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?w=600&amp;amp;tok=a66854&amp;amp;media=network:how-it-works-k3s-revised.svg&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;k3s&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;k3s&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;49-115&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;k8s&quot;&gt;k8s&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/detail.php?id=network%3Akubernetes&amp;amp;media=network:1_ksrh4t8s1ymauhbpgq3ylw.webp&quot; class=&quot;media&quot; title=&quot;network:1_ksrh4t8s1ymauhbpgq3ylw.webp&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?w=600&amp;amp;tok=856000&amp;amp;media=network:1_ksrh4t8s1ymauhbpgq3ylw.webp&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;k8s&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;k8s&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;116-182&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;устанока&quot;&gt;Устанока&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=system:minikube&quot; class=&quot;wikilink1&quot; title=&quot;system:minikube&quot; data-wiki-id=&quot;system:minikube&quot;&gt;Minikube&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=system:kind&quot; class=&quot;wikilink1&quot; title=&quot;system:kind&quot; data-wiki-id=&quot;system:kind&quot;&gt;Kind&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=system:helm&quot; class=&quot;wikilink1&quot; title=&quot;system:helm&quot; data-wiki-id=&quot;system:helm&quot;&gt;Helm&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=system:podman&quot; class=&quot;wikilink1&quot; title=&quot;system:podman&quot; data-wiki-id=&quot;system:podman&quot;&gt;Podman&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0441\u0442\u0430\u043d\u043e\u043a\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u0441\u0442\u0430\u043d\u043e\u043a\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;183-302&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;компоненты&quot;&gt;Компоненты&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=system:kubernetes:services&quot; class=&quot;wikilink1&quot; title=&quot;system:kubernetes:services&quot; data-wiki-id=&quot;system:kubernetes:services&quot;&gt;Сервисы Kubernetes&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;303-373&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;проекты&quot;&gt;Проекты&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=application:reana&quot; class=&quot;wikilink1&quot; title=&quot;application:reana&quot; data-wiki-id=&quot;application:reana&quot;&gt;Reana&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u043e\u0435\u043a\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u043e\u0435\u043a\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;374-429&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;авторизация&quot;&gt;Авторизация&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;$ yc managed-kubernetes cluster get-credentials --id [id] --internal&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;430-550&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;компоненты1&quot;&gt;Компоненты&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit9&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 leftalign&quot;&gt; Компоненты                                                                                                      &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  Описание                                                                                                                                                                                                                                  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; etcd &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Распределенное надежное хранилище ключей и значений для наиболее важных данных распределенной системы                                                                                                                                      &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; kubelet&lt;br/&gt;
kubeadm&lt;br/&gt;
kube-apiserver&lt;br/&gt;
kube-controller-manager&lt;br/&gt;
kube-proxy&lt;br/&gt;
kube-scheduler&lt;br/&gt;
kubectl  &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;                                                                                                                                                                                                                                            &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;a href=&quot;https://github.com/containerd/containerd&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/containerd/containerd&quot; rel=&quot;ugc nofollow&quot;&gt;containerd&lt;/a&gt;                                                         &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Это стандартная в отрасли среда выполнения контейнера. Управляет полным жизненным циклом контейнера своей хост-системы: передача и хранение образов, выполнение и контроль контейнера, низкоуровневое хранение и сетевые вложения и т. д.  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;a href=&quot;https://github.com/opencontainers/runc&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/opencontainers/runc&quot; rel=&quot;ugc nofollow&quot;&gt;runc&lt;/a&gt;                                                                 &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; CLI-инструмент для создания и запуска контейнеров в соответствии со спецификацией OCI                                                                                                                                                      &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;585-2605&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b1&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;551-2608&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;репозитории&quot;&gt;Репозитории&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://github.com/etcd-io/etcd&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/etcd-io/etcd&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/etcd-io/etcd&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://github.com/kubernetes/kubelet&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/kubernetes/kubelet&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/kubernetes/kubelet&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;2609-2723&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;документы&quot;&gt;Документы&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://habr.com/ru/companies/aenix/articles/544390/&quot; class=&quot;urlextern&quot; title=&quot;https://habr.com/ru/companies/aenix/articles/544390/&quot; rel=&quot;ugc nofollow&quot;&gt;https://habr.com/ru/companies/aenix/articles/544390/&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://habr.com/ru/companies/otus/articles/809941/&quot; class=&quot;urlextern&quot; title=&quot;https://habr.com/ru/companies/otus/articles/809941/&quot; rel=&quot;ugc nofollow&quot;&gt;https://habr.com/ru/companies/otus/articles/809941/&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;2724-2869&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;видео_уроки&quot;&gt;Видео уроки&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://www.youtube.com/watch?v=sLQefhPfwWE&quot; class=&quot;urlextern&quot; title=&quot;https://www.youtube.com/watch?v=sLQefhPfwWE&quot; rel=&quot;ugc nofollow&quot;&gt;Введение в Kubernetes на примере Minikube&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u0438\u0434\u0435\u043e \u0443\u0440\u043e\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u0438\u0434\u0435\u043e_\u0443\u0440\u043e\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;2870-3017&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;ссылки&quot;&gt;Ссылки&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table&quot;&gt;&lt;table class=&quot;ul plgn__pglist&quot;&gt;&lt;tr&gt;&lt;td class=&quot;image&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class=&quot;page&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=network:kubernetes&quot; class=&quot;wikilink1&quot; title=&quot;network:kubernetes&quot;  data-wiki-id=&quot;network:kubernetes&quot;&gt;Kubernetes&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;td class=&quot;date&quot;&gt;2024/05/02 20:28&lt;/td&gt;&lt;td class=&quot;tags&quot;&gt;&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:kubernetes&amp;amp;do=showtag&amp;amp;tag=kubernetes&quot; class=&quot;wikilink1&quot; title=&quot;tag:kubernetes&quot; rel=&quot;tag&quot;&gt;kubernetes&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;image&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class=&quot;page&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=system:minikube&quot; class=&quot;wikilink1&quot; title=&quot;system:minikube&quot;  data-wiki-id=&quot;system:minikube&quot;&gt;Minikube&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;td class=&quot;date&quot;&gt;2024/08/22 20:16&lt;/td&gt;&lt;td class=&quot;tags&quot;&gt;&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:kubernetes&amp;amp;do=showtag&amp;amp;tag=kubernetes&quot; class=&quot;wikilink1&quot; title=&quot;tag:kubernetes&quot; rel=&quot;tag&quot;&gt;kubernetes&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0441\u044b\u043b\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0441\u044b\u043b\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;3018-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=network:netstat">
        <dc:format>text/html</dc:format>
        <dc:date>2023-12-07T09:27:25+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Netstat</title>
        <link>http://178.140.10.58:8080/doku.php?id=network:netstat</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:shell&amp;amp;do=showtag&amp;amp;tag=shell&quot; class=&quot;wikilink1&quot; title=&quot;tag:shell&quot; rel=&quot;tag&quot;&gt;shell&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:networks&amp;amp;do=showtag&amp;amp;tag=networks&quot; class=&quot;wikilink1&quot; title=&quot;tag:networks&quot; rel=&quot;tag&quot;&gt;networks&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:networking&amp;amp;do=showtag&amp;amp;tag=networking&quot; class=&quot;wikilink1&quot; title=&quot;tag:networking&quot; rel=&quot;tag&quot;&gt;networking&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:network&amp;amp;do=showtag&amp;amp;tag=network&quot; class=&quot;wikilink1&quot; title=&quot;tag:network&quot; rel=&quot;tag&quot;&gt;network&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:utils&amp;amp;do=showtag&amp;amp;tag=utils&quot; class=&quot;wikilink1&quot; title=&quot;tag:utils&quot; rel=&quot;tag&quot;&gt;utils&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;netstat&quot;&gt;Netstat&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ &lt;span class=&quot;kw2&quot;&gt;netstat&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-nalt&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; ESTABLISHED
tcp4       &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;  192.168.1.104.60255    162.13.157.151.7617    ESTABLISHED
tcp4       &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;  192.168.1.104.59963    68.232.34.200.443      ESTABLISHED&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Netstat&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;netstat&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;50-286&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;синтаксис&quot;&gt;Синтаксис&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;netstat [-Aan] [-f семейство_адресов] [-I интерфейс] [-p имя_протокола] [система] [core] 
netstat [-n] [-s] [-i | -r] [-f семейство_адресов] [-I интерфейс] [-p имя_протокола] [система] [core] 
netstat [-n] [-I интерфейс] интервал [система] [core]&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;287-693&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;примеры&quot;&gt;Примеры&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 netstat -paltn|grep LISTEN
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 netstat -lpna|grep 53
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 netstat -ltupn
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 netstat -lantp | grep ESTABLISHED |awk &amp;#039;{print $5}&amp;#039; | awk -F: &amp;#039;{print $1}&amp;#039; | sort -u
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0440\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0440\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;694-887&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;описание&quot;&gt;Описание&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Команда netstat показывает содержимое различных структур данных, связанных с сетью, в различных форматах в зависимости от указанных опций.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;888-1170&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;использование&quot;&gt;Использование&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Первая форма команды показывает список активных сокетов для каждого протокола. Вторая форма выбирает одну из нескольких других сетевых структур данных.Форма показывает динамическую статистику пересылки пакетов по сконфигурированным сетевым интерфейсам; аргумент интервал задает, сколько секунд собирается информация между последовательными показами.
&lt;/p&gt;

&lt;p&gt;
Значение по умолчанию для аргумента система — /unix; для аргумента core в качестве значения по умолчанию используется /dev/kmem.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1171-2092&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;опции&quot;&gt;Опции&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit7&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;-a&lt;/strong&gt;                   &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Показывать состояние всех сокетов; обычно сокеты, используемые серверными процессами, не показываются.                                                                                                                                                                                                                                                &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;-A&lt;/strong&gt;                   &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Показывать адреса любых управляющих блоков протокола, связанных с сокетами; используется для отладки.                                                                                                                                                                                                                                                 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;-i&lt;/strong&gt;                   &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Показывать состояние автоматически сконфигурированных (auto-configured) интерфейсов. Интерфейсы, статически сконфигурированные в системе, но не найденные во время загрузки, не показываются.                                                                                                                                                         &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;-n&lt;/strong&gt;                   &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Показывать сетевые адреса и порты как числа. netstat обычно показывает адреса как символы. Эту опцию можно использовать с любым форматом показа.                                                                                                                                                                                                              &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;-r&lt;/strong&gt;                   &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Показать таблицы маршрутизации. При использовании с опцией -s, показывает статистику маршрутизации.                                                                                                                                                                                                                                                   &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;-s&lt;/strong&gt;                   &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Показать статистическую информацию по протоколам. При использовании с опцией -r, показывает статистику маршрутизации.                                                                                                                                                                                                                                 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;-f&lt;/strong&gt; семейство_адресов &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Ограничить показ статистики или адресов управляющих блоков только указанным семейством_адресов, в качестве которого можно указывать: inet Для семейства адресов AF_INET, или unix Для семейства адресов AF_UNIX.                                                                                                                                      &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;-I&lt;/strong&gt; интерфейс         &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Выделить информацию об указанном интерфейсе в отдельный столбец; по умолчанию (для третьей формы команды) используется интерфейс с наибольшим объёмом переданной информации с момента последней перезагрузки системы. В качестве интерфейса можно указывать любой из интерфейсов, перечисленных в файле конфигурации системы, например, emd1 или lo0. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;-p&lt;/strong&gt;                   &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Отобразить идентификатор/название процесса создавшего сокет (-p, –programs display PID/Program name for sockets)                                                                                                                                                                                                                                     &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;-l&lt;/strong&gt;                     &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Отобразить только прослушиваемые сокеты                                                                                                                                                                                                                                                                                                                                             &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;-u&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Отобразить только UDP сокеты &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row11&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;-t&lt;/strong&gt;&lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Отобразить только TCP сокеты &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;2117-7189&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u043f\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u043f\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2093-7189&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;выдаваемая_информация&quot;&gt;Выдаваемая информация&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;Активные сокеты&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
Для каждого активного сокета показывается протокол, размер очередей приема и получения (в байтах), локальный и удаленный адрес, а также внутреннее состояние протокола. Символьный формат, обычно используемый для показа адресов сокетов, — это либо:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;имя_хоста.порт&lt;/pre&gt;

&lt;p&gt;
если имя хоста указано, либо:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;сеть.порт&lt;/pre&gt;

&lt;p&gt;
если адрес сокета задает сеть, но не конкретный хост. Имена хостов и сетей берутся из соответствующих записей в файле /etc/hosts или /etc/networks.
&lt;/p&gt;

&lt;p&gt;
Если имя сети или хоста для адреса неизвестно (или если указана опция -n), адрес показывается числами. Не указанные или «обобщенные» адреса и порты показываются как «*». Подробнее о соглашениях по именованию в Internet см. страницу справочного руководства &lt;a href=&quot;http://ru.wikipedia.org/w/index.php?title=Inet&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/w/index.php?title=Inet&amp;amp;action=edit&amp;amp;redlink=1&quot; rel=&quot;ugc nofollow&quot;&gt;inet&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Сокеты TCP&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
Для сокетов TCP допустимы следующие значения состояния:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit9&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;CLOSED &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Закрыт. Сокет не используется. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;LISTEN &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Ожидает входящих соединений. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;SYN_SENT &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Активно пытается установить соединение. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;SYN_RECEIVED &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Идет начальная синхронизация соединения. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;ESTABLISHED &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Соединение установлено. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;CLOSE_WAIT &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Удаленная сторона отключилась; ожидание закрытия сокета. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;FIN_WAIT_1 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Сокет закрыт; отключение соединения. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;CLOSING &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Сокет закрыт, затем удаленная сторона отключилась; ожидание подтверждения. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;LAST_ACK &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Удаленная сторона отключилась, затем сокет закрыт; ожидание подтверждения. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;FIN_WAIT_2 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Сокет закрыт; ожидание отключения удаленной стороны. &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;TIME_WAIT &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt;Сокет закрыт, но ожидает пакеты, ещё находящиеся в сети для обработки &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;8788-9923&amp;quot;} --&gt;
&lt;p&gt;
&lt;strong&gt;Сетевые структуры данных&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
Показываемые данные зависят от выбора опции, -i или -r. Если указаны обе опции, netstat выберет -i.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Показ таблицы маршрутизации&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://ru.wikipedia.org/wiki/Таблица_маршрутизации&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/Таблица_маршрутизации&quot; rel=&quot;ugc nofollow&quot;&gt;Таблица маршрутизации&lt;/a&gt; показывает все имеющиеся маршруты (routes) и статус каждого из них. Каждый маршрут состоит из целевого хоста или сети и шлюза (gateway), который используется для пересылки пакетов. Столбец flags (флаги) показывает статус маршрута (U, если он включен), ведет ли маршрут на шлюз (G), был ли маршрут создан динамически при помощи перенаправления (D) и используется ли адрес индивидуального хоста (H) вместо адреса сети. Например, интерфейс закольцовывания (loopback transport provider), lo0, всегда имеет флаг H.
&lt;/p&gt;

&lt;p&gt;
Прямые маршруты создаются для каждого интерфейса, подключенного к локальному хосту; поле gateway (шлюз) для таких записей показывает адрес выходного интерфейса.
&lt;/p&gt;

&lt;p&gt;
Столбец refcnt показывает текущее количество активных использований для маршрута. Протоколы, ориентированные на соединение, обычно используют в ходе соединения один маршрут, тогда как протоколы без соединения получают маршрут для каждой посылки одному и тому же адресату.
&lt;/p&gt;

&lt;p&gt;
Столбец use показывает количество пакетов, посланных по маршруту.
Столбец interface показывает сетевой интерфейс, используемый маршрутом.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Суммарная статистика передачи данных&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
Когда задан аргумент интервал, netstat показывает таблицу суммарной статистической информации о переданных пакетах, ошибках и коллизиях. Первая показываемая строка данных, а также каждая последующая 24-я строка содержит суммарную статистическую информацию с момента последней перезагрузки системы. Каждая последующая строка показывает данные, накопленные за очередной указанный в командной строке интервал с момента последнего показа.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u0430\u044f_\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;7190-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=network:nmap">
        <dc:format>text/html</dc:format>
        <dc:date>2025-02-26T23:37:48+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Nmap (“Network Mapper”) - Сетевой сканер</title>
        <link>http://178.140.10.58:8080/doku.php?id=network:nmap</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:network&amp;amp;do=showtag&amp;amp;tag=network&quot; class=&quot;wikilink1&quot; title=&quot;tag:network&quot; rel=&quot;tag&quot;&gt;network&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:scanner&amp;amp;do=showtag&amp;amp;tag=scanner&quot; class=&quot;wikilink1&quot; title=&quot;tag:scanner&quot; rel=&quot;tag&quot;&gt;scanner&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;nmap_network_mapper_-_сетевой_сканер&quot;&gt;Nmap (“Network Mapper”) - Сетевой сканер&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Nmap (“Network Mapper”) это утилита с открытым исходным кодом для исследования сети и проверки безопасности. Она была разработана для быстрого сканирования больших сетей, хотя прекрасно справляется и с единичными целями. Nmap использует сырые IP пакеты оригинальными способами, чтобы определить какие хосты доступны в сети, какие службы (название приложения и версию) они предлагают, какие операционные системы (и версии ОС) они используют, какие типы пакетных фильтров/брандмауэров используются и еще дюжины других характеристик. В тот время как Nmap обычно используется для проверки безопасности, многие сетевые и системные администраторы находят ее полезной для обычных задач, таких как контролирование структуры сети, управление расписаниями запуска служб и учет времени работы хоста или службы.
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co4&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;nmap&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-v&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-sC&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-sV&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-oN&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;tmp&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;nmap&lt;/span&gt; 192.168.1.131&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Nmap (\u201cNetwork Mapper\u201d) - \u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u043a\u0430\u043d\u0435\u0440&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;nmap_network_mapper_-_\u0441\u0435\u0442\u0435\u0432\u043e\u0439_\u0441\u043a\u0430\u043d\u0435\u0440&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;26-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=network:owasp-zap">
        <dc:format>text/html</dc:format>
        <dc:date>2016-09-10T16:41:13+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>OWASP ZAP - Сканер уязвимостей сайта</title>
        <link>http://178.140.10.58:8080/doku.php?id=network:owasp-zap</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:network&amp;amp;do=showtag&amp;amp;tag=network&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:network&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; network&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:scanner&amp;amp;do=showtag&amp;amp;tag=scanner&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:scanner&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; scanner&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;owasp_zap_-_сканер_уязвимостей_сайта&quot;&gt;OWASP ZAP - Сканер уязвимостей сайта&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
OWASP Zed прокси Attack (ZAP) - это простой в использовании итегрированный инструмент для тестирования на проникновие, а также для поиска. уязвимостей в web-приложениях. Программа предназначена для пользователей имеющих опыт работы в сфере информационной безопасности таких как разработчики и функциональные тестеры. Программа будет полезным дополнением для набора инструментов разработчика. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://github.com/zaproxy/zaproxy&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/zaproxy/zaproxy&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/zaproxy/zaproxy&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://github.com/zaproxy/zaproxy/wiki/Downloads&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/zaproxy/zaproxy/wiki/Downloads&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/zaproxy/zaproxy/wiki/Downloads&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://www.owasp.org/index.php/ZAP&quot; class=&quot;urlextern&quot; title=&quot;https://www.owasp.org/index.php/ZAP&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.owasp.org/index.php/ZAP&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;OWASP ZAP - \u0421\u043a\u0430\u043d\u0435\u0440 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0441\u0430\u0439\u0442\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;owasp_zap_-_\u0441\u043a\u0430\u043d\u0435\u0440_\u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439_\u0441\u0430\u0439\u0442\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;26-942&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;документация&quot;&gt;Документация&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://defcon.ru/?s=OWASP+Testing+Guide&quot; class=&quot;urlextern&quot; title=&quot;https://defcon.ru/?s=OWASP+Testing+Guide&quot; rel=&quot;ugc nofollow&quot;&gt;https://defcon.ru/?s=OWASP+Testing+Guide&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;943-1026&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;video&quot;&gt;Video&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://www.youtube.com/watch?v=TyhaA3DJ5oM&quot; class=&quot;urlextern&quot; title=&quot;https://www.youtube.com/watch?v=TyhaA3DJ5oM&quot; rel=&quot;ugc nofollow&quot;&gt;ZAP 2.4.0 introduction&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://www.youtube.com/user/psiinon/videos&quot; class=&quot;urlextern&quot; title=&quot;https://www.youtube.com/user/psiinon/videos&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.youtube.com/user/psiinon/videos&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://www.youtube.com/watch?v=gYpBAjt-J00&quot; class=&quot;urlextern&quot; title=&quot;https://www.youtube.com/watch?v=gYpBAjt-J00&quot; rel=&quot;ugc nofollow&quot;&gt;Сканирование и взлом сайта&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://www.youtube.com/results?search_query=Zed+Attack+Proxy+ZAP&quot; class=&quot;urlextern&quot; title=&quot;https://www.youtube.com/results?search_query=Zed+Attack+Proxy+ZAP&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.youtube.com/results?search_query=Zed+Attack+Proxy+ZAP&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Video&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;video&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1027-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=network:sqlmap">
        <dc:format>text/html</dc:format>
        <dc:date>2023-11-30T02:27:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>sqlmap - Сканер наличия SQL инекций</title>
        <link>http://178.140.10.58:8080/doku.php?id=network:sqlmap</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:security&amp;amp;do=showtag&amp;amp;tag=security&quot; class=&quot;wikilink1&quot; title=&quot;tag:security&quot; rel=&quot;tag&quot;&gt;security&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:test&amp;amp;do=showtag&amp;amp;tag=test&quot; class=&quot;wikilink1&quot; title=&quot;tag:test&quot; rel=&quot;tag&quot;&gt;test&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:sql&amp;amp;do=showtag&amp;amp;tag=sql&quot; class=&quot;wikilink1&quot; title=&quot;tag:sql&quot; rel=&quot;tag&quot;&gt;sql&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:injection&amp;amp;do=showtag&amp;amp;tag=injection%22&quot; class=&quot;wikilink1&quot; title=&quot;tag:injection&quot; rel=&quot;tag&quot;&gt;injection&amp;quot;&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:scanner&amp;amp;do=showtag&amp;amp;tag=scanner&quot; class=&quot;wikilink1&quot; title=&quot;tag:scanner&quot; rel=&quot;tag&quot;&gt;scanner&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:mysql&amp;amp;do=showtag&amp;amp;tag=mysql&quot; class=&quot;wikilink1&quot; title=&quot;tag:mysql&quot; rel=&quot;tag&quot;&gt;mysql&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;sqlmap_-_сканер_наличия_sql_инекций&quot;&gt;sqlmap - Сканер наличия SQL инекций&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;sqlmap - \u0421\u043a\u0430\u043d\u0435\u0440 \u043d\u0430\u043b\u0438\u0447\u0438\u044f SQL \u0438\u043d\u0435\u043a\u0446\u0438\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sqlmap_-_\u0441\u043a\u0430\u043d\u0435\u0440_\u043d\u0430\u043b\u0438\u0447\u0438\u044f_sql_\u0438\u043d\u0435\u043a\u0446\u0438\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;53-123&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;скачать&quot;&gt;Скачать&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://github.com/sqlmapproject/sqlmap&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/sqlmapproject/sqlmap&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/sqlmapproject/sqlmap&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u043a\u0430\u0447\u0430\u0442\u044c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u043a\u0430\u0447\u0430\u0442\u044c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;124-195&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;пример_использования&quot;&gt;Пример использования&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co4&quot;&gt;$ &lt;/span&gt;python sqlmap.py &lt;span class=&quot;re5&quot;&gt;-u&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;http://mysite.com/?page=driving-directions&amp;amp;id=18133&amp;quot;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;--batch&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;--banner&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;--dbms&lt;/span&gt; mysql&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u0438\u043c\u0435\u0440_\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;196-375&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;опции&quot;&gt;Опции&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ python sqlmap &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;опции&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
&amp;nbsp;
Опции:
-h, &lt;span class=&quot;re5&quot;&gt;--help&lt;/span&gt;            Показать базовую справку и выйте
&lt;span class=&quot;re5&quot;&gt;-hh&lt;/span&gt;                   Показать продвинутую справку и выйти
&lt;span class=&quot;re5&quot;&gt;--version&lt;/span&gt;             Показать номер версии программы и выйти
&lt;span class=&quot;re5&quot;&gt;-v&lt;/span&gt; VERBOSE            Уровень вербальности: &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;по умолчанию &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
Цель:
  По крайней мере одна из этих опций должна быть указана, чтобы задать цель&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;и&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;-d&lt;/span&gt; DIRECT           Строка подключения для прямого соединения с базой данных
  &lt;span class=&quot;re5&quot;&gt;-u&lt;/span&gt; URL, &lt;span class=&quot;re5&quot;&gt;--url&lt;/span&gt;=URL   Целевой URL &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;например, &lt;span class=&quot;st0&quot;&gt;&amp;quot;http://www.site.com/vuln.php?id=1&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;-l&lt;/span&gt; LOGFILE          Парсить цель&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;и&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; из файлов логов Burp или WebScarab
  &lt;span class=&quot;re5&quot;&gt;-x&lt;/span&gt; SITEMAPURL       Парсить цель&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;и&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; из удалённого файла sitemap&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;.xml&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; 
  &lt;span class=&quot;re5&quot;&gt;-m&lt;/span&gt; BULKFILE         Сканировать множество целей, заданных в текстовом файле
  &lt;span class=&quot;re5&quot;&gt;-r&lt;/span&gt; REQUESTFILE      Загрузить HTTP запросы из файла
  &lt;span class=&quot;re5&quot;&gt;-g&lt;/span&gt; GOOGLEDORK       Обработать результаты дорков Google как целевых URL
  &lt;span class=&quot;re5&quot;&gt;-c&lt;/span&gt; CONFIGFILE       Загрузить опции из конфигурационного файла INI 
&amp;nbsp;
Запросы:
  Эти опции могут использоваться для определения как подключиться к целевому URL
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;--method&lt;/span&gt;=МЕТОД        Принудительно использовать заданный HTTP метод &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;например, PUT&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--data&lt;/span&gt;=ДАННЫЕ         Строка данных для отправки через POST
  &lt;span class=&quot;re5&quot;&gt;--param-del&lt;/span&gt;=РАЗД_ПАРfv  Символ, используемый для разделения величин параметров
  &lt;span class=&quot;re5&quot;&gt;--cookie&lt;/span&gt;=КУКИ         Значение заголовка HTTP куки HTTP
  &lt;span class=&quot;re5&quot;&gt;--cookie-del&lt;/span&gt;=РАЗДЕЛИТЕЛЬ_КУКИ  Символ, используемый для разделения величин куки
  &lt;span class=&quot;re5&quot;&gt;--load-cookies&lt;/span&gt;=ФАЙЛ_ДЛЯ_ЗАГРУЗКИ  Файл, содержащий куки в формате Netscape&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;wget&lt;/span&gt; 
  &lt;span class=&quot;re5&quot;&gt;--drop-set-cookie&lt;/span&gt;     Игнорировать заголовок Set-Cookie из ответа
  &lt;span class=&quot;re5&quot;&gt;--user-agent&lt;/span&gt;=AGENT    Значение заголовка HTTP User-Agent
  &lt;span class=&quot;re5&quot;&gt;--random-agent&lt;/span&gt;        Использовать случайно выбранное значение заголовка HTTP User-Agent 
  &lt;span class=&quot;re5&quot;&gt;--host&lt;/span&gt;=ХОСТ           Значение заголовка хоста HTTP
  &lt;span class=&quot;re5&quot;&gt;--referer&lt;/span&gt;=РЕФЕРЕР     Значение заголовка HTTP Referer
  &lt;span class=&quot;re5&quot;&gt;-H&lt;/span&gt; ЗАГОЛОВОК, &lt;span class=&quot;re5&quot;&gt;--header&lt;/span&gt;  Дополнительный заголовок &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;к примеру, &lt;span class=&quot;st0&quot;&gt;&amp;quot;X-Forwarded-For: 127.0.0.1&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--headers&lt;/span&gt;=ЗАГОЛОВКИ   Дополнительные заголовки &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;к примеру, &lt;span class=&quot;st0&quot;&gt;&amp;quot;Accept-Language: fr&lt;span class=&quot;es1&quot;&gt;\n&lt;/span&gt;ETag: 123&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--auth-type&lt;/span&gt;=ТИП_АУТ  HTTP тип аутентификации &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Basic, Digest, NTLM или PKI&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--auth-cred&lt;/span&gt;=ДАННЫЕ_АУТ  учётные данные HTTP аутентификации &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;имя:пароль&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--auth-file&lt;/span&gt;=ФАЙЛ_АУТ  файл HTTP аутентификации PEM сертификат&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;частный ключ
  &lt;span class=&quot;re5&quot;&gt;--ignore-401&lt;/span&gt;           Игнорировать ошибку HTTP &lt;span class=&quot;nu0&quot;&gt;401&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Unauthorized&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Неавторизован&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--proxy&lt;/span&gt;=ПРОКСИ         Использовать прокси для подключения к целевому URL
  &lt;span class=&quot;re5&quot;&gt;--proxy-cred&lt;/span&gt;=УЧЁТКА_ПРОКСИ  Учётные данные аутентификации прокси &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;имя:пароль&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--proxy-file&lt;/span&gt;=ФАЙЛ_ПРОКСИ  Загрузить список прокси из файла
  &lt;span class=&quot;re5&quot;&gt;--ignore-proxy&lt;/span&gt;         Игнорировать дефолтные системные настройки прокси
  &lt;span class=&quot;re5&quot;&gt;--tor&lt;/span&gt;                  Использовать анонимную сеть Tor
  &lt;span class=&quot;re5&quot;&gt;--tor-port&lt;/span&gt;=TORPORT     Установить порт прокси Tor отличный от дефолтного
  &lt;span class=&quot;re5&quot;&gt;--tor-type&lt;/span&gt;=TORTYPE     Установить тип прокси Tor &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;HTTP &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;по умолчанию&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, SOCKS4 или SOCKS5&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--check-tor&lt;/span&gt;            Проверить, используется ли Tor должным образом
  &lt;span class=&quot;re5&quot;&gt;--delay&lt;/span&gt;=ЗАДЕРЖКА       Задержка в секундах между каждым HTTP запросом
  &lt;span class=&quot;re5&quot;&gt;--timeout&lt;/span&gt;=ТАЙМАУТ      Секунды для ожидания перед таймаутом соединения &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;по умолчанию &lt;span class=&quot;nu0&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--retries&lt;/span&gt;=ПОПЫТКИ      Попытки при таймаутах соединения &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;по умолчанию &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--randomize&lt;/span&gt;=ПАРАМЕТРЫ  Случайно менять значения данного параметра&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ов&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--safe-url&lt;/span&gt;=БЕЗОПАСНЫЙ_EURL  URL адрес для частого посещения во время тестирования
  &lt;span class=&quot;re5&quot;&gt;--safe-post&lt;/span&gt;=POST  Данные POST для отправки на безопасный URL
  &lt;span class=&quot;re5&quot;&gt;--safe-req&lt;/span&gt;=БЕЗОПАСНЫЙ_ФАЙЛ  Load safe HTTP request from a &lt;span class=&quot;kw2&quot;&gt;file&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--safe-freq&lt;/span&gt;=КОЛИЧЕСТВО  Тестовые запросы между двумя визитами на заданный безопасный URL
  &lt;span class=&quot;re5&quot;&gt;--skip-urlencode&lt;/span&gt;       Пропустить URL кодирование данных для запросов
  &lt;span class=&quot;re5&quot;&gt;--csrf-token&lt;/span&gt;=CSR..     Параметр используемый для удержания токена anti-CSRF
  &lt;span class=&quot;re5&quot;&gt;--csrf-url&lt;/span&gt;=CSRFURL     URL адрес для посещения для извлечения токена anti-CSRF
  &lt;span class=&quot;re5&quot;&gt;--force-ssl&lt;/span&gt;            Принудительное использование SSL&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;HTTPS
  &lt;span class=&quot;re5&quot;&gt;--hpp&lt;/span&gt;                  Использовать метод загрязнения параметра HTTP
  &lt;span class=&quot;re5&quot;&gt;--eval&lt;/span&gt;=EVALCODE        Выполнить данные код Python перед запросом &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;например,
                         &lt;span class=&quot;st0&quot;&gt;&amp;quot;import hashlib;id2=hashlib.md5(id).hexdigest()&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
Оптимизация:
  Эти опции могут использовать для оптимизации производительности sqlmap
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;-o&lt;/span&gt;                  Отключить все переключатели оптимизации
  &lt;span class=&quot;re5&quot;&gt;--predict-output&lt;/span&gt;    Прогнозировать общий вывод запросов
  &lt;span class=&quot;re5&quot;&gt;--keep-alive&lt;/span&gt;        Использовать постоянные соединения HTTP&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;s&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--null-connection&lt;/span&gt;   Получить длину страницу без фактического тела ответа HTTP
  &lt;span class=&quot;re5&quot;&gt;--threads&lt;/span&gt;=ПОТОКИ    Максимальное количество одновременных HTTP&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;s&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; запросов &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;по умолчанию &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
Инъекция:
  Эти опции могут использоваться для определения, какой параметр тестировать,
  обеспечивать пользовательскую инъекционную нагрузку и дополнительные скрипты обфускации
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; TESTPARAMETER    Тестируемый параметр&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ы&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--skip&lt;/span&gt;=SKIP         Пропустить тестирования данного параметра&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ов&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--skip-static&lt;/span&gt;       Пропустить тестирование параметров, которые не кажутся динамическими
  &lt;span class=&quot;re5&quot;&gt;--dbms&lt;/span&gt;=DBMS         Принудительно указать СУБД
  &lt;span class=&quot;re5&quot;&gt;--dbms-cred&lt;/span&gt;=DBMS..  Данные аутентификации СУБД &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;пользователь:пароль&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--os&lt;/span&gt;=OS             Принудительно указать операционную систему СУБД
  &lt;span class=&quot;re5&quot;&gt;--invalid-bignum&lt;/span&gt;    Использовать большие числа для недействительных значений
  &lt;span class=&quot;re5&quot;&gt;--invalid-logical&lt;/span&gt;   Использовать логические операции для недействительных значений
  &lt;span class=&quot;re5&quot;&gt;--invalid-string&lt;/span&gt;    Использовать случайные строки для недействительных значений
  &lt;span class=&quot;re5&quot;&gt;--no-cast&lt;/span&gt;           Отключить механизм отбора полезной нагрузки
  &lt;span class=&quot;re5&quot;&gt;--no-escape&lt;/span&gt;         Отключить механизм экранирования строк
  &lt;span class=&quot;re5&quot;&gt;--prefix&lt;/span&gt;=PREFIX     Предваряющая строка инъекционного запроса
  &lt;span class=&quot;re5&quot;&gt;--suffix&lt;/span&gt;=SUFFIX     Завершающая строка инъекционного запроса
  &lt;span class=&quot;re5&quot;&gt;--tamper&lt;/span&gt;=TAMPER     Использовать данный скрипт&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ы&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; для обфускации инъекционных данных
&amp;nbsp;
Выявление:
  Эти опции можно использовать для настройки фазы выявления
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;--level&lt;/span&gt;=УРОВЕНЬ       Уровень выполнения тестирования &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;5&lt;/span&gt;, по умолчанию &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--risk&lt;/span&gt;=РИСК           Риск выполняемого тестирования &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;, по умолчанию &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--string&lt;/span&gt;=СТРОКА       Строка, когда запрос выполнен в True &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Истина&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--not-string&lt;/span&gt;=НЕ_ИСТИНА  Строка, когда запрос выполнен в False &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Ложь&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--regexp&lt;/span&gt;=РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ     Регулярное выражение, когда запрос выполнен в True &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Истина&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--code&lt;/span&gt;=КОД            HTTP код, когда запрос выполнен в True &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Истина&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--text-only&lt;/span&gt;           Сравнить страницы основываясь только на текстовом содержимом
  &lt;span class=&quot;re5&quot;&gt;--titles&lt;/span&gt;              Сравнить страницы основываясь только на их заголовках
&amp;nbsp;
Техники:
  Эти опции можно использовать для поднастройки тестирования отдельных техник SQL инъекции
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;--technique&lt;/span&gt;=ТЕХНИКА    Техники SQL инъекций для использования &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;по умолчанию &lt;span class=&quot;st0&quot;&gt;&amp;quot;BEUSTQ&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--time-sec&lt;/span&gt;=TIMESEC     Секунды для задержки ответа СУБД &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;по умолчанию &lt;span class=&quot;nu0&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--union-cols&lt;/span&gt;=UCOLS     Диапазон колонок для тестирования с запросами UNION SQL инъекций
  &lt;span class=&quot;re5&quot;&gt;--union-char&lt;/span&gt;=UCHAR     Символ для использования при брутфорсинге количества колонок
  &lt;span class=&quot;re5&quot;&gt;--union-from&lt;/span&gt;=UFROM     Таблица для использования в FROM части UNION запроса SQL инъекции
  &lt;span class=&quot;re5&quot;&gt;--dns-domain&lt;/span&gt;=ДОМЕН     Доменное имя, используемое для эксфильтрационной атаки DNS
  &lt;span class=&quot;re5&quot;&gt;--second-order&lt;/span&gt;=СТРОКА  В результате по URL ищется ответ второго порядка
&amp;nbsp;
Отпечатки:
  -f, &lt;span class=&quot;re5&quot;&gt;--fingerprint&lt;/span&gt;   Выполняет обширную сверку версии СУБД
&amp;nbsp;
Перечисления:
  Эти опции могут использоваться для перечисления информации
  системы управления базами данных, структуры содержащихся в
  таблицах данных. Более того, вы можете запустить ваши собственные 
  SQL выражения
&amp;nbsp;
  -a, &lt;span class=&quot;re5&quot;&gt;--all&lt;/span&gt;           Получить всё
  -b, &lt;span class=&quot;re5&quot;&gt;--banner&lt;/span&gt;        Получить банер СУБД
  &lt;span class=&quot;re5&quot;&gt;--current-user&lt;/span&gt;      Получить текущего пользователя СУБД
  &lt;span class=&quot;re5&quot;&gt;--current-db&lt;/span&gt;        Получить текущую базу данных СУБД
  &lt;span class=&quot;re5&quot;&gt;--hostname&lt;/span&gt;          Получить имя хоста сервера СУБД
  &lt;span class=&quot;re5&quot;&gt;--is-dba&lt;/span&gt;            Определить, является ли текущий пользователь администратором СУБД
  &lt;span class=&quot;re5&quot;&gt;--users&lt;/span&gt;             Перечислить пользователей СУБД
  &lt;span class=&quot;re5&quot;&gt;--passwords&lt;/span&gt;         Перечислить хеши паролей пользователей СУБД
  &lt;span class=&quot;re5&quot;&gt;--privileges&lt;/span&gt;        Перечислить пользовательские привилегии СУБД
  &lt;span class=&quot;re5&quot;&gt;--roles&lt;/span&gt;             Перечислить пользовательские роли СУБД
  &lt;span class=&quot;re5&quot;&gt;--dbs&lt;/span&gt;               Перечислить базы данных СУБД
  &lt;span class=&quot;re5&quot;&gt;--tables&lt;/span&gt;            Перечислить таблицы базы данных СУБД
  &lt;span class=&quot;re5&quot;&gt;--columns&lt;/span&gt;           Перечислить колонки таблицы СУБД
  &lt;span class=&quot;re5&quot;&gt;--schema&lt;/span&gt;            Перечислить схему СУБД
  &lt;span class=&quot;re5&quot;&gt;--count&lt;/span&gt;             Перечислить количество записей для таблицы&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;таблиц&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--dump&lt;/span&gt;              Сдампить записи таблицы базы данных СУБД
  &lt;span class=&quot;re5&quot;&gt;--dump-all&lt;/span&gt;          Сдампить все записи таблиц базы данных СУБД
  &lt;span class=&quot;re5&quot;&gt;--search&lt;/span&gt;            Поиск колонки&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ок&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, таблиц&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ы&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; и&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;или имени&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;имён&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; базы данных
  &lt;span class=&quot;re5&quot;&gt;--comments&lt;/span&gt;          Получить комментарии СУБД
  &lt;span class=&quot;re5&quot;&gt;-D&lt;/span&gt; БД               БД СУБД для перечисления
  &lt;span class=&quot;re5&quot;&gt;-T&lt;/span&gt; ТБЛ              Таблица&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ы&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; БД СУБД для перечисления
  &lt;span class=&quot;re5&quot;&gt;-C&lt;/span&gt; КОЛ              Колонка&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;и&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; таблицы БД СУБД для перечисления
  &lt;span class=&quot;re5&quot;&gt;-X&lt;/span&gt; ПРОПУСТИТЬКОЛ    Колонка&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;и&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; БД СУБД для не перечисления
  &lt;span class=&quot;re5&quot;&gt;-U&lt;/span&gt; ПОЛЬЗОВАТЕЛЬ     Пользователи СУБД для перечисления
  &lt;span class=&quot;re5&quot;&gt;--exclude-sysdbs&lt;/span&gt;    Пробустить системные БД СУБД при перечислении таблиц
  &lt;span class=&quot;re5&quot;&gt;--where&lt;/span&gt;=DUMPWHERE   Использовать условие WHERE при дампинге таблиц
  &lt;span class=&quot;re5&quot;&gt;--start&lt;/span&gt;=LIMITSTART  Первая выходная запись запроса для получения
  &lt;span class=&quot;re5&quot;&gt;--stop&lt;/span&gt;=LIMITSTOP    Последняя выходная запись запроса для получения
  &lt;span class=&quot;re5&quot;&gt;--first&lt;/span&gt;=FIRSTCHAR   Первый символ выходного слова запроса для получения
  &lt;span class=&quot;re5&quot;&gt;--last&lt;/span&gt;=LASTCHAR     Последний символ выходного слова запроса для получения
  &lt;span class=&quot;re5&quot;&gt;--sql-query&lt;/span&gt;=QUERY   SQL выражение для исполнения
  &lt;span class=&quot;re5&quot;&gt;--sql-shell&lt;/span&gt;         Приглашение интерактивного SQL шелла
  &lt;span class=&quot;re5&quot;&gt;--sql-file&lt;/span&gt;=SQLFILE  Выполнить SQL выражение из данного файла&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ов&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
Брут-форс:
  Эти опции могут использоваться для записи проверок брут-форсом
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;--common-tables&lt;/span&gt;     Проверить наличие распространённых таблиц
  &lt;span class=&quot;re5&quot;&gt;--common-columns&lt;/span&gt;    Проверить наличие распространённых колонок
&amp;nbsp;
Инъекция заданных пользователем функций:
  Эти опции могут быть использованы для создания определённых пользователем функций
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;--udf-inject&lt;/span&gt;        Вставка предопределённых пользователем функций
  &lt;span class=&quot;re5&quot;&gt;--shared-lib&lt;/span&gt;=SHLIB  Локальный путь до общей библиотеки
&amp;nbsp;
Доступ к файловой системе:
  Эти опции могут быть использованы для доступа к файловой системе СУБД
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;--file-read&lt;/span&gt;=RFILE   Прочитать файл из файловой системы СУБД
  &lt;span class=&quot;re5&quot;&gt;--file-write&lt;/span&gt;=WFILE  Записать локальный файл в файловую систему СУБД
  &lt;span class=&quot;re5&quot;&gt;--file-dest&lt;/span&gt;=DFILE   Абсолютный путь для записи файла в СУБД
&amp;nbsp;
Доступ к оперативной системе:
  Эти опции могут быть использованы для получения доступа к ОС СУБД
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;--os-cmd&lt;/span&gt;=OSCMD      Выполнить команду ОС
  &lt;span class=&quot;re5&quot;&gt;--os-shell&lt;/span&gt;          Приглашение интерактивного шелла ОС
  &lt;span class=&quot;re5&quot;&gt;--os-pwn&lt;/span&gt;            Прриглашение для внеполосного шелла, Meterpreter или VNC
  &lt;span class=&quot;re5&quot;&gt;--os-smbrelay&lt;/span&gt;       Однокликовое приглашение для внеполосного шелла, Meterpreter или VNC
  &lt;span class=&quot;re5&quot;&gt;--os-bof&lt;/span&gt;            Эксплуатация переполнения буфера хранимой процедуры
  &lt;span class=&quot;re5&quot;&gt;--priv-esc&lt;/span&gt;          Повышение пользовательских привилегий процесса БД
  &lt;span class=&quot;re5&quot;&gt;--msf-path&lt;/span&gt;=MSFPATH  Локальный путь где установлен Metasploit Framework
  &lt;span class=&quot;re5&quot;&gt;--tmp-path&lt;/span&gt;=TMPPATH  Удалённый абсолютный путь директории временных файлов
&amp;nbsp;
Доступ к регистру Windows:
  Эти опции могут использоваться к доступу к регистру Windows СУБД
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;--reg-read&lt;/span&gt;          Прочитать значение ключа регистра Windows
  &lt;span class=&quot;re5&quot;&gt;--reg-add&lt;/span&gt;           Записать значение ключа регистра Windows
  &lt;span class=&quot;re5&quot;&gt;--reg-del&lt;/span&gt;           Удалить значение ключа регистра Windows
  &lt;span class=&quot;re5&quot;&gt;--reg-key&lt;/span&gt;=REGKEY    Ключ регистра Windows
  &lt;span class=&quot;re5&quot;&gt;--reg-value&lt;/span&gt;=REGVAL  Значение ключа регистра Windows
  &lt;span class=&quot;re5&quot;&gt;--reg-data&lt;/span&gt;=REGDATA  Данные значения ключа регистра Windows
  &lt;span class=&quot;re5&quot;&gt;--reg-type&lt;/span&gt;=REGTYPE  Тип значения ключа регистра Windows
&amp;nbsp;
Общие:
  Эти опции могут быть использованы для установки общих рабочих параметров
&amp;nbsp;
  &lt;span class=&quot;re5&quot;&gt;-s&lt;/span&gt; SESSIONFILE      Загрузить сессию из сохранённого файла &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;.sqlite&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; TRAFFICFILE      Записать весь HTTP трафик в текстовый файл
  &lt;span class=&quot;re5&quot;&gt;--batch&lt;/span&gt;             Никогда не спрашивать пользовательского ввода, использовать поведение по умолчанию
  &lt;span class=&quot;re5&quot;&gt;--charset&lt;/span&gt;=CHARSET   Принудительная кодировка символов, используемых для получения данных
  &lt;span class=&quot;re5&quot;&gt;--crawl&lt;/span&gt;=CRAWLDEPTH  Ползать по веб-сайту начиная с заданного URL
  &lt;span class=&quot;re5&quot;&gt;--crawl-exclude&lt;/span&gt;=РЕГВЫРАЖЕНИЕ  Регулярное выражение для исключения страниц для ползания &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;например, &lt;span class=&quot;st0&quot;&gt;&amp;quot;logout&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--csv-del&lt;/span&gt;=CSVDEL    Символ разделителя, используемый в выводе CSV &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;по умолчанию &lt;span class=&quot;st0&quot;&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--dump-format&lt;/span&gt;=ДАМПФОРМАТ  Формат сдампленных данных &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;CSV &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;по умолчанию&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, HTML или SQLITE&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--eta&lt;/span&gt;               Отобразить для каждого вывода приблизительное время прибытия
  &lt;span class=&quot;re5&quot;&gt;--flush-session&lt;/span&gt;     Стереть сессионные файлы для текущей цели
  &lt;span class=&quot;re5&quot;&gt;--forms&lt;/span&gt;             Парсить и тестировать формы на целевой URL
  &lt;span class=&quot;re5&quot;&gt;--fresh-queries&lt;/span&gt;     Игнорировать результаты запросов, сохранённые в сессионном файле
  &lt;span class=&quot;re5&quot;&gt;--hex&lt;/span&gt;               Использовать шестнадцатеричную функцию&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ии&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; СУБД для получения данных
  &lt;span class=&quot;re5&quot;&gt;--output-dir&lt;/span&gt;=OUT..  Пользовательский путь директории вывода
  &lt;span class=&quot;re5&quot;&gt;--parse-errors&lt;/span&gt;      Парсить и отображать сообщения ошибок СУБД из ответов
  &lt;span class=&quot;re5&quot;&gt;--pivot-column&lt;/span&gt;=P..  Имя стержневой колонки
  &lt;span class=&quot;re5&quot;&gt;--save&lt;/span&gt;=SAVECONFIG   Сохранить опции в конфигурационный INI файл
  &lt;span class=&quot;re5&quot;&gt;--scope&lt;/span&gt;=SCOPE       Регулярное выражение для фильтрации целей из лога proxy
  &lt;span class=&quot;re5&quot;&gt;--test-filter&lt;/span&gt;=TE..  Выбрать тесты по полезной нагрузке и&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;или названиям &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;например, ROW&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--test-skip&lt;/span&gt;=TEST..  Пропустить тесты по полезной нагрузке и&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;или названиям &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;например, BENCHMARK&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--update&lt;/span&gt;            Обновить sqlmap
&amp;nbsp;
Разное:
  &lt;span class=&quot;re5&quot;&gt;-z&lt;/span&gt; MNEMONICS        Использовать короткие мнемоники &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;например, &lt;span class=&quot;st0&quot;&gt;&amp;quot;flu,bat,ban,tec=EU&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--alert&lt;/span&gt;=ALERT       Запустить команду&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ы&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; ОС, когда найдена SQL инъекция
  &lt;span class=&quot;re5&quot;&gt;--answers&lt;/span&gt;=ANSWERS   Установить ответ на вопрос &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;например &lt;span class=&quot;st0&quot;&gt;&amp;quot;quit=N,follow=N&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--beep&lt;/span&gt;              Сигнал на вопрос и&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;или когда найдена SQL инъекция
  &lt;span class=&quot;re5&quot;&gt;--cleanup&lt;/span&gt;           Очистить СУБД от специфичных для sqlmap пользовательских функций и таблиц
  &lt;span class=&quot;re5&quot;&gt;--dependencies&lt;/span&gt;      Проверить на отсутствующие &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;неосновные&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; зависимости sqlmap
  &lt;span class=&quot;re5&quot;&gt;--disable-coloring&lt;/span&gt;  Отключить раскрашивание вывода в консоли
  &lt;span class=&quot;re5&quot;&gt;--gpage&lt;/span&gt;=GOOGLEPAGE  Использовать результаты дорка Google с указанного номера страницы
  &lt;span class=&quot;re5&quot;&gt;--identify-waf&lt;/span&gt;      Провести тщательное тестирование на WAF&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;IPS&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;IDS защиту
  &lt;span class=&quot;re5&quot;&gt;--skip-waf&lt;/span&gt;          Пропустить эвристическое обнаружение WAF&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;IPS&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;IDS защиты
  &lt;span class=&quot;re5&quot;&gt;--mobile&lt;/span&gt;            Имитировать смартфон через заголовок HTTP User-Agent
  &lt;span class=&quot;re5&quot;&gt;--offline&lt;/span&gt;           Работать в оффлайн режиме &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;использовать только данные сессии&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;re5&quot;&gt;--page-rank&lt;/span&gt;         Показать page rank &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;PR&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; для результатов дорка Google
  &lt;span class=&quot;re5&quot;&gt;--purge-output&lt;/span&gt;      Безопасно удалить всё содержимое из директории вывода
  &lt;span class=&quot;re5&quot;&gt;--smart&lt;/span&gt;             Провести тщательные тесты только если эвристика дала положительные результаты
  &lt;span class=&quot;re5&quot;&gt;--sqlmap-shell&lt;/span&gt;      Запрос интерактивного шелла sqlmap
  &lt;span class=&quot;re5&quot;&gt;--wizard&lt;/span&gt;            Простой интерфейс мастера для начинающих пользователей&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u043f\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u043f\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;376-22898&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;документация_faq&quot;&gt;Документация / FAQ&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://github.com/sqlmapproject/sqlmap/wiki/FAQ&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/sqlmapproject/sqlmap/wiki/FAQ&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/sqlmapproject/sqlmap/wiki/FAQ&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \/ FAQ&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f_faq&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;22899-22996&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;видео&quot;&gt;Видео&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://www.youtube.com/watch?v=-7ez8J6-nXE&quot; class=&quot;urlextern&quot; title=&quot;https://www.youtube.com/watch?v=-7ez8J6-nXE&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.youtube.com/watch?v=-7ez8J6-nXE&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://www.youtube.com/watch?v=EnXTSFTsqc4&quot; class=&quot;urlextern&quot; title=&quot;https://www.youtube.com/watch?v=EnXTSFTsqc4&quot; rel=&quot;ugc nofollow&quot;&gt;https://www.youtube.com/watch?v=EnXTSFTsqc4&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u0438\u0434\u0435\u043e&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u0438\u0434\u0435\u043e&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;22997-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=network:squid">
        <dc:format>text/html</dc:format>
        <dc:date>2025-11-05T23:09:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Squid</title>
        <link>http://178.140.10.58:8080/doku.php?id=network:squid</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:squid&amp;amp;do=showtag&amp;amp;tag=squid&quot; class=&quot;wikilink1&quot; title=&quot;tag:squid&quot; rel=&quot;tag&quot;&gt;squid&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:proxy&amp;amp;do=showtag&amp;amp;tag=proxy&quot; class=&quot;wikilink1&quot; title=&quot;tag:proxy&quot; rel=&quot;tag&quot;&gt;proxy&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:rokomnadzor&amp;amp;do=showtag&amp;amp;tag=rokomnadzor&quot; class=&quot;wikilink1&quot; title=&quot;tag:rokomnadzor&quot; rel=&quot;tag&quot;&gt;rokomnadzor&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:blocklist&amp;amp;do=showtag&amp;amp;tag=blocklist&quot; class=&quot;wikilink1&quot; title=&quot;tag:blocklist&quot; rel=&quot;tag&quot;&gt;blocklist&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;squid&quot;&gt;Squid&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://gist.github.com/search?p=3&amp;amp;q=squid.conf&amp;amp;utf8=%E2%9C%93&quot; class=&quot;urlextern&quot; title=&quot;https://gist.github.com/search?p=3&amp;amp;q=squid.conf&amp;amp;utf8=%E2%9C%93&quot; rel=&quot;ugc nofollow&quot;&gt;Примеры настроек&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;http://break-people.ru/cmsmade/index.php?page=articles_squid_practice&quot; class=&quot;urlextern&quot; title=&quot;http://break-people.ru/cmsmade/index.php?page=articles_squid_practice&quot; rel=&quot;ugc nofollow&quot;&gt;Советы&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Squid&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;squid&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;44-259&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;параметры&quot;&gt;Параметры&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 src: IP-адрес источника (клиент) 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 dst: IP-адрес назначения (сервер) 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 myip: локальный IP-адрес клиентского соединения 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 srcdomain: имя домена источника (клиент) 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 dstdomain: имя домена назначения (сервер) 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 srcdom_regex: шаблон регулярного выражения источника (клиент) 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 dstdom_regex: шаблон регулярного выражения назначения (сервер) 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 time: время дня и день недели 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 url_regex: шаблон регулярного выражения для &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 urlpath_regex: шаблон регулярного выражения для части &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;, исключая протокол и имя хоста 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 port: номер порта назначения (сервер) 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 myport: номер локального порта, куда подключается клиент 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 proto: тип протокола передачи (http, ftp, etc) 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 method: метод HTTP-запроса (get, post, etc) 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 browser: шаблон регулярного выражения, совпадающего с заголовком user-agent из запроса 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 ident: строка совпадения с именем пользователя 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 ident_regex: шаблон регулярного выражения имени пользователя 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 src_as: номер Автономной Системы источника (клиент) 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 dst_as: номер Автономной Системы назначения (сервер) 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 proxy_auth: аутентификация пользователя через внешний процесс 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 proxy_auth_regex: регулярное выражение аутентификации пользователя через внешний процесс 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 snmp_community: строка SNMP-сообщества 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 maxconn: ограничение максимального кол-ва соединений с одного клиентского IP-адреса 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 req_mime_type: шаблон регулярного выражения для заголовка content-type запроса 
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 arp: Ethernet (MAC)-адрес 
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;260-2636&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;darknet_onion_i2p_hosts&quot;&gt;Darknet (onion) + i2p + hosts&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Darknet (onion) + i2p + hosts&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;darknet_onion_i2p_hosts&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2637-2679&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;обход_запрета_роскомнадзора&quot;&gt;Обход запрета роскомнадзора&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
nano /etc/squid/getblocklist.sh
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# git clone https://github.com/zapret-info/z-i.git&lt;/span&gt;
curl &lt;span class=&quot;re5&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-X&lt;/span&gt; GET &lt;span class=&quot;re5&quot;&gt;-L&lt;/span&gt; https:&lt;span class=&quot;sy0&quot;&gt;//&lt;/span&gt;raw.githubusercontent.com&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;zapret-info&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;z-i&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;master&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;dump.csv &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;blocklist.csv
&lt;span class=&quot;re2&quot;&gt;URL_LIST&lt;/span&gt;=&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;blocklist.csv &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; csvtool &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;;&#039;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;col&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; - &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;/^[0-9\.]*$/d&#039;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;/^[0-9\.a-z-]*$/!d&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; \
&lt;span class=&quot;kw2&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;s/^.*\.\([a-z0-9\-]\{2,63\}\.[a-z0-9\-]\{2,63\}\)$/\1/&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;sort&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;uniq&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null&lt;span class=&quot;sy0&quot;&gt;`&lt;/span&gt;;
&lt;span class=&quot;kw2&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;eais.list &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null;
&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; URL &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$URL_LIST&lt;/span&gt;; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
        &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;re1&quot;&gt;$URL&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;s/\./\\\./g&#039;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;s/^/^http(s)?:\\\/\\\/([a-zA-Z0-9]+\\.)?/g&#039;&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;s/$/.*$/g&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;eais.list &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;/&lt;/span&gt;dev&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;null;
&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;;
&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;sbin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid3 &lt;span class=&quot;re5&quot;&gt;-k&lt;/span&gt; reconfigure&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0431\u0445\u043e\u0434 \u0437\u0430\u043f\u0440\u0435\u0442\u0430 \u0440\u043e\u0441\u043a\u043e\u043c\u043d\u0430\u0434\u0437\u043e\u0440\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0431\u0445\u043e\u0434_\u0437\u0430\u043f\u0440\u0435\u0442\u0430_\u0440\u043e\u0441\u043a\u043e\u043c\u043d\u0430\u0434\u0437\u043e\u0440\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2680-3433&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;cron&quot;&gt;cron&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
crontab -e
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;bash&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;getblocklist.sh&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;cron&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;cron&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;3434-3527&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;squidconf&quot;&gt;squid.conf&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
nano /etc/squid/squid.conf
&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ОСНОВНЫЕ НАСТРОЙКИ SQUID&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Отключение проверки имён хостов&lt;/span&gt;
check_hostnames off
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Определение локальных сетей (RFC 1918 и др.)&lt;/span&gt;
acl localnet src 0.0.0.1-0.255.255.255     &lt;span class=&quot;co0&quot;&gt;# &amp;quot;this&amp;quot; network (LAN)&lt;/span&gt;
acl localnet src 10.0.0.0&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;                    &lt;span class=&quot;co0&quot;&gt;# RFC 1918 private&lt;/span&gt;
acl localnet src 100.64.0.0&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;               &lt;span class=&quot;co0&quot;&gt;# RFC 6598 CGN&lt;/span&gt;
acl localnet src 169.254.0.0&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;16&lt;/span&gt;               &lt;span class=&quot;co0&quot;&gt;# RFC 3927 link-local&lt;/span&gt;
acl localnet src 172.16.0.0&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;12&lt;/span&gt;               &lt;span class=&quot;co0&quot;&gt;# RFC 1918 private&lt;/span&gt;
acl localnet src 192.168.0.0&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;16&lt;/span&gt;              &lt;span class=&quot;co0&quot;&gt;# RFC 1918 private&lt;/span&gt;
acl localnet src fc00::&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;                      &lt;span class=&quot;co0&quot;&gt;# RFC 4193 private&lt;/span&gt;
acl localnet src fe80::&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;                     &lt;span class=&quot;co0&quot;&gt;# RFC 4291 link-local&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# ACL для блокируемых/специальных ресурсов&lt;/span&gt;
acl russia_block_list url_regex &lt;span class=&quot;st0&quot;&gt;&amp;quot;/etc/squid/eais.list&amp;quot;&lt;/span&gt;
acl onion_list url_regex &lt;span class=&quot;re5&quot;&gt;-i&lt;/span&gt; .&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;:&lt;span class=&quot;sy0&quot;&gt;//&lt;/span&gt;.&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;\.onion\&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;.&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# ACL для разделения HTTP/HTTPS .i2p&lt;/span&gt;
acl i2p_http url_regex &lt;span class=&quot;re5&quot;&gt;-i&lt;/span&gt; ^http:&lt;span class=&quot;sy0&quot;&gt;//&lt;/span&gt;.&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;\.i2p&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;.&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;?$
acl i2p_https url_regex &lt;span class=&quot;re5&quot;&gt;-i&lt;/span&gt; ^https:&lt;span class=&quot;sy0&quot;&gt;//&lt;/span&gt;.&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;\.i2p&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;.&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;?$
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# НАСТРОЙКА PEER-СЕРВЕРОВ (UPSTREAM PROXIES)&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# HTTP .i2p → порт 4444&lt;/span&gt;
cache_peer 192.168.1.131 parent &lt;span class=&quot;nu0&quot;&gt;4444&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;4444&lt;/span&gt; no-digest \
    &lt;span class=&quot;re2&quot;&gt;protocol&lt;/span&gt;=http \
    &lt;span class=&quot;re2&quot;&gt;name&lt;/span&gt;=i2p_http_peer \
    connect-timeout=&lt;span class=&quot;nu0&quot;&gt;15&lt;/span&gt; \
    request-timeout=&lt;span class=&quot;nu0&quot;&gt;60&lt;/span&gt; \
    dead-peer-timeout=&lt;span class=&quot;nu0&quot;&gt;30&lt;/span&gt; \
    round-robin
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# HTTPS .i2p → порт 4445&lt;/span&gt;
cache_peer 192.168.1.131 parent &lt;span class=&quot;nu0&quot;&gt;4445&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;4445&lt;/span&gt; no-digest \
    &lt;span class=&quot;re2&quot;&gt;protocol&lt;/span&gt;=https \
    &lt;span class=&quot;re2&quot;&gt;name&lt;/span&gt;=i2p_https_peer \
    connect-timeout=&lt;span class=&quot;nu0&quot;&gt;15&lt;/span&gt; \
    request-timeout=&lt;span class=&quot;nu0&quot;&gt;60&lt;/span&gt; \
    dead-peer-timeout=&lt;span class=&quot;nu0&quot;&gt;30&lt;/span&gt; \
    round-robin
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# privoxy peer (порт 8118)&lt;/span&gt;
cache_peer 192.168.1.131 parent &lt;span class=&quot;nu0&quot;&gt;8118&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;8118&lt;/span&gt; no-digest \
    &lt;span class=&quot;re2&quot;&gt;protocol&lt;/span&gt;=http \
    &lt;span class=&quot;re2&quot;&gt;name&lt;/span&gt;=privoxy_peer \
    connect-timeout=&lt;span class=&quot;nu0&quot;&gt;15&lt;/span&gt; \
    request-timeout=&lt;span class=&quot;nu0&quot;&gt;60&lt;/span&gt; \
    dead-peer-timeout=&lt;span class=&quot;nu0&quot;&gt;30&lt;/span&gt; \
    round-robin
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ПРАВИЛА ДОСТУПА К PEER-СЕРВЕРАМ&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&amp;nbsp;
cache_peer_access i2p_http_peer allow i2p_http
cache_peer_access i2p_https_peer allow i2p_https
cache_peer_access privoxy_peer allow onion_list
cache_peer_access privoxy_peer allow russia_block_list
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ПРАВИЛА НАПРАВЛЕНИЯ ЗАПРОСОВ&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# never_direct: всегда использовать peer для указанных ACL&lt;/span&gt;
never_direct allow i2p_http
never_direct allow i2p_https
never_direct allow onion_list
never_direct allow russia_block_list
never_direct deny localnet
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# always_direct: никогда не использовать peer для указанных ACL&lt;/span&gt;
always_direct deny i2p_http
always_direct deny i2p_https
always_direct deny onion_list
always_direct deny russia_block_list
always_direct allow localnet
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# HTTP-ДОСТУП И БЕЗОПАСНОСТЬ&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Разрешить доступ из локальных сетей&lt;/span&gt;
http_access allow localnet
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Файл hosts для разрешения имён&lt;/span&gt;
hosts_file &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;hosts
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Порты для безопасных соединений&lt;/span&gt;
acl SSL_ports port &lt;span class=&quot;nu0&quot;&gt;443&lt;/span&gt;
acl Safe_ports port &lt;span class=&quot;nu0&quot;&gt;80&lt;/span&gt;            &lt;span class=&quot;co0&quot;&gt;# http&lt;/span&gt;
acl Safe_ports port &lt;span class=&quot;nu0&quot;&gt;21&lt;/span&gt;            &lt;span class=&quot;co0&quot;&gt;# ftp&lt;/span&gt;
acl Safe_ports port &lt;span class=&quot;nu0&quot;&gt;443&lt;/span&gt;           &lt;span class=&quot;co0&quot;&gt;# https&lt;/span&gt;
acl Safe_ports port &lt;span class=&quot;nu0&quot;&gt;70&lt;/span&gt;            &lt;span class=&quot;co0&quot;&gt;# gopher&lt;/span&gt;
acl Safe_ports port &lt;span class=&quot;nu0&quot;&gt;210&lt;/span&gt;           &lt;span class=&quot;co0&quot;&gt;# wais&lt;/span&gt;
acl Safe_ports port &lt;span class=&quot;nu0&quot;&gt;1025&lt;/span&gt;-&lt;span class=&quot;nu0&quot;&gt;65535&lt;/span&gt;    &lt;span class=&quot;co0&quot;&gt;# unregistered&lt;/span&gt;
acl Safe_ports port &lt;span class=&quot;nu0&quot;&gt;280&lt;/span&gt;           &lt;span class=&quot;co0&quot;&gt;# http-mgmt&lt;/span&gt;
acl Safe_ports port &lt;span class=&quot;nu0&quot;&gt;488&lt;/span&gt;           &lt;span class=&quot;co0&quot;&gt;# gss-http&lt;/span&gt;
acl Safe_ports port &lt;span class=&quot;nu0&quot;&gt;591&lt;/span&gt;           &lt;span class=&quot;co0&quot;&gt;# filemaker&lt;/span&gt;
acl Safe_ports port &lt;span class=&quot;nu0&quot;&gt;777&lt;/span&gt;           &lt;span class=&quot;co0&quot;&gt;# multiling http&lt;/span&gt;
&amp;nbsp;
acl CONNECT method CONNECT
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Запретить доступ к небезопасным портам&lt;/span&gt;
http_access deny &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;Safe_ports
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Запретить CONNECT к небезопасным SSL-портам&lt;/span&gt;
http_access deny CONNECT &lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;SSL_ports
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Доступ для менеджера (только локально)&lt;/span&gt;
http_access allow localhost manager
http_access deny manager
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Включить дополнительные конфиги&lt;/span&gt;
include &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;conf.d&lt;span class=&quot;sy0&quot;&gt;/*&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Разрешить локальный доступ&lt;/span&gt;
http_access allow localhost
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Запретить всё остальное&lt;/span&gt;
http_access deny all
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ПОРТ И ДИРЕКТОРИИ&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Основной HTTP-порт прокси&lt;/span&gt;
http_port &lt;span class=&quot;nu0&quot;&gt;3128&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Директория для coredump&lt;/span&gt;
coredump_dir &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;var&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;spool&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# НАСТРОЙКИ КЭШИРОВАНИЯ&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&amp;nbsp;
refresh_pattern ^ftp:           &lt;span class=&quot;nu0&quot;&gt;1440&lt;/span&gt;    &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;%&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;10080&lt;/span&gt;
refresh_pattern ^gopher:         &lt;span class=&quot;nu0&quot;&gt;1440&lt;/span&gt;    &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;%&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;1440&lt;/span&gt;
refresh_pattern &lt;span class=&quot;re5&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;cgi-bin&lt;span class=&quot;sy0&quot;&gt;/|&lt;/span&gt;\?&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;%&lt;/span&gt;      &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
refresh_pattern .               &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;       &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;%&lt;/span&gt;     &lt;span class=&quot;nu0&quot;&gt;4320&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ (ОПЦИОНАЛЬНО)&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;########################################################&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Уровень отладки (раскомментировать при необходимости)&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# debug_options ALL,1 33,2&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Логирование доступа (стандартный формат)&lt;/span&gt;
access_log &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;var&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;log&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;access.log
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Логирование кэша&lt;/span&gt;
cache_log &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;var&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;log&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;cache.log
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Размер кэша (пример: 10 ГБ)&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# cache_dir ufs /var/spool/squid 10240 16 256&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Максимальный размер объекта в кэше (например, 100 МБ)&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# maximum_object_size 102400 KB&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# DNS-серверы (если требуется)&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# dns_nameservers 8.8.8.8 1.1.1.1&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# dns_timeout 15 seconds&lt;/span&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 cache_peer_access - какие(чьи) запросы к доменам, порождают соединение, проходящее через соседский прокси
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 never_direct - какие(чьи) запросы, НИКОГДА НЕ БУДУТ идти напрямую в Интернет
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 always_direct - какие(чьи) запросы, будут ВСЕГДА идти напрямую в Интернет
&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;squid.conf&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;squidconf&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;3528-10082&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;удаление_комментариев&quot;&gt;Удаление комментариев&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co4&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;etc&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;squid.conf &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;^[^#;]&amp;quot;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435_\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;10083-10201&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;перенаправление_на_другой_сайт&quot;&gt;Перенаправление на другой сайт&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;acl redirect url_regex czx.to
http_access deny redirect
deny_info http://video.czx.to redirect&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0430\u0439\u0442&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435_\u043d\u0430_\u0434\u0440\u0443\u0433\u043e\u0439_\u0441\u0430\u0439\u0442&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;10202-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=network:tor">
        <dc:format>text/html</dc:format>
        <dc:date>2025-07-02T02:16:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Tor</title>
        <link>http://178.140.10.58:8080/doku.php?id=network:tor</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;tor&quot;&gt;Tor&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Tor&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;tor&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-19&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;транспорты&quot;&gt;Транспорты&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;20-53&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;obfs4&quot;&gt;obfs4&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co4&quot;&gt;$ &lt;/span&gt;apt &lt;span class=&quot;kw2&quot;&gt;install&lt;/span&gt; obfs4proxy&lt;/pre&gt;
&lt;pre class=&quot;code&quot;&gt;UseBridges 1
ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy
Bridge obfs4 109.105.195.250:443 0BAC39417266B96B9C515FBE8A212F3F99CDADFA cert=2GOE0WYzlJqsngEikegPdC+5OiFa3vKB5Stylw1NLl+ekpCZ7EpJRoKiWMAB//YFYq iat-mode=0
Bridge obfs4 89.217.173.119:9001 B64C5A360D530633CB2D8DEC5D19CA35C4360C93 cert=aJecxsni6mgSTU0BPz3v0W7GA+RmjuDFA7NF+KffQNydMX7npDvjqrCXRnzY0ym9EKlLTw iat-mode=0&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;obfs4&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;obfs4&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;54-516&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;meek&quot;&gt;meek&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;UseBridges 1
ClientTransportPlugin meek exec /usr/bin/meek-client
Bridge meek 0.0.2.0:1 url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;meek&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;meek&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;517-693&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;snowflake&quot;&gt;Snowflake&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ &lt;span class=&quot;kw2&quot;&gt;sudo&lt;/span&gt; apt &lt;span class=&quot;kw2&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;git&lt;/span&gt; golang-go &lt;span class=&quot;re5&quot;&gt;-y&lt;/span&gt;
$ &lt;span class=&quot;kw2&quot;&gt;git clone&lt;/span&gt; https:&lt;span class=&quot;sy0&quot;&gt;//&lt;/span&gt;github.com&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;syphyr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;snowflake.git
$ &lt;span class=&quot;kw3&quot;&gt;cd&lt;/span&gt; snowflake&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;client
$ go build &lt;span class=&quot;re5&quot;&gt;-o&lt;/span&gt; snowflake-client
$ &lt;span class=&quot;kw2&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;mv&lt;/span&gt; snowflake-client &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code&quot;&gt;UseBridges 1
ClientTransportPlugin snowflake exec /usr/bin/snowflake-client \
  -url https://snowflake-broker.torproject.net.global.prod.fastly.net/ \
  -front cdn.sstatic.net \
  -ice stun:stun.voip.blackberry.com:3478 \
  --log /var/log/tor/snowflake-server.log
Bridge snowflake 192.0.2.3:80 2B280B23E1107BB62ABFC40DDCC8824814F80A72&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Snowflake&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;snowflake&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;694-1264&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;shadowsocks&quot;&gt;Shadowsocks&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;UseBridges 1
ClientTransportPlugin ss exec /usr/bin/ss-local -- -c /etc/tor/shadowsocks.json
Bridge ss 203.0.113.5:8388&lt;/pre&gt;

&lt;p&gt;
/etc/tor/shadowsocks.json
&lt;/p&gt;
&lt;pre class=&quot;code json&quot;&gt;{
  &amp;quot;server&amp;quot;: &amp;quot;203.0.113.5&amp;quot;,
  &amp;quot;server_port&amp;quot;: 8388,
  &amp;quot;password&amp;quot;: &amp;quot;your-strong-password&amp;quot;,
  &amp;quot;method&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
  &amp;quot;mode&amp;quot;: &amp;quot;tcp_only&amp;quot;
}&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Shadowsocks&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;shadowsocks&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1265-1609&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;мониторинг&quot;&gt;Мониторинг&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code bash&quot;&gt;$ docker build &lt;span class=&quot;re5&quot;&gt;-t&lt;/span&gt; theonionbox .
$ docker run &lt;span class=&quot;re5&quot;&gt;--restart&lt;/span&gt; always &lt;span class=&quot;re5&quot;&gt;--network&lt;/span&gt; host &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;8080&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;8080&lt;/span&gt; theonionbox:latest&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;1610-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=network:transmission">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-18T21:23:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Transmission</title>
        <link>http://178.140.10.58:8080/doku.php?id=network:transmission</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;transmission&quot;&gt;Transmission&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Transmission&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;transmission&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-28&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;установка&quot;&gt;Установка&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;29-61&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;настройка&quot;&gt;Настройка&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code json&quot;&gt;{
    &amp;quot;alt-speed-down&amp;quot;: 10,
    &amp;quot;alt-speed-enabled&amp;quot;: false,
    &amp;quot;alt-speed-time-begin&amp;quot;: 600,
    &amp;quot;alt-speed-time-day&amp;quot;: 62,
    &amp;quot;alt-speed-time-enabled&amp;quot;: true,
    &amp;quot;alt-speed-time-end&amp;quot;: 60,
    &amp;quot;alt-speed-up&amp;quot;: 1000,
    &amp;quot;announce-ip&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;announce-ip-enabled&amp;quot;: false,
    &amp;quot;anti-brute-force-enabled&amp;quot;: false,
    &amp;quot;anti-brute-force-threshold&amp;quot;: 100,
    &amp;quot;bind-address-ipv4&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
    &amp;quot;bind-address-ipv6&amp;quot;: &amp;quot;::&amp;quot;,
    &amp;quot;blocklist-enabled&amp;quot;: true,
    &amp;quot;blocklist-url&amp;quot;: &amp;quot;https://github.com/Naunter/BT_BlockLists/raw/master/bt_blocklists.gz&amp;quot;,
    &amp;quot;cache-size-mb&amp;quot;: 32,
    &amp;quot;default-trackers&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;dht-enabled&amp;quot;: true,
    &amp;quot;download-dir&amp;quot;: &amp;quot;/mnt/Torrents/downloads&amp;quot;,
    &amp;quot;download-limit&amp;quot;: 100,
    &amp;quot;download-limit-enabled&amp;quot;: false,
    &amp;quot;download-queue-enabled&amp;quot;: true,
    &amp;quot;download-queue-size&amp;quot;: 5,
    &amp;quot;encryption&amp;quot;: 1,
    &amp;quot;idle-seeding-limit&amp;quot;: 30,
    &amp;quot;idle-seeding-limit-enabled&amp;quot;: true,
    &amp;quot;incomplete-dir&amp;quot;: &amp;quot;/mnt/Torrents/incomplete&amp;quot;,
    &amp;quot;incomplete-dir-enabled&amp;quot;: true,
    &amp;quot;lpd-enabled&amp;quot;: true,
    &amp;quot;max-peers-global&amp;quot;: 200,
    &amp;quot;message-level&amp;quot;: 5,
    &amp;quot;peer-congestion-algorithm&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;peer-id-ttl-hours&amp;quot;: 6,
    &amp;quot;peer-limit-global&amp;quot;: 200,
    &amp;quot;peer-limit-per-torrent&amp;quot;: 30,
    &amp;quot;peer-port&amp;quot;: 55142,
    &amp;quot;peer-port-random-high&amp;quot;: 65535,
    &amp;quot;peer-port-random-low&amp;quot;: 49152,
    &amp;quot;peer-port-random-on-start&amp;quot;: false,
    &amp;quot;peer-socket-tos&amp;quot;: &amp;quot;le&amp;quot;,
    &amp;quot;pex-enabled&amp;quot;: true,
    &amp;quot;pidfile&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;port-forwarding-enabled&amp;quot;: true,
    &amp;quot;preallocation&amp;quot;: 1,
    &amp;quot;preferred_transport&amp;quot;: &amp;quot;utp&amp;quot;,
    &amp;quot;prefetch-enabled&amp;quot;: true,
    &amp;quot;proxy_url&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;queue-stalled-enabled&amp;quot;: true,
    &amp;quot;queue-stalled-minutes&amp;quot;: 30,
    &amp;quot;ratio-limit&amp;quot;: 2.0,
    &amp;quot;ratio-limit-enabled&amp;quot;: true,
    &amp;quot;rename-partial-files&amp;quot;: true,
    &amp;quot;reqq&amp;quot;: 2000,
    &amp;quot;rpc-authentication-required&amp;quot;: true,
    &amp;quot;rpc-bind-address&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
    &amp;quot;rpc-enabled&amp;quot;: true,
    &amp;quot;rpc-host-whitelist&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;rpc-host-whitelist-enabled&amp;quot;: true,
    &amp;quot;rpc-password&amp;quot;: &amp;quot;{87ecf70dcfec2d852c300462512e60147b95d04805Pr9H1d&amp;quot;,
    &amp;quot;rpc-port&amp;quot;: 9091,
    &amp;quot;rpc-socket-mode&amp;quot;: &amp;quot;0750&amp;quot;,
    &amp;quot;rpc-url&amp;quot;: &amp;quot;/transmission/&amp;quot;,
    &amp;quot;rpc-username&amp;quot;: &amp;quot;transmission&amp;quot;,
    &amp;quot;rpc-whitelist&amp;quot;: &amp;quot;127.0.0.1,192.168.*.*&amp;quot;,
    &amp;quot;rpc-whitelist-enabled&amp;quot;: true,
    &amp;quot;scrape-paused-torrents-enabled&amp;quot;: true,
    &amp;quot;script-torrent-added-enabled&amp;quot;: false,
    &amp;quot;script-torrent-added-filename&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;script-torrent-done-enabled&amp;quot;: false,
    &amp;quot;script-torrent-done-filename&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;script-torrent-done-seeding-enabled&amp;quot;: false,
    &amp;quot;script-torrent-done-seeding-filename&amp;quot;: &amp;quot;&amp;quot;,
    &amp;quot;seed-queue-enabled&amp;quot;: true,
    &amp;quot;seed-queue-size&amp;quot;: 3,
    &amp;quot;sequential_download&amp;quot;: false,
    &amp;quot;sleep-per-seconds-during-verify&amp;quot;: 100,
    &amp;quot;speed-limit-down&amp;quot;: 307200,
    &amp;quot;speed-limit-down-enabled&amp;quot;: true,
    &amp;quot;speed-limit-up&amp;quot;: 307200,
    &amp;quot;speed-limit-up-enabled&amp;quot;: true,
    &amp;quot;start-added-torrents&amp;quot;: true,
    &amp;quot;start_paused&amp;quot;: false,
    &amp;quot;tcp-enabled&amp;quot;: true,
    &amp;quot;torrent-added-verify-mode&amp;quot;: &amp;quot;fast&amp;quot;,
    &amp;quot;trash-original-torrent-files&amp;quot;: false,
    &amp;quot;umask&amp;quot;: &amp;quot;022&amp;quot;,
    &amp;quot;upload-limit&amp;quot;: 100,
    &amp;quot;upload-limit-enabled&amp;quot;: 0,
    &amp;quot;upload-slots-per-torrent&amp;quot;: 14,
    &amp;quot;utp-enabled&amp;quot;: true,
    &amp;quot;watch-dir&amp;quot;: &amp;quot;/mnt/Torrents/torrents&amp;quot;,
    &amp;quot;watch-dir-enabled&amp;quot;: true,
    &amp;quot;watch-dir-force-generic&amp;quot;: false
}&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;62-3272&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;проверка_на_наличие_ошибок&quot;&gt;Проверка на наличие ошибок&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
pip3 freeze &amp;gt; requirements.txt
&lt;/p&gt;
&lt;pre class=&quot;code python&quot;&gt;bencode&lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1.0&lt;/span&gt;
bencodepy&lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt;0.9.5&lt;/pre&gt;
&lt;pre class=&quot;code python&quot;&gt;&lt;span class=&quot;co1&quot;&gt;#!/usr/bin/env python3&lt;/span&gt;
&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;
Torrent File Validator and Cleaner
&amp;nbsp;
This script validates torrent files, checks their structure and content,
and provides options to move invalid files to a separate directory.
&amp;nbsp;
Features:
- Validates both single torrent files and directories of torrents
- Recursive directory scanning
- Parallel processing for performance
- Detailed validation reporting
- Interactive cleanup of invalid files
- JSON output support
- Colorized console output
&amp;nbsp;
Exit codes:
0 - All files valid
1 - One or more invalid files found
130 - Operation cancelled by user (Ctrl+C)
&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; argparse
&lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; hashlib
&lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; json
&lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;logging&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;os&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;shutil&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;sys&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;traceback&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;from&lt;/span&gt; concurrent.&lt;span class=&quot;me1&quot;&gt;futures&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; ThreadPoolExecutor&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; as_completed
&lt;span class=&quot;kw1&quot;&gt;from&lt;/span&gt; dataclasses &lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; dataclass
&lt;span class=&quot;kw1&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;datetime&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;datetime&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;from&lt;/span&gt; enum &lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; Enum&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; auto
&lt;span class=&quot;kw1&quot;&gt;from&lt;/span&gt; pathlib &lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; Path
&lt;span class=&quot;kw1&quot;&gt;from&lt;/span&gt; typing &lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; Dict&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; List&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Optional&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Tuple
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;import&lt;/span&gt; bencodepy
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;# Constants&lt;/span&gt;
MIN_TORRENT_SIZE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;45&lt;/span&gt;  &lt;span class=&quot;co1&quot;&gt;# bytes&lt;/span&gt;
MAX_TORRENT_SIZE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt; * &lt;span class=&quot;nu0&quot;&gt;1024&lt;/span&gt; * &lt;span class=&quot;nu0&quot;&gt;1024&lt;/span&gt;  &lt;span class=&quot;co1&quot;&gt;# 10MB&lt;/span&gt;
VALID_EXTENSIONS &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;.torrent&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
REQUIRED_KEYS &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;announce&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;info&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
MAX_PIECE_SIZE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;16&lt;/span&gt; * &lt;span class=&quot;nu0&quot;&gt;1024&lt;/span&gt; * &lt;span class=&quot;nu0&quot;&gt;1024&lt;/span&gt;  &lt;span class=&quot;co1&quot;&gt;# 16MB&lt;/span&gt;
INVALID_FILES_DIR &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Path.&lt;span class=&quot;me1&quot;&gt;home&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; / &lt;span class=&quot;st0&quot;&gt;&amp;quot;invalid_torrents&amp;quot;&lt;/span&gt;
MAX_FILES_TO_SHOW &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;  &lt;span class=&quot;co1&quot;&gt;# Maximum files to show in preview&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;# Configure logging&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;logging&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;basicConfig&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
    level&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;logging&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;INFO&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    format&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;%(asctime)s - %(levelname)s - %(message)s&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    handlers&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;logging&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;StreamHandler&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
logger &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;logging&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;getLogger&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;__name__&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;class&lt;/span&gt; Color:
    RED &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;&lt;span class=&quot;es0&quot;&gt;\0&lt;/span&gt;33[91m&#039;&lt;/span&gt;
    GREEN &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;&lt;span class=&quot;es0&quot;&gt;\0&lt;/span&gt;33[92m&#039;&lt;/span&gt;
    YELLOW &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;&lt;span class=&quot;es0&quot;&gt;\0&lt;/span&gt;33[93m&#039;&lt;/span&gt;
    BLUE &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;&lt;span class=&quot;es0&quot;&gt;\0&lt;/span&gt;33[94m&#039;&lt;/span&gt;
    CYAN &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;&lt;span class=&quot;es0&quot;&gt;\0&lt;/span&gt;33[96m&#039;&lt;/span&gt;
    BOLD &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;&lt;span class=&quot;es0&quot;&gt;\0&lt;/span&gt;33[1m&#039;&lt;/span&gt;
    RESET &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;&lt;span class=&quot;es0&quot;&gt;\0&lt;/span&gt;33[0m&#039;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;class&lt;/span&gt; IssueLevel&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Enum&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Severity levels for validation issues&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    ERROR &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; auto&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;    &lt;span class=&quot;co1&quot;&gt;# Critical problems - makes file invalid&lt;/span&gt;
    WARNING &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; auto&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;  &lt;span class=&quot;co1&quot;&gt;# Non-critical issues - file remains valid&lt;/span&gt;
    INFO &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; auto&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;     &lt;span class=&quot;co1&quot;&gt;# Informational messages&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;dataclass
&lt;span class=&quot;kw1&quot;&gt;class&lt;/span&gt; ValidationIssue:
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Represents a single validation issue&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    message: &lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;
    level: IssueLevel
    exception: Optional&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;None&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;dataclass
&lt;span class=&quot;kw1&quot;&gt;class&lt;/span&gt; TorrentValidationResult:
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Contains complete validation results for a torrent file&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    filepath: Path
    is_valid: &lt;span class=&quot;kw2&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;True&lt;/span&gt;  &lt;span class=&quot;co1&quot;&gt;# Default to valid&lt;/span&gt;
    size: &lt;span class=&quot;kw2&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
    modified_time: &lt;span class=&quot;kw3&quot;&gt;datetime&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;datetime&lt;/span&gt;.&lt;span class=&quot;kw2&quot;&gt;min&lt;/span&gt;
    info_hash: Optional&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;None&lt;/span&gt;
    issues: List&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;ValidationIssue&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;None&lt;/span&gt;
    moved: &lt;span class=&quot;kw2&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;False&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; __post_init__&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Initialize and validate status&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;issues&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;None&lt;/span&gt;:
            &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;issues&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
	&lt;span class=&quot;co1&quot;&gt;# Ensure is_valid is False if any ERROR issues exist&lt;/span&gt;
        &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;._update_validity&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; add_issue&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; message: &lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; level: IssueLevel&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; exception: &lt;span class=&quot;kw2&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Add an issue and update validity status&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;issues&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ValidationIssue&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;message&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; level&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; exception&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;._update_validity&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; _update_validity&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Update validity status based on issues&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;is_valid&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;issue.&lt;span class=&quot;me1&quot;&gt;level&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; issue &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;issues&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; to_dict&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; -&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; Dict:
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Convert result to dictionary for JSON serialization&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span class=&quot;st0&quot;&gt;&#039;filepath&#039;&lt;/span&gt;: &lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;filepath&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st0&quot;&gt;&#039;is_valid&#039;&lt;/span&gt;: &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;is_valid&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st0&quot;&gt;&#039;size&#039;&lt;/span&gt;: &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st0&quot;&gt;&#039;modified_time&#039;&lt;/span&gt;: &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;modified_time&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;isoformat&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st0&quot;&gt;&#039;info_hash&#039;&lt;/span&gt;: &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;info_hash&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st0&quot;&gt;&#039;issues&#039;&lt;/span&gt;: &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
                &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
                    &lt;span class=&quot;st0&quot;&gt;&#039;message&#039;&lt;/span&gt;: issue.&lt;span class=&quot;me1&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;st0&quot;&gt;&#039;level&#039;&lt;/span&gt;: issue.&lt;span class=&quot;me1&quot;&gt;level&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
                    &lt;span class=&quot;st0&quot;&gt;&#039;exception&#039;&lt;/span&gt;: &lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;issue.&lt;span class=&quot;me1&quot;&gt;exception&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; issue.&lt;span class=&quot;me1&quot;&gt;exception&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;None&lt;/span&gt;
                &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; issue &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;issues&lt;/span&gt;
            &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;st0&quot;&gt;&#039;moved&#039;&lt;/span&gt;: &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;moved&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;class&lt;/span&gt; TorrentValidator:
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Main torrent validation logic&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;__init__&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; max_workers: &lt;span class=&quot;kw2&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Initialize with thread pool&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;max_workers&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; max_workers &lt;span class=&quot;kw1&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;min&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;os&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;cpu_count&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; + &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; validate_file&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; filepath: Path&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; -&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; TorrentValidationResult:
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Validate a single torrent file&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        result &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; TorrentValidationResult&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;filepath&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;filepath&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;try&lt;/span&gt;:
            &lt;span class=&quot;co1&quot;&gt;# Basic file checks&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; filepath.&lt;span class=&quot;me1&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
                result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;File not found&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; result
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; filepath.&lt;span class=&quot;me1&quot;&gt;suffix&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;lower&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; VALID_EXTENSIONS:
                result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Invalid file extension (expected {VALID_EXTENSIONS})&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; result
&amp;nbsp;
            &lt;span class=&quot;co1&quot;&gt;# File metadata&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;try&lt;/span&gt;:
                &lt;span class=&quot;kw3&quot;&gt;stat&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; filepath.&lt;span class=&quot;kw3&quot;&gt;stat&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                result.&lt;span class=&quot;me1&quot;&gt;size&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;stat&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;st_size&lt;/span&gt;
                result.&lt;span class=&quot;me1&quot;&gt;modified_time&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;datetime&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;fromtimestamp&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;stat&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;st_mtime&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; result.&lt;span class=&quot;me1&quot;&gt;size&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt; MIN_TORRENT_SIZE:
                    result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;File too small ({result.size} bytes)&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; result.&lt;span class=&quot;me1&quot;&gt;size&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; MAX_TORRENT_SIZE:
                    result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Large file size ({result.size} bytes)&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;WARNING&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; e:
                result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Failed to get file stats&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; e&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; result
&amp;nbsp;
            &lt;span class=&quot;co1&quot;&gt;# Read and validate file content&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;with&lt;/span&gt; filepath.&lt;span class=&quot;kw2&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;rb&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; f:
                data &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; f.&lt;span class=&quot;me1&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;co1&quot;&gt;# Validate structure&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;data&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt; MIN_TORRENT_SIZE:
                result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;File too small ({len(data)} bytes &amp;lt; {MIN_TORRENT_SIZE} minimum)&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; data.&lt;span class=&quot;me1&quot;&gt;startswith&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;b&lt;span class=&quot;st0&quot;&gt;&amp;quot;d&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
                result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Invalid structure: should start with &#039;d&#039;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; result.&lt;span class=&quot;me1&quot;&gt;is_valid&lt;/span&gt;:
                &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; result
&amp;nbsp;
            &lt;span class=&quot;co1&quot;&gt;# Decode torrent&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;try&lt;/span&gt;:
                decoded &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; bencodepy.&lt;span class=&quot;me1&quot;&gt;decode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;data&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; e:
                result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Failed to decode torrent file&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; e&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; result
&amp;nbsp;
            &lt;span class=&quot;co1&quot;&gt;# Validate content&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; key &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; REQUIRED_KEYS:
                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; key.&lt;span class=&quot;me1&quot;&gt;encode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; decoded:
                    result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Missing required field: {key}&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
            info &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; decoded.&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;b&lt;span class=&quot;st0&quot;&gt;&#039;info&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; info:
                result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Empty info dictionary&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;:
                piece_length &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; info.&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;b&lt;span class=&quot;st0&quot;&gt;&#039;piece length&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; piece_length &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; MAX_PIECE_SIZE:
                    result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Large piece size: {piece_length} bytes&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;WARNING&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; info.&lt;span class=&quot;me1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;b&lt;span class=&quot;st0&quot;&gt;&#039;private&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;:
                    result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Private torrent detected&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;WARNING&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;co1&quot;&gt;# Calculate hash&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;try&lt;/span&gt;:
                encoded &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; bencodepy.&lt;span class=&quot;me1&quot;&gt;encode&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;info&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                result.&lt;span class=&quot;me1&quot;&gt;info_hash&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; hashlib.&lt;span class=&quot;me1&quot;&gt;sha1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;encoded&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;hexdigest&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; e:
                result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Failed to calculate info hash&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; e&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; e:
            result.&lt;span class=&quot;me1&quot;&gt;add_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Unexpected validation error&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; e&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            logger.&lt;span class=&quot;me1&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Error validating {filepath}: {str(e)}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            logger.&lt;span class=&quot;me1&quot;&gt;debug&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;traceback&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;format_exc&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; result
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; validate_directory&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; directory: Path&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; recursive: &lt;span class=&quot;kw2&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; -&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; List&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;TorrentValidationResult&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;:
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Validate all torrent files in a directory&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; directory.&lt;span class=&quot;me1&quot;&gt;is_dir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
            &lt;span class=&quot;kw1&quot;&gt;raise&lt;/span&gt; NotADirectoryError&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Not a directory: {directory}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;# Find torrent files&lt;/span&gt;
        pattern &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;**/*.torrent&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; recursive &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;*.torrent&amp;quot;&lt;/span&gt;
        torrent_files &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            f &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; f &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; directory.&lt;span class=&quot;kw3&quot;&gt;glob&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;pattern&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; f.&lt;span class=&quot;me1&quot;&gt;is_file&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;and&lt;/span&gt; f.&lt;span class=&quot;me1&quot;&gt;suffix&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;lower&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; VALID_EXTENSIONS
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; torrent_files:
            logger.&lt;span class=&quot;me1&quot;&gt;warning&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;No torrent files found in {directory}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;# Process files in parallel&lt;/span&gt;
        results &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;with&lt;/span&gt; ThreadPoolExecutor&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;max_workers&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;max_workers&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; executor:
            future_to_file &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
                executor.&lt;span class=&quot;me1&quot;&gt;submit&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;validate_file&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; f&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;: f
                &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; f &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; torrent_files
            &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; future &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; as_completed&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;future_to_file&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
                &lt;span class=&quot;kw2&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; future_to_file&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;future&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;try&lt;/span&gt;:
                    results.&lt;span class=&quot;me1&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;future.&lt;span class=&quot;me1&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; e:
                    logger.&lt;span class=&quot;me1&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Error processing {file}: {str(e)}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                    results.&lt;span class=&quot;me1&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TorrentValidationResult&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
                        filepath&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
                        is_valid&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
                        issues&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;ValidationIssue&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Processing failed&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; e&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
                    &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; results
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;class&lt;/span&gt; OutputFormatter:
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Handles formatting of validation results&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;staticmethod&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; color_text&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;text: &lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; color: &lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; -&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;:
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Apply ANSI color to text&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; f&lt;span class=&quot;st0&quot;&gt;&amp;quot;{color}{text}{Color.RESET}&amp;quot;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;classmethod&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; format_issue&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;cls&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; issue: ValidationIssue&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; -&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;:
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Format a single validation issue&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; issue.&lt;span class=&quot;me1&quot;&gt;level&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;:
            color &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Color.&lt;span class=&quot;me1&quot;&gt;RED&lt;/span&gt;
            prefix &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;ERROR:&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;elif&lt;/span&gt; issue.&lt;span class=&quot;me1&quot;&gt;level&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;WARNING&lt;/span&gt;:
            color &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Color.&lt;span class=&quot;me1&quot;&gt;YELLOW&lt;/span&gt;
            prefix &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;WARNING:&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;:
            color &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Color.&lt;span class=&quot;me1&quot;&gt;BLUE&lt;/span&gt;
            prefix &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;INFO:&amp;quot;&lt;/span&gt;
&amp;nbsp;
        message &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; f&lt;span class=&quot;st0&quot;&gt;&amp;quot;  {prefix} {issue.message}&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; issue.&lt;span class=&quot;me1&quot;&gt;exception&lt;/span&gt;:
            message +&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; f&lt;span class=&quot;st0&quot;&gt;&amp;quot; ({str(issue.exception)})&amp;quot;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; cls.&lt;span class=&quot;me1&quot;&gt;color_text&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;message&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; color&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;sy0&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;classmethod&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; format_results&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;cls&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; results: List&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;TorrentValidationResult&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; verbose: &lt;span class=&quot;kw2&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; json_output: &lt;span class=&quot;kw2&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; -&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;:
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; json_output:
            &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; json.&lt;span class=&quot;me1&quot;&gt;dumps&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;r.&lt;span class=&quot;me1&quot;&gt;to_dict&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; r &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; results&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; indent&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;# Prepare statistics&lt;/span&gt;
        total &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;results&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        valid &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; r &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; results &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; r.&lt;span class=&quot;me1&quot;&gt;is_valid&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        invalid &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; total - valid
        &lt;span class=&quot;kw3&quot;&gt;warnings&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; r &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; results &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;i.&lt;span class=&quot;me1&quot;&gt;level&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;WARNING&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; r.&lt;span class=&quot;me1&quot;&gt;issues&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;# Build output&lt;/span&gt;
        output &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
            cls.&lt;span class=&quot;me1&quot;&gt;color_text&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;TORRENT VALIDATION REPORT&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Color.&lt;span class=&quot;me1&quot;&gt;CYAN&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            cls.&lt;span class=&quot;me1&quot;&gt;color_text&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;=&amp;quot;&lt;/span&gt; * &lt;span class=&quot;nu0&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Color.&lt;span class=&quot;me1&quot;&gt;CYAN&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Total files:     {total}&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            cls.&lt;span class=&quot;me1&quot;&gt;color_text&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Valid files:     {valid} (includes {warnings} with warnings)&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Color.&lt;span class=&quot;me1&quot;&gt;GREEN&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            cls.&lt;span class=&quot;me1&quot;&gt;color_text&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Invalid files:   {invalid} (with errors)&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Color.&lt;span class=&quot;me1&quot;&gt;RED&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
            cls.&lt;span class=&quot;me1&quot;&gt;color_text&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;=&amp;quot;&lt;/span&gt; * &lt;span class=&quot;nu0&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Color.&lt;span class=&quot;me1&quot;&gt;CYAN&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;# Add details if verbose&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; verbose:
            &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; result &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; results:
                &lt;span class=&quot;co1&quot;&gt;# Show files with issues or all files in verbose mode&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; verbose &lt;span class=&quot;kw1&quot;&gt;or&lt;/span&gt; result.&lt;span class=&quot;me1&quot;&gt;issues&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; result.&lt;span class=&quot;me1&quot;&gt;is_valid&lt;/span&gt;:
                    has_errors &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;issue.&lt;span class=&quot;me1&quot;&gt;level&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; issue &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; result.&lt;span class=&quot;me1&quot;&gt;issues&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                    status &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;VALID&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; has_errors &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;INVALID&amp;quot;&lt;/span&gt;
                    color &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Color.&lt;span class=&quot;me1&quot;&gt;GREEN&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; has_errors &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; Color.&lt;span class=&quot;me1&quot;&gt;RED&lt;/span&gt;
&amp;nbsp;
                    output.&lt;span class=&quot;me1&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;[{cls.color_text(status, color)}] {result.filepath}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
                    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; result.&lt;span class=&quot;me1&quot;&gt;info_hash&lt;/span&gt;:
                        output.&lt;span class=&quot;me1&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;{cls.color_text(&#039;  Info Hash:&#039;, Color.BLUE)} {result.info_hash}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
                    &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; issue &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;sorted&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;result.&lt;span class=&quot;me1&quot;&gt;issues&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; key&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;lambda&lt;/span&gt; x: x.&lt;span class=&quot;me1&quot;&gt;level&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; reverse&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
                        output.&lt;span class=&quot;me1&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;cls.&lt;span class=&quot;me1&quot;&gt;format_issue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;issue&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        output.&lt;span class=&quot;me1&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;cls.&lt;span class=&quot;me1&quot;&gt;color_text&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;Validation complete&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; Color.&lt;span class=&quot;me1&quot;&gt;CYAN&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;output&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; move_invalid_files&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;results: List&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;TorrentValidationResult&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; -&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;None&lt;/span&gt;:
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Move invalid torrent files to ~/invalid_torrents&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    invalid_files &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;r &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; r &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; results &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; r.&lt;span class=&quot;me1&quot;&gt;is_valid&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;not&lt;/span&gt; invalid_files:
        &lt;span class=&quot;kw1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Color.&lt;span class=&quot;me1&quot;&gt;GREEN&lt;/span&gt; + &lt;span class=&quot;st0&quot;&gt;&amp;quot;No invalid files to move.&amp;quot;&lt;/span&gt; + Color.&lt;span class=&quot;me1&quot;&gt;RESET&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;# Show preview of files to be moved&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Color.&lt;span class=&quot;me1&quot;&gt;YELLOW&lt;/span&gt; + f&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;Found {len(invalid_files)} invalid torrent files (with ERRORS):&amp;quot;&lt;/span&gt; + Color.&lt;span class=&quot;me1&quot;&gt;RESET&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; i&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; result &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;enumerate&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;invalid_files&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;:MAX_FILES_TO_SHOW&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
        &lt;span class=&quot;kw1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;  {i+1}. {result.filepath}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;# Show only ERROR messages (skip WARNINGs)&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; issue &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; result.&lt;span class=&quot;me1&quot;&gt;issues&lt;/span&gt;:
            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; issue.&lt;span class=&quot;me1&quot;&gt;level&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; IssueLevel.&lt;span class=&quot;me1&quot;&gt;ERROR&lt;/span&gt;:
                &lt;span class=&quot;kw1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;     - {Color.RED}{issue.message}{Color.RESET}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;invalid_files&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; MAX_FILES_TO_SHOW:
        &lt;span class=&quot;kw1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;  ... and {len(invalid_files)-MAX_FILES_TO_SHOW} more files&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;All these files will be moved to: {Color.CYAN}{INVALID_FILES_DIR}{Color.RESET}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;try&lt;/span&gt;:
        response &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;Do you want to move them? [y/N]: &amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;strip&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;lower&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; response &lt;span class=&quot;sy0&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;y&#039;&lt;/span&gt;:
            &lt;span class=&quot;kw1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Color.&lt;span class=&quot;me1&quot;&gt;YELLOW&lt;/span&gt; + &lt;span class=&quot;st0&quot;&gt;&amp;quot;Operation cancelled.&amp;quot;&lt;/span&gt; + Color.&lt;span class=&quot;me1&quot;&gt;RESET&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;# Create target directory if needed&lt;/span&gt;
        INVALID_FILES_DIR.&lt;span class=&quot;me1&quot;&gt;mkdir&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;exist_ok&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        moved_count &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; result &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; invalid_files:
            &lt;span class=&quot;kw1&quot;&gt;try&lt;/span&gt;:
                dest &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; INVALID_FILES_DIR / result.&lt;span class=&quot;me1&quot;&gt;filepath&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;name&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;co1&quot;&gt;# Handle filename conflicts&lt;/span&gt;
                counter &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
                &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; dest.&lt;span class=&quot;me1&quot;&gt;exists&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
                    stem &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; result.&lt;span class=&quot;me1&quot;&gt;filepath&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;stem&lt;/span&gt;
                    suffix &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; result.&lt;span class=&quot;me1&quot;&gt;filepath&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;suffix&lt;/span&gt;
                    dest &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; INVALID_FILES_DIR / f&lt;span class=&quot;st0&quot;&gt;&amp;quot;{stem}_{counter}{suffix}&amp;quot;&lt;/span&gt;
                    counter +&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
&amp;nbsp;
                &lt;span class=&quot;kw3&quot;&gt;shutil&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;move&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;result.&lt;span class=&quot;me1&quot;&gt;filepath&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;dest&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
                result.&lt;span class=&quot;me1&quot;&gt;moved&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;True&lt;/span&gt;
                moved_count +&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;
                logger.&lt;span class=&quot;me1&quot;&gt;info&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Moved {result.filepath} to {dest}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; e:
                logger.&lt;span class=&quot;me1&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Failed to move {result.filepath}: {str(e)}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;kw1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Color.&lt;span class=&quot;me1&quot;&gt;GREEN&lt;/span&gt; + f&lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;Successfully moved {moved_count}/{len(invalid_files)} files.&amp;quot;&lt;/span&gt; + Color.&lt;span class=&quot;me1&quot;&gt;RESET&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Location: {Color.CYAN}{INVALID_FILES_DIR}{Color.RESET}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;KeyboardInterrupt&lt;/span&gt;:
        &lt;span class=&quot;kw1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Color.&lt;span class=&quot;me1&quot;&gt;YELLOW&lt;/span&gt; + &lt;span class=&quot;st0&quot;&gt;&amp;quot;&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;Operation cancelled by user.&amp;quot;&lt;/span&gt; + Color.&lt;span class=&quot;me1&quot;&gt;RESET&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; e:
        logger.&lt;span class=&quot;me1&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Error moving files: {str(e)}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;def&lt;/span&gt; main&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class=&quot;kw3&quot;&gt;parser&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; argparse.&lt;span class=&quot;me1&quot;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
        description&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Validate torrent files and optionally move invalid ones&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        formatter_class&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;argparse.&lt;span class=&quot;me1&quot;&gt;RawDescriptionHelpFormatter&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        epilog&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&amp;quot;Examples:
  Validate single file:    %(prog)s file.torrent -v
  Validate directory:      %(prog)s /path/to/torrents -r
  Move invalid files:      %(prog)s /path/to/torrents -m
  JSON output:             %(prog)s /path/to/torrents -j &amp;gt; results.json
&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw3&quot;&gt;parser&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;add_argument&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;path&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;Path&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;help&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Path to torrent file or directory&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;parser&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;add_argument&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;-r&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;--recursive&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; action&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;store_true&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;help&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Search directories recursively&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;parser&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;add_argument&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;-j&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;--json&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; action&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;store_true&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;help&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Output results in JSON format&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;parser&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;add_argument&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;-v&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;--verbose&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; action&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;store_true&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;help&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Show detailed validation information&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;parser&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;add_argument&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;-w&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;--workers&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; default&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;help&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Number of worker threads&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;parser&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;add_argument&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;-m&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;--move-invalid&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; action&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;store_true&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;help&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Move invalid torrent files&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;parser&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;add_argument&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;--debug&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; action&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;store_true&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;help&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Enable debug logging&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    args &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;parser&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;parse_args&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;try&lt;/span&gt;:
        &lt;span class=&quot;co1&quot;&gt;# Configure logging&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; args.&lt;span class=&quot;me1&quot;&gt;debug&lt;/span&gt;:
            logger.&lt;span class=&quot;me1&quot;&gt;setLevel&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;logging&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;DEBUG&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;:
            logger.&lt;span class=&quot;me1&quot;&gt;setLevel&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;logging&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;INFO&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        validator &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; TorrentValidator&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;max_workers&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;args.&lt;span class=&quot;me1&quot;&gt;workers&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;# Validate files&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; args.&lt;span class=&quot;me1&quot;&gt;path&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;is_file&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:
            results &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;validator.&lt;span class=&quot;me1&quot;&gt;validate_file&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;args.&lt;span class=&quot;me1&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;:
            results &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; validator.&lt;span class=&quot;me1&quot;&gt;validate_directory&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;args.&lt;span class=&quot;me1&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; args.&lt;span class=&quot;me1&quot;&gt;recursive&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;# Display results&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;OutputFormatter.&lt;span class=&quot;me1&quot;&gt;format_results&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;results&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; args.&lt;span class=&quot;me1&quot;&gt;verbose&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; args.&lt;span class=&quot;me1&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;# Handle invalid files movement&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; args.&lt;span class=&quot;me1&quot;&gt;move_invalid&lt;/span&gt;:
            move_invalid_files&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;results&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;# Exit with appropriate status code&lt;/span&gt;
        &lt;span class=&quot;kw3&quot;&gt;sys&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;r.&lt;span class=&quot;me1&quot;&gt;is_valid&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; r &lt;span class=&quot;kw1&quot;&gt;in&lt;/span&gt; results&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;KeyboardInterrupt&lt;/span&gt;:
        logger.&lt;span class=&quot;me1&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Operation cancelled by user&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;kw3&quot;&gt;sys&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;130&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; e:
        logger.&lt;span class=&quot;me1&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;f&lt;span class=&quot;st0&quot;&gt;&amp;quot;Fatal error: {str(e)}&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; args.&lt;span class=&quot;me1&quot;&gt;debug&lt;/span&gt;:
            &lt;span class=&quot;kw3&quot;&gt;traceback&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;print_exc&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span class=&quot;kw3&quot;&gt;sys&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; __name__ &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;__main__&amp;quot;&lt;/span&gt;:
    main&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430_\u043d\u0430_\u043d\u0430\u043b\u0438\u0447\u0438\u0435_\u043e\u0448\u0438\u0431\u043e\u043a&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;3273-19639&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;block_list&quot;&gt;Block List&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;http://john.bitsurge.net/public/biglist.p2p.gz&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Block List&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;block_list&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;19640-19722&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;клиенты&quot;&gt;Клиенты&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 &lt;a href=&quot;https://github.com/leonsoft-kras/transmisson-remote-gui&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/leonsoft-kras/transmisson-remote-gui&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/leonsoft-kras/transmisson-remote-gui&lt;/a&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041a\u043b\u0438\u0435\u043d\u0442\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043a\u043b\u0438\u0435\u043d\u0442\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;19723-19809&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;ошибки&quot;&gt;Ошибки&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0448\u0438\u0431\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0448\u0438\u0431\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;19810-19833&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit8&quot; id=&quot;qне_уталяется_запись_в_transmission_remote_gui&quot;&gt;Q: Не уталяется запись в Transmission Remote GUI&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Из-за особенности работы сервера, запись может быть удалена только при наличии свободного места на диске, где располагаются файлы торента
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Q: \u041d\u0435 \u0443\u0442\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 Transmission Remote GUI&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;q\u043d\u0435_\u0443\u0442\u0430\u043b\u044f\u0435\u0442\u0441\u044f_\u0437\u0430\u043f\u0438\u0441\u044c_\u0432_transmission_remote_gui&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;19834-&amp;quot;} --&gt;</description>
    </item>
</rdf:RDF>
