seaf-netconf-parser 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. seaf_netconf_parser-0.1.0/.$network_diagram.drawio.dtmp +42 -0
  2. seaf_netconf_parser-0.1.0/.idea/.gitignore +3 -0
  3. seaf_netconf_parser-0.1.0/.idea/NetConf_Parser.iml +12 -0
  4. seaf_netconf_parser-0.1.0/.idea/inspectionProfiles/profiles_settings.xml +6 -0
  5. seaf_netconf_parser-0.1.0/.idea/misc.xml +7 -0
  6. seaf_netconf_parser-0.1.0/.idea/modules.xml +8 -0
  7. seaf_netconf_parser-0.1.0/.idea/vcs.xml +6 -0
  8. seaf_netconf_parser-0.1.0/.idea/workspace.xml +83 -0
  9. seaf_netconf_parser-0.1.0/LICENSE +21 -0
  10. seaf_netconf_parser-0.1.0/PKG-INFO +175 -0
  11. seaf_netconf_parser-0.1.0/README.md +156 -0
  12. seaf_netconf_parser-0.1.0/VENDOR_SUPPORT.md +351 -0
  13. seaf_netconf_parser-0.1.0/__init__.py +0 -0
  14. seaf_netconf_parser-0.1.0/data/running.current +258 -0
  15. seaf_netconf_parser-0.1.0/lib/device_analyzer.py +2554 -0
  16. seaf_netconf_parser-0.1.0/lib/network_visualizer.py +1667 -0
  17. seaf_netconf_parser-0.1.0/lib/pattern_validator.py +274 -0
  18. seaf_netconf_parser-0.1.0/lib/seaf_converter.py +874 -0
  19. seaf_netconf_parser-0.1.0/main.py +111 -0
  20. seaf_netconf_parser-0.1.0/network_details.txt +160 -0
  21. seaf_netconf_parser-0.1.0/network_diagram.drawio +32 -0
  22. seaf_netconf_parser-0.1.0/patterns/devices/arista.json +54 -0
  23. seaf_netconf_parser-0.1.0/patterns/devices/aruba.json +54 -0
  24. seaf_netconf_parser-0.1.0/patterns/devices/b4com.json +104 -0
  25. seaf_netconf_parser-0.1.0/patterns/devices/cisco.json +476 -0
  26. seaf_netconf_parser-0.1.0/patterns/devices/cisco_asa.json +134 -0
  27. seaf_netconf_parser-0.1.0/patterns/devices/dell.json +55 -0
  28. seaf_netconf_parser-0.1.0/patterns/devices/dlink.json +105 -0
  29. seaf_netconf_parser-0.1.0/patterns/devices/f5.json +61 -0
  30. seaf_netconf_parser-0.1.0/patterns/devices/fortinet.json +52 -0
  31. seaf_netconf_parser-0.1.0/patterns/devices/hpe_aruba.json +125 -0
  32. seaf_netconf_parser-0.1.0/patterns/devices/huawei.json +108 -0
  33. seaf_netconf_parser-0.1.0/patterns/devices/juniper.json +82 -0
  34. seaf_netconf_parser-0.1.0/patterns/devices/mikrotik.json +129 -0
  35. seaf_netconf_parser-0.1.0/patterns/devices/paloalto.json +52 -0
  36. seaf_netconf_parser-0.1.0/patterns/devices/qtech.json +108 -0
  37. seaf_netconf_parser-0.1.0/patterns/devices/tfortis.json +102 -0
  38. seaf_netconf_parser-0.1.0/patterns/devices/unknown.json +99 -0
  39. seaf_netconf_parser-0.1.0/patterns/drawio/base.drawio +12 -0
  40. seaf_netconf_parser-0.1.0/patterns/drawio/templates/index.yaml +56 -0
  41. seaf_netconf_parser-0.1.0/patterns/drawio/templates/stencils.yaml +32 -0
  42. seaf_netconf_parser-0.1.0/patterns/schema.json +340 -0
  43. seaf_netconf_parser-0.1.0/patterns/seaf/base_entity.yaml +40 -0
  44. seaf_netconf_parser-0.1.0/patterns/seaf/device.yaml +84 -0
  45. seaf_netconf_parser-0.1.0/patterns/seaf/logical_link.yaml +82 -0
  46. seaf_netconf_parser-0.1.0/patterns/seaf/network.yaml +117 -0
  47. seaf_netconf_parser-0.1.0/pyproject.toml +39 -0
  48. seaf_netconf_parser-0.1.0/requirements.txt +2 -0
  49. seaf_netconf_parser-0.1.0/scripts/collect_running_prev.py +250 -0
  50. seaf_netconf_parser-0.1.0/seaf.yaml +35 -0
@@ -0,0 +1,42 @@
1
+ <mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.3.0 Chrome/140.0.7339.249 Electron/38.7.2 Safari/537.36">
2
+ <diagram name="Network Topology" id="rMuX2oWwCx14g4Km6Em1">
3
+ <mxGraphModel dx="2239" dy="847" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
4
+ <root>
5
+ <mxCell id="0" />
6
+ <mxCell id="1" parent="0" value="Physical links" />
7
+ <mxCell id="QHCq0N9UDPYM9EY1-Xmt-4" edge="1" parent="1" source="msk-m1-bb" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0.98;exitDx=0;exitDy=0;exitPerimeter=0;">
8
+ <mxGeometry relative="1" as="geometry">
9
+ <mxPoint x="-350" y="260" as="targetPoint" />
10
+ </mxGeometry>
11
+ </mxCell>
12
+ <object label="&lt;font style=&quot;color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237)); line-height: 140%; font-size: 9px; &quot;&gt;&amp;nbsp;msk-m1-bb&amp;nbsp;&lt;/font&gt;" title="msk-m1-bb" description="Cisco Коммутатор (свитч)" app_components="[]" stand="[]" external_id="" type="Коммутатор (свитч)" model="Catalyst 4500/6500 Core" realization_type="" address="" location="[]" segment="" network_connection="[&#39;10_99_11_0_24&#39;]" purpose="" OID="msk-m1-bb" schema="seaf.company.ta.components.networks" id="msk-m1-bb">
13
+ <mxCell parent="1" style="shape=mxgraph.cisco.switches.workgroup_switch;sketch=0;html=1;pointerEvents=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;labelBackgroundColor=default;fontSize=12;fontColor=#FFFFFF;" vertex="1">
14
+ <mxGeometry height="30" width="90" y="165" as="geometry" />
15
+ </mxCell>
16
+ </object>
17
+ <object label="leaf_label" OID="leaf_label" id="leaf_label">
18
+ <mxCell parent="1" style="text" vertex="1">
19
+ <mxGeometry height="30" width="400" y="250" as="geometry" />
20
+ </mxCell>
21
+ </object>
22
+ <mxCell id="2" parent="0" value="Mgm networks" visible="0" />
23
+ <object label="10.99.11.0/24" title="" description="" app_components="[]" stand="[]" external_id="" type="LAN" location="[]" lan_type="[&#39;Проводная&#39;, &#39;Беспроводная&#39;]" segment="[]" vlan="0" ipnetwork="10.99.11.0/24" purpose="" vrf="" OID="10_99_11_0_24" schema="seaf.company.ta.services.networks" id="10_99_11_0_24">
24
+ <mxCell parent="2" style="verticalAlign=middle;align=center;vsdxID=35397;rotation=0;fillColor=#c0cfe2;gradientColor=none;shape=stencil(nZFLDsIwDERP4y0KyQKxLuUCnCAihliEpEpL+ZyetANS6YJFs7JnXmxpTKZqvW2YtGq7nC58F9d5MjvSWqLnLF2pyNRkqlPKfM7pFh36xhZSq1Fhhz/rgdbK5uNBXgxts9r+PjAYck39sPwBVMF6foYp9HugQeIE/ZqL4D/oQnC2vhRjPAhOQkC6U38eZ5FwClO/AQ==);strokeColor=#000000;labelBackgroundColor=none;rounded=1;html=1;whiteSpace=wrap;" vertex="1">
25
+ <mxGeometry height="20" width="200" as="geometry" />
26
+ </mxCell>
27
+ </object>
28
+ <object label="" parent="3" src_label="Vlan11" source="msk-m1-bb" target="10_99_11_0_24" id="aaf71e4e9356c07353135b79e9fdfcb8">
29
+ <mxCell edge="1" parent="2" source="msk-m1-bb" style="endArrow=none;html=1;strokeColor=#43a047;strokeWidth=2;dashed=1;" target="10_99_11_0_24">
30
+ <mxGeometry relative="1" as="geometry" />
31
+ </mxCell>
32
+ </object>
33
+ <mxCell id="aaf71e4e9356c07353135b79e9fdfcb8-src" connectable="0" parent="aaf71e4e9356c07353135b79e9fdfcb8" style="labelBackgroundColor=#ffffff;;" value="Vlan11" vertex="1">
34
+ <mxGeometry relative="1" x="-0.5" as="geometry">
35
+ <mxPoint as="offset" />
36
+ </mxGeometry>
37
+ </mxCell>
38
+ <mxCell id="3" parent="0" value="Logical Links" visible="0" />
39
+ </root>
40
+ </mxGraphModel>
41
+ </diagram>
42
+ </mxfile>
@@ -0,0 +1,3 @@
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="PYTHON_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$" />
5
+ <orderEntry type="jdk" jdkName="Python 3.10 (DrawIo_maker)" jdkType="Python SDK" />
6
+ <orderEntry type="sourceFolder" forTests="false" />
7
+ </component>
8
+ <component name="PyDocumentationSettings">
9
+ <option name="format" value="PLAIN" />
10
+ <option name="myDocStringFormat" value="Plain" />
11
+ </component>
12
+ </module>
@@ -0,0 +1,6 @@
1
+ <component name="InspectionProjectProfileManager">
2
+ <settings>
3
+ <option name="USE_PROJECT_PROFILE" value="false" />
4
+ <version value="1.0" />
5
+ </settings>
6
+ </component>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Black">
4
+ <option name="sdkName" value="Python 3.10 (DrawIo_maker)" />
5
+ </component>
6
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (DrawIo_maker)" project-jdk-type="Python SDK" />
7
+ </project>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/NetConf_Parser.iml" filepath="$PROJECT_DIR$/.idea/NetConf_Parser.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="" vcs="Git" />
5
+ </component>
6
+ </project>
@@ -0,0 +1,83 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="AutoImportSettings">
4
+ <option name="autoReloadType" value="SELECTIVE" />
5
+ </component>
6
+ <component name="ChangeListManager">
7
+ <list default="true" id="c66ea31d-10de-42cf-9530-da0303ad047e" name="Changes" comment="Подготовка пакета" />
8
+ <option name="SHOW_DIALOG" value="false" />
9
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
10
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
11
+ <option name="LAST_RESOLUTION" value="IGNORE" />
12
+ </component>
13
+ <component name="Git.Settings">
14
+ <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
15
+ </component>
16
+ <component name="GitHubPullRequestSearchHistory">{
17
+ &quot;lastFilter&quot;: {
18
+ &quot;state&quot;: &quot;OPEN&quot;,
19
+ &quot;assignee&quot;: &quot;koa73&quot;
20
+ }
21
+ }</component>
22
+ <component name="GithubPullRequestsUISettings">{
23
+ &quot;selectedUrlAndAccountId&quot;: {
24
+ &quot;url&quot;: &quot;https://github.com/koa73/NetConf_Parser.git&quot;,
25
+ &quot;accountId&quot;: &quot;4ba22a36-1291-4512-99df-abad8da17340&quot;
26
+ }
27
+ }</component>
28
+ <component name="ProjectColorInfo">{
29
+ &quot;associatedIndex&quot;: 1
30
+ }</component>
31
+ <component name="ProjectId" id="3E2clOnP6twFesEvHAORJEnk3PA" />
32
+ <component name="ProjectViewState">
33
+ <option name="hideEmptyMiddlePackages" value="true" />
34
+ <option name="showLibraryContents" value="true" />
35
+ </component>
36
+ <component name="PropertiesComponent"><![CDATA[{
37
+ "keyToString": {
38
+ "Python.main.executor": "Run",
39
+ "RunOnceActivity.ShowReadmeOnStart": "true",
40
+ "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
41
+ "RunOnceActivity.git.unshallow": "true",
42
+ "git-widget-placeholder": "master"
43
+ }
44
+ }]]></component>
45
+ <component name="SharedIndexes">
46
+ <attachedChunks>
47
+ <set>
48
+ <option value="bundled-python-sdk-f69e5c277ee4-cbfc7b97e6b2-com.jetbrains.pycharm.community.sharedIndexes.bundled-PC-252.27397.106" />
49
+ </set>
50
+ </attachedChunks>
51
+ </component>
52
+ <component name="TaskManager">
53
+ <task active="true" id="Default" summary="Default task">
54
+ <changelist id="c66ea31d-10de-42cf-9530-da0303ad047e" name="Changes" comment="" />
55
+ <created>1779380257236</created>
56
+ <option name="number" value="Default" />
57
+ <option name="presentableId" value="Default" />
58
+ <updated>1779380257236</updated>
59
+ </task>
60
+ <task id="LOCAL-00001" summary="Подготовка пакета">
61
+ <option name="closed" value="true" />
62
+ <created>1793359251981</created>
63
+ <option name="number" value="00001" />
64
+ <option name="presentableId" value="LOCAL-00001" />
65
+ <option name="project" value="LOCAL" />
66
+ <updated>1793359251981</updated>
67
+ </task>
68
+ <task id="LOCAL-00002" summary="Подготовка пакета">
69
+ <option name="closed" value="true" />
70
+ <created>1793359898491</created>
71
+ <option name="number" value="00002" />
72
+ <option name="presentableId" value="LOCAL-00002" />
73
+ <option name="project" value="LOCAL" />
74
+ <updated>1793359898491</updated>
75
+ </task>
76
+ <option name="localTasksCounter" value="3" />
77
+ <servers />
78
+ </component>
79
+ <component name="VcsManagerConfiguration">
80
+ <MESSAGE value="Подготовка пакета" />
81
+ <option name="LAST_COMMIT_MESSAGE" value="Подготовка пакета" />
82
+ </component>
83
+ </project>
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 koa73@bk.ru
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,175 @@
1
+ Metadata-Version: 2.5
2
+ Name: seaf-netconf-parser
3
+ Version: 0.1.0
4
+ Summary: Система анализа конфигураций сетевого оборудования для автоматического построения топологий сети и конвертации в формат SEAF (System Enterprise Architecture Framework).
5
+ Project-URL: Homepage, https://github.com/koa73/NetConf_Parser
6
+ Project-URL: Issues, https://github.com
7
+ Author-email: Kutsenko Oleg <koa73@bk.ru>
8
+ License: MIT
9
+ License-File: LICENSE
10
+ Classifier: Intended Audience :: System Administrators
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Topic :: System :: Networking
15
+ Requires-Python: >=3.10
16
+ Requires-Dist: n2g>=0.2.0
17
+ Requires-Dist: pyyaml>=6.0
18
+ Description-Content-Type: text/markdown
19
+
20
+ # NetConf Parser & SEAF Converter
21
+
22
+ Система анализа конфигураций сетевого оборудования для автоматического построения топологий сети и конвертации в формат SEAF (System Enterprise Architecture Framework).
23
+
24
+ ## 📌 Описание
25
+
26
+ Этот проект позволяет автоматически анализировать конфигурационные файлы сетевого оборудования разных производителей, извлекать структурированную информацию, строить сетевые топологии и конвертировать данные в формат SEAF для использования в системах архитектурного моделирования.
27
+
28
+ ## 🚀 Основные возможности
29
+
30
+ ### Анализ сетевого оборудования
31
+ - **Автоматическое определение вендора** по сигнатурам конфигурации
32
+ - **Извлечение данных устройства**: имя, модель, тип, VLAN, маршрутизируемые сети
33
+ - **Поддержка 9+ производителей**:
34
+ - Cisco (IOS, NX-OS, ASA)
35
+ - Juniper (Junos)
36
+ - Huawei (Enterprise, Carrier)
37
+ - MikroTik (RouterOS)
38
+ - F5 (BIG-IP)
39
+ - Arista (EOS)
40
+ - Palo Alto Networks (PAN-OS)
41
+ - Fortinet (FortiOS)
42
+ - Aruba/HPE
43
+ - Dell Networking
44
+
45
+ ### Анализ топологии
46
+ - **Физические связи** (Physical P2P Links) — обнаружение соединений между устройствами
47
+ - **Управленческие сети** (Management Networks) — интерфейсы управления
48
+ - **Логические связи** (Logical Links) — VXLAN overlay, сервисные сети
49
+
50
+ ### Визуализация
51
+ - **Генерация диаграмм draw.io** с использованием шаблонов
52
+ - **5 алгоритмов размещения**:
53
+ - Круговой (circular)
54
+ - Сеточный (grid)
55
+ - Силовой (force-directed)
56
+ - Кластерный (clustered)
57
+ - Spine-Leaf (оптимально для CLOS-архитектур)
58
+
59
+ ### SEAF Converter
60
+ - **Парсинг YAML-схем** из каталога `patterns/seaf/`
61
+ - **Поддержка наследования** через `allOf` (базовые сущности)
62
+ - **Поддержка вариантов** через `oneOf` (LAN/WAN)
63
+ - **Генерация шаблонов** для заполнения данными
64
+ - **Конвертация DRAWIO → YAML** для экспорта в SEAF
65
+
66
+ ## 📂 Структура проекта
67
+
68
+ ```
69
+ NetConf_Parser/
70
+ ├── main.py # Точка входа
71
+ ├── requirements.txt # Зависимости
72
+ ├── Readme.md # Документация
73
+ ├── network_diagram.drawio # Исходная диаграмма
74
+ ├── network_details.txt # Детальный отчёт
75
+ ├── seaf.yaml # Экспортированные данные SEAF
76
+ │
77
+ ├── lib/
78
+ │ ├── device_analyzer.py # Анализ устройств и топологии
79
+ │ ├── network_visualizer.py # Визуализация в draw.io
80
+ │ └── seaf_converter.py # Конвертер SEAF схем
81
+ │
82
+ ├── patterns/
83
+ │ ├── devices/ # Шаблоны вендоров (JSON)
84
+ │ │ ├── cisco.json
85
+ │ │ ├── juniper.json
86
+ │ │ ├── huawei.json
87
+ │ │ └── ...
88
+ │ ├── drawio/ # Шаблоны draw.io
89
+ │ │ ├── base.drawio
90
+ │ │ └── templates/
91
+ │ │ ├── index.yaml
92
+ │ │ └── stencils.yaml
93
+ │ └── seaf/ # YAML-схемы SEAF
94
+ │ ├── base_entity.yaml # Базовые сущности
95
+ │ ├── network.yaml # Сети (LAN/WAN)
96
+ │ ├── device.yaml # Сетевые устройства
97
+ │ └── logical_link.yaml # Логические связи
98
+ │
99
+ └── data/ # Конфигурационные файлы
100
+ └── *.cfg
101
+ ```
102
+
103
+ ## 🛠 Требования
104
+
105
+ - Python 3.10+
106
+ - PyYAML (обработка YAML)
107
+ - N2G (работа с draw.io)
108
+ - pytest (тестирование)
109
+
110
+ ## ⚙️ Установка
111
+
112
+ ```bash
113
+ # Клонирование репозитория
114
+ git clone https://github.com/yourusername/netconf-parser.git
115
+ cd netconf-parser
116
+
117
+ # Создание виртуальной среды
118
+ python3 -m venv .venv
119
+ source .venv/bin/activate # Linux/Mac
120
+ # .venv\Scripts\activate # Windows
121
+
122
+ # Установка зависимостей
123
+ pip install -r requirements.txt
124
+ ```
125
+
126
+ ## 🚀 Быстрый старт
127
+
128
+ ### 1. Анализ конфигураций
129
+
130
+ Поместите конфигурационные файлы в папку `data/`:
131
+
132
+ ```bash
133
+ mkdir data
134
+ cp /path/to/configs/*.cfg data/
135
+ ```
136
+
137
+ Запустите анализ:
138
+
139
+ ```bash
140
+ python3 main.py
141
+ ```
142
+
143
+ ### 2. Интерактивный режим
144
+
145
+ После анализа программа предложит:
146
+ - Выбрать алгоритм размещения для диаграммы
147
+ - Конвертировать данные из DRAWIO в YAML формат SEAF
148
+
149
+ ```
150
+ Выберите алгоритм размещения объектов на диаграмме:
151
+ 1. Круговой алгоритм
152
+ 2. Сеточный алгоритм
153
+ 3. Силовой алгоритм
154
+ 4. Кластерный алгоритм
155
+ 5. Spine-Leaf-Border Leaf (оптимально для CLOS архитектуры)
156
+
157
+ Произвести конвертацию данных из drawio файла? (Y/N): Y
158
+ ```
159
+
160
+ ## 📋 Выходные файлы
161
+
162
+ | Файл | Описание |
163
+ |------|----------|
164
+ | `network_details.txt` | Детальный отчёт об анализе |
165
+ | `network_diagram.drawio` | Диаграмма топологии |
166
+ | `seaf.yaml` | Экспортированные данные SEAF |
167
+
168
+ ## 📞 Контакты
169
+
170
+ - **GitHub**: https://github.com/yourusername/netconf-parser
171
+ - **Issues**: https://github.com/yourusername/netconf-parser/issues
172
+
173
+ ## 📄 Лицензия
174
+
175
+ MIT License
@@ -0,0 +1,156 @@
1
+ # NetConf Parser & SEAF Converter
2
+
3
+ Система анализа конфигураций сетевого оборудования для автоматического построения топологий сети и конвертации в формат SEAF (System Enterprise Architecture Framework).
4
+
5
+ ## 📌 Описание
6
+
7
+ Этот проект позволяет автоматически анализировать конфигурационные файлы сетевого оборудования разных производителей, извлекать структурированную информацию, строить сетевые топологии и конвертировать данные в формат SEAF для использования в системах архитектурного моделирования.
8
+
9
+ ## 🚀 Основные возможности
10
+
11
+ ### Анализ сетевого оборудования
12
+ - **Автоматическое определение вендора** по сигнатурам конфигурации
13
+ - **Извлечение данных устройства**: имя, модель, тип, VLAN, маршрутизируемые сети
14
+ - **Поддержка 9+ производителей**:
15
+ - Cisco (IOS, NX-OS, ASA)
16
+ - Juniper (Junos)
17
+ - Huawei (Enterprise, Carrier)
18
+ - MikroTik (RouterOS)
19
+ - F5 (BIG-IP)
20
+ - Arista (EOS)
21
+ - Palo Alto Networks (PAN-OS)
22
+ - Fortinet (FortiOS)
23
+ - Aruba/HPE
24
+ - Dell Networking
25
+
26
+ ### Анализ топологии
27
+ - **Физические связи** (Physical P2P Links) — обнаружение соединений между устройствами
28
+ - **Управленческие сети** (Management Networks) — интерфейсы управления
29
+ - **Логические связи** (Logical Links) — VXLAN overlay, сервисные сети
30
+
31
+ ### Визуализация
32
+ - **Генерация диаграмм draw.io** с использованием шаблонов
33
+ - **5 алгоритмов размещения**:
34
+ - Круговой (circular)
35
+ - Сеточный (grid)
36
+ - Силовой (force-directed)
37
+ - Кластерный (clustered)
38
+ - Spine-Leaf (оптимально для CLOS-архитектур)
39
+
40
+ ### SEAF Converter
41
+ - **Парсинг YAML-схем** из каталога `patterns/seaf/`
42
+ - **Поддержка наследования** через `allOf` (базовые сущности)
43
+ - **Поддержка вариантов** через `oneOf` (LAN/WAN)
44
+ - **Генерация шаблонов** для заполнения данными
45
+ - **Конвертация DRAWIO → YAML** для экспорта в SEAF
46
+
47
+ ## 📂 Структура проекта
48
+
49
+ ```
50
+ NetConf_Parser/
51
+ ├── main.py # Точка входа
52
+ ├── requirements.txt # Зависимости
53
+ ├── Readme.md # Документация
54
+ ├── network_diagram.drawio # Исходная диаграмма
55
+ ├── network_details.txt # Детальный отчёт
56
+ ├── seaf.yaml # Экспортированные данные SEAF
57
+ │
58
+ ├── lib/
59
+ │ ├── device_analyzer.py # Анализ устройств и топологии
60
+ │ ├── network_visualizer.py # Визуализация в draw.io
61
+ │ └── seaf_converter.py # Конвертер SEAF схем
62
+ │
63
+ ├── patterns/
64
+ │ ├── devices/ # Шаблоны вендоров (JSON)
65
+ │ │ ├── cisco.json
66
+ │ │ ├── juniper.json
67
+ │ │ ├── huawei.json
68
+ │ │ └── ...
69
+ │ ├── drawio/ # Шаблоны draw.io
70
+ │ │ ├── base.drawio
71
+ │ │ └── templates/
72
+ │ │ ├── index.yaml
73
+ │ │ └── stencils.yaml
74
+ │ └── seaf/ # YAML-схемы SEAF
75
+ │ ├── base_entity.yaml # Базовые сущности
76
+ │ ├── network.yaml # Сети (LAN/WAN)
77
+ │ ├── device.yaml # Сетевые устройства
78
+ │ └── logical_link.yaml # Логические связи
79
+ │
80
+ └── data/ # Конфигурационные файлы
81
+ └── *.cfg
82
+ ```
83
+
84
+ ## 🛠 Требования
85
+
86
+ - Python 3.10+
87
+ - PyYAML (обработка YAML)
88
+ - N2G (работа с draw.io)
89
+ - pytest (тестирование)
90
+
91
+ ## ⚙️ Установка
92
+
93
+ ```bash
94
+ # Клонирование репозитория
95
+ git clone https://github.com/yourusername/netconf-parser.git
96
+ cd netconf-parser
97
+
98
+ # Создание виртуальной среды
99
+ python3 -m venv .venv
100
+ source .venv/bin/activate # Linux/Mac
101
+ # .venv\Scripts\activate # Windows
102
+
103
+ # Установка зависимостей
104
+ pip install -r requirements.txt
105
+ ```
106
+
107
+ ## 🚀 Быстрый старт
108
+
109
+ ### 1. Анализ конфигураций
110
+
111
+ Поместите конфигурационные файлы в папку `data/`:
112
+
113
+ ```bash
114
+ mkdir data
115
+ cp /path/to/configs/*.cfg data/
116
+ ```
117
+
118
+ Запустите анализ:
119
+
120
+ ```bash
121
+ python3 main.py
122
+ ```
123
+
124
+ ### 2. Интерактивный режим
125
+
126
+ После анализа программа предложит:
127
+ - Выбрать алгоритм размещения для диаграммы
128
+ - Конвертировать данные из DRAWIO в YAML формат SEAF
129
+
130
+ ```
131
+ Выберите алгоритм размещения объектов на диаграмме:
132
+ 1. Круговой алгоритм
133
+ 2. Сеточный алгоритм
134
+ 3. Силовой алгоритм
135
+ 4. Кластерный алгоритм
136
+ 5. Spine-Leaf-Border Leaf (оптимально для CLOS архитектуры)
137
+
138
+ Произвести конвертацию данных из drawio файла? (Y/N): Y
139
+ ```
140
+
141
+ ## 📋 Выходные файлы
142
+
143
+ | Файл | Описание |
144
+ |------|----------|
145
+ | `network_details.txt` | Детальный отчёт об анализе |
146
+ | `network_diagram.drawio` | Диаграмма топологии |
147
+ | `seaf.yaml` | Экспортированные данные SEAF |
148
+
149
+ ## 📞 Контакты
150
+
151
+ - **GitHub**: https://github.com/yourusername/netconf-parser
152
+ - **Issues**: https://github.com/yourusername/netconf-parser/issues
153
+
154
+ ## 📄 Лицензия
155
+
156
+ MIT License