2 Commits

Author SHA1 Message Date
admin 3a77ed856e Removed MSI
Creating Release instead
2026-03-27 12:20:31 -04:00
admin a77d8dbbf8 Initial commit 2026-03-27 12:13:33 -04:00
38 changed files with 139597 additions and 182 deletions
-55
View File
@@ -1,55 +0,0 @@
@"
# Python
__pycache__/
*.py[cod]
*.so
.Python
*.egg-info/
dist/
build/
*.spec
# PyInstaller keep your main .spec file, but ignore autogenerated ones
*.manifest
*.pyd
!Uplink Manager.spec
!uplink_manager.spec
# WiX build outputs keep the .wxs source, ignore the rest
*.wixobj
*.wixpdb
*.msi
*.cab
!UplinkManager.wxs
# Logs and databases
*.log
*.sqlite
*.sqlite3
*.db
# User data (created by the app in AppData, not in repo)
nat_builds.json
nat_settings.json
logs/
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Thumbs.db
ehthumbs.db
*.swp
*.swo
# IDE
.vscode/
.idea/
*.sublime-*
# Temporary files
*.tmp
*.temp
"@ | Out-File -FilePath ".gitignore" -Encoding utf8
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

+1 -95
View File
@@ -1,96 +1,2 @@
# Uplink Manager
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
**Uplink Manager** is a Windows utility that configures WinNAT to provide internet access to downstream devices via a dedicated **NAT Uplink** adapter. Its designed for engineers who need to quickly set up network address translation on a Windows 11 Pro VM (e.g., VMware, HyperV) with a few clicks. The tool also supports a **DNS proxy** that forwards DNS requests from clients to external resolvers (like 8.8.8.8).
---
<p align="center">
<img src="GUI.png" alt="Uplink Manager GUI">
</p>
---
## 📋 Features
- **Oneclick NAT provisioning** assign a gateway IP and subnet to the NAT Uplink adapter.
- **Teardown** remove all NAT rules and restore the adapter to a clean state.
- **DNS Proxy** optionally enable DNS forwarding on the NAT Uplink interface.
- **Persistent settings** saved builds are stored in `%APPDATA%\Uplink Manager` and restored on launch.
- **Realtime activity log** see all PowerShell commands and their results in a scrollable log.
- **64bit MSI installer** installs the application and a postinstallation configuration wizard.
- **No admin required for config storage** user data is saved in AppData, not `Program Files`.
---
## 🚀 Installation
### 1. Download the MSI installer
Grab the latest `Uplink Manager.msi` from the [Releases](../../releases) page.
### 2. Run the installer
- **Rightclick** the MSI file and choose **Run as Administrator** (required to install to `Program Files`).
- Follow the installer wizard:
1. **Welcome** read the overview.
2. **PreInstallation Requirements** the installer checks for two active `vmxnet3` adapters and hardware virtualization.
3. **VM Prerequisites Check** verifies admin rights, Windows version, adapter count, and virtualization.
4. **Configure Network Adapters** choose which adapter will be the WAN (Internet VLAN) and which will be the NAT Uplink.
5. **Confirm** review changes.
6. **Install** the installer renames the selected adapters, enables HyperV Services, registers the WMI NAT provider, and creates a desktop shortcut.
- After installation, a desktop shortcut to **Uplink Manager** is created. Doubleclick it to launch the TUI.
---
## 🖥️ Usage
### Running Uplink Manager
- Launch the application from the desktop shortcut or Start Menu folder.
- If you are **not** running as Administrator, a warning will appear NAT commands require elevation.
### The Main Screen
- **Left panel** configuration form.
- **Right panel** status cards (active NAT, subnet, uplink IP, DNS IPs) and an activity log.
### Provision a Site
1. Fill in:
- **Site Name** (used only for logging)
- **Site Gateway IP** (e.g., `10.10.1.1`) this will be assigned to the NAT Uplink adapter
- **Site Subnet (CIDR)** (e.g., `10.10.1.0/24`) must include the gateway IP
2. (Optional) Toggle **Enable DNS Proxy** and enter one or two DNS server IPs (e.g., `10.4.100.1`). These will be added as `/32` addresses on the NAT Uplink, and the WAN adapters DNS will be set to `8.8.8.8`/`8.8.4.4`.
3. Click **Provision**. Confirm the action.
4. The log will show the progress in real time. When complete, the status cards update.
### Teardown
- Click **Teardown Uplink**. Confirm to remove **all** NAT rules and clear all IP addresses from the NAT Uplink adapter.
### Settings
- Press `Ctrl+S` (or use the footer bar) to open the Settings modal. Here you can:
- Enable **verbose logs** (show full PowerShell output)
- Toggle **auto refresh** and set the refresh interval for the status cards
- Settings are saved in `%APPDATA%\Uplink Manager\nat_settings.json`.
---
## 🔨 Building from Source
### Prerequisites
- Python 3.11 or later
- [Textual](https://textual.textualize.io/) `pip install textual`
- [PyInstaller](https://pyinstaller.org/) `pip install pyinstaller`
- Windows 10/11 (the application uses Windowsspecific APIs)
### Steps
1. Clone the repository:
```bash
git clone https://github.com/yourusername/Uplink-Manager.git
cd Uplink-Manager
NAT and DNS Provisioning for Win 11 VM with Vspher/ESXi
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -4,7 +4,7 @@
<Package InstallerVersion="500" Compressed="yes" InstallScope="perMachine" Platform="x64" />
<MajorUpgrade DowngradeErrorMessage="A newer version of Uplink Manager is already installed." />
<MediaTemplate EmbedCab="yes" />
<MediaTemplate />
<Icon Id="UplinkManagerIcon" SourceFile="uplink_manager.ico" />
<Property Id="ARPPRODUCTICON" Value="UplinkManagerIcon" />
@@ -28,7 +28,7 @@
</DirectoryRef>
<DirectoryRef Id="ProgramMenuSubfolder">
<Component Id="cmpStartMenuShortcut" Guid="f73ad4c2-1e9a-40e3-b4f7-f41e518daf91">
<Component Id="cmpStartMenuShortcut" Guid="f73ad4c2-1e9a-40e3-b4f7-f41e518daf91"> <!-- Replace with a real GUID -->
<Shortcut Id="StartMenuShortcut"
Name="Uplink Manager"
Target="[INSTALLFOLDER]Uplink Manager.exe"
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,175 @@
This file lists modules PyInstaller was not able to find. This does not
necessarily mean these modules are required for running your program. Both
Python's standard library and 3rd-party Python packages often conditionally
import optional modules, some of which may be available only on certain
platforms.
Types of import:
* top-level: imported at the top-level - look at these first
* conditional: imported within an if-statement
* delayed: imported within a function
* optional: imported within a try-except-statement
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
tracking down the missing module yourself. Thanks!
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level)
missing module named 'collections.abc' - imported by traceback (top-level), typing (top-level), inspect (top-level), logging (top-level), importlib.resources.readers (top-level), selectors (top-level), tracemalloc (top-level), IPython.core.interactiveshell (top-level), IPython.external.pickleshare (optional), typing_extensions (top-level), asyncio.base_events (top-level), http.client (top-level), asyncio.coroutines (top-level), configparser (top-level), IPython.lib.display (top-level), IPython.utils.data (top-level), IPython.utils._process_common (top-level), IPython.utils.decorators (top-level), IPython.utils.openpy (top-level), IPython.utils.text (top-level), IPython.utils.tokenutil (top-level), IPython.core.ultratb (top-level), IPython.core.doctb (top-level), IPython.core.tbtools (top-level), wcwidth.grapheme (conditional), wcwidth.wcwidth (conditional), IPython.core.completer (top-level), IPython.core.guarded_eval (top-level), parso.python.tree (top-level), IPython.terminal.shortcuts (top-level), IPython.terminal.shortcuts.auto_suggest (top-level), IPython.terminal.shortcuts.filters (top-level), IPython.core.history (top-level), sqlite3.dbapi2 (top-level), IPython.terminal.pt_inputhooks (top-level), _pyrepl.types (top-level), _pyrepl.readline (top-level), tornado.gen (top-level), jupyter_core.utils (top-level), jupyter_client.jsonutil (top-level), jupyter_core.paths (top-level), platformdirs.api (conditional), platformdirs.windows (conditional), platformdirs.macos (conditional), platformdirs.unix (conditional), jupyter_client.localinterfaces (top-level), jupyter_client.utils (top-level), ipykernel.iostream (top-level), ipykernel.kernelbase (top-level), ipykernel.utils (top-level), setuptools (top-level), setuptools._distutils.filelist (top-level), setuptools._distutils.util (top-level), setuptools._vendor.jaraco.functools (top-level), setuptools._vendor.more_itertools.more (top-level), setuptools._distutils._modified (top-level), setuptools._distutils.compat (top-level), setuptools._distutils.spawn (top-level), setuptools._distutils.compilers.C.base (top-level), setuptools._distutils.fancy_getopt (top-level), setuptools._reqs (top-level), setuptools._vendor.jaraco.context (top-level), setuptools.discovery (top-level), setuptools.dist (top-level), setuptools._distutils.command.bdist (top-level), setuptools._distutils.core (top-level), setuptools._distutils.cmd (top-level), setuptools._distutils.dist (top-level), setuptools._distutils.extension (top-level), setuptools.config.setupcfg (top-level), setuptools.config.expand (top-level), setuptools.config.pyprojecttoml (top-level), setuptools.config._apply_pyprojecttoml (top-level), setuptools.extension (top-level), tomllib._parser (top-level), setuptools._vendor.tomli._parser (conditional), setuptools.wheel (top-level), setuptools.command.egg_info (top-level), setuptools.command.bdist_egg (top-level), setuptools.command.sdist (top-level), setuptools._distutils.command.build (top-level), setuptools._distutils.command.sdist (top-level), setuptools.glob (top-level), setuptools.command._requirestxt (top-level), setuptools.command.bdist_wheel (top-level), setuptools._vendor.importlib_metadata (top-level), setuptools._vendor.importlib_metadata._meta (top-level), markdown_it.main (top-level), markdown_it.ruler (top-level), markdown_it.utils (top-level), markdown_it.token (top-level), markdown_it.common.normalize_url (top-level), mdurl._decode (top-level), mdurl._encode (top-level), markdown_it._punycode (top-level), markdown_it.parser_block (top-level), markdown_it.parser_core (top-level), markdown_it.parser_inline (top-level), markdown_it.renderer (top-level), rich.scope (top-level), setuptools._distutils.command.build_ext (top-level), setuptools._distutils.compilers.C.msvc (top-level)
missing module named posix - imported by os (conditional, optional), posixpath (optional), shutil (conditional), importlib._bootstrap_external (conditional), _pyrepl.unix_console (delayed, optional)
missing module named resource - imported by posix (top-level), IPython.utils.timing (optional)
missing module named pwd - imported by posixpath (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib._local (optional), subprocess (delayed, conditional, optional), getpass (delayed, optional), netrc (delayed, optional), http.server (delayed, optional), psutil (optional), setuptools._distutils.util (delayed, conditional, optional), setuptools._vendor.backports.tarfile (optional), setuptools._distutils.archive_util (optional)
missing module named grp - imported by shutil (delayed, optional), tarfile (optional), pathlib._local (optional), subprocess (delayed, conditional, optional), setuptools._vendor.backports.tarfile (optional), setuptools._distutils.archive_util (optional)
missing module named _posixshmem - imported by multiprocessing.resource_tracker (conditional), multiprocessing.shared_memory (conditional)
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named _posixsubprocess - imported by subprocess (conditional), multiprocessing.util (delayed)
missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
missing module named _scproxy - imported by urllib.request (conditional)
missing module named termios - imported by getpass (optional), tty (top-level), IPython.core.page (delayed, optional), _pyrepl.pager (delayed, optional), prompt_toolkit.input.vt100 (top-level), _pyrepl.unix_console (top-level), _pyrepl.fancy_termios (top-level), _pyrepl.unix_eventqueue (top-level), textual.drivers.linux_driver (top-level), textual.drivers.linux_inline_driver (top-level)
missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.Process - imported by multiprocessing (top-level), jupyter_client.ssh.tunnel (top-level)
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
missing module named annotationlib - imported by typing_extensions (conditional), IPython.lib.pretty (conditional)
missing module named _typeshed - imported by prompt_toolkit.eventloop.inputhook (conditional), setuptools._distutils.dist (conditional), setuptools.command.bdist_egg (conditional), setuptools.glob (conditional), setuptools._vendor.wheel.wheelfile (conditional), setuptools.compat.py311 (conditional), textual._node_list (conditional), textual.dom (conditional)
missing module named vms_lib - imported by platform (delayed, optional)
missing module named 'java.lang' - imported by platform (delayed, optional)
missing module named java - imported by platform (delayed)
missing module named usercustomize - imported by site (delayed, optional)
missing module named sitecustomize - imported by site (delayed, optional)
missing module named _curses - imported by curses (top-level), curses.has_key (top-level), _pyrepl.curses (optional)
missing module named fcntl - imported by subprocess (optional), pty (delayed, optional), _pyrepl.unix_console (top-level)
missing module named readline - imported by cmd (delayed, conditional, optional), code (delayed, conditional, optional), pdb (delayed, conditional, optional), rlcompleter (optional), pstats (conditional, optional), site (delayed, optional), sqlite3.__main__ (delayed, conditional, optional)
missing module named _manylinux - imported by packaging._manylinux (delayed, optional), setuptools._vendor.packaging._manylinux (delayed, optional)
missing module named importlib_resources - imported by setuptools._vendor.jaraco.text (optional)
missing module named trove_classifiers - imported by setuptools.config._validate_pyproject.formats (optional)
missing module named pyimod02_importers - imported by C:\Users\Admin\AppData\Local\Programs\Python\Python313\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgutil.py (delayed)
missing module named sip - imported by IPython.external.qt_loaders (delayed, optional)
missing module named argcomplete - imported by traitlets.config.loader (delayed, optional), traitlets.config.argcomplete_config (optional), IPython.core.tips (optional)
missing module named traitlets.config.Application - imported by traitlets.config (delayed, conditional), traitlets.log (delayed, conditional), ipykernel.kernelspec (top-level)
missing module named pygments.formatters.LatexFormatter - imported by pygments.formatters (delayed), IPython.lib.display (delayed)
missing module named pygments.formatters.HtmlFormatter - imported by pygments.formatters (delayed), IPython.lib.display (delayed), IPython.core.oinspect (top-level), stack_data.core (delayed)
missing module named pygments.lexers.PrologLexer - imported by pygments.lexers (top-level), pygments.lexers.cplint (top-level)
missing module named pygments.lexers.PythonLexer - imported by pygments.lexers (top-level), IPython.core.oinspect (top-level)
missing module named _winreg - imported by pygments.formatters.img (optional)
missing module named PIL - imported by matplotlib_inline.config (delayed, optional), pygments.formatters.img (optional)
missing module named ctags - imported by pygments.formatters.html (optional)
missing module named chardet - imported by pygments.lexer (delayed, conditional, optional)
missing module named pexpect - imported by IPython.utils._process_posix (delayed, conditional), jupyter_client.ssh.tunnel (optional)
missing module named System - imported by IPython.utils._process_cli (top-level)
missing module named clr - imported by IPython.utils._process_cli (top-level)
missing module named 'yapf.yapflib' - imported by IPython.terminal.interactiveshell (delayed)
missing module named yapf - imported by IPython.terminal.interactiveshell (delayed)
missing module named black - imported by IPython.terminal.interactiveshell (delayed)
missing module named jupyter_ai - imported by IPython.terminal.shortcuts.auto_suggest (delayed, optional)
missing module named jupyter_ai_magics - imported by IPython.terminal.shortcuts.auto_suggest (delayed, optional)
missing module named prompt_toolkit.filters.vi_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.document (top-level), prompt_toolkit.widgets.toolbars (top-level), prompt_toolkit.key_binding.bindings.page_navigation (top-level), IPython.terminal.shortcuts.filters (top-level)
missing module named prompt_toolkit.filters.control_is_searchable - imported by prompt_toolkit.filters (top-level), prompt_toolkit.key_binding.bindings.search (top-level)
missing module named prompt_toolkit.filters.vi_insert_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.layout.containers (top-level), prompt_toolkit.key_binding.bindings.basic (top-level), IPython.terminal.shortcuts.filters (top-level)
missing module named prompt_toolkit.filters.emacs_insert_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.layout.containers (top-level), prompt_toolkit.key_binding.bindings.basic (top-level), prompt_toolkit.key_binding.bindings.emacs (top-level), IPython.terminal.shortcuts.filters (top-level)
missing module named prompt_toolkit.filters.is_done - imported by prompt_toolkit.filters (top-level), prompt_toolkit.shortcuts.choice_input (top-level), prompt_toolkit.widgets.base (top-level), prompt_toolkit.shortcuts.progress_bar.base (top-level), prompt_toolkit.shortcuts.prompt (top-level), prompt_toolkit.layout.menus (top-level)
missing module named prompt_toolkit.filters.has_completions - imported by prompt_toolkit.filters (top-level), prompt_toolkit.widgets.toolbars (top-level), prompt_toolkit.widgets.dialogs (top-level), prompt_toolkit.layout.menus (top-level), IPython.terminal.shortcuts.filters (top-level)
missing module named prompt_toolkit.filters.is_searching - imported by prompt_toolkit.filters (top-level), prompt_toolkit.key_binding.bindings.vi (top-level), prompt_toolkit.search (top-level), prompt_toolkit.key_binding.bindings.search (top-level)
missing module named prompt_toolkit.filters.is_read_only - imported by prompt_toolkit.filters (top-level), prompt_toolkit.key_binding.bindings.vi (top-level), prompt_toolkit.key_binding.bindings.emacs (top-level)
missing module named prompt_toolkit.filters.has_arg - imported by prompt_toolkit.filters (top-level), prompt_toolkit.key_binding.bindings.vi (top-level), prompt_toolkit.widgets.toolbars (top-level), prompt_toolkit.key_binding.bindings.emacs (top-level), prompt_toolkit.shortcuts.prompt (top-level)
missing module named prompt_toolkit.filters.vi_search_direction_reversed - imported by prompt_toolkit.filters (top-level), prompt_toolkit.key_binding.bindings.emacs (top-level)
missing module named prompt_toolkit.filters.shift_selection_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.key_binding.bindings.emacs (top-level)
missing module named prompt_toolkit.filters.is_multiline - imported by prompt_toolkit.filters (top-level), prompt_toolkit.key_binding.bindings.basic (top-level), prompt_toolkit.key_binding.bindings.emacs (top-level)
missing module named prompt_toolkit.filters.in_paste_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.key_binding.bindings.basic (top-level), prompt_toolkit.key_binding.bindings.emacs (top-level)
missing module named prompt_toolkit.filters.has_selection - imported by prompt_toolkit.filters (top-level), prompt_toolkit.key_binding.bindings.basic (top-level), prompt_toolkit.key_binding.bindings.emacs (top-level), prompt_toolkit.key_binding.bindings.open_in_editor (top-level), IPython.terminal.shortcuts.filters (top-level)
missing module named prompt_toolkit.filters.emacs_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.widgets.toolbars (top-level), prompt_toolkit.key_binding.bindings.emacs (top-level), prompt_toolkit.key_binding.bindings.auto_suggest (top-level), prompt_toolkit.key_binding.bindings.open_in_editor (top-level), prompt_toolkit.key_binding.bindings.page_navigation (top-level)
missing module named prompt_toolkit.filters.buffer_has_focus - imported by prompt_toolkit.filters (top-level), prompt_toolkit.key_binding.defaults (top-level), prompt_toolkit.key_binding.bindings.page_navigation (top-level)
missing module named prompt_toolkit.filters.vi_navigation_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.widgets.toolbars (top-level), prompt_toolkit.key_binding.bindings.open_in_editor (top-level)
missing module named prompt_toolkit.filters.has_validation_error - imported by prompt_toolkit.filters (top-level), prompt_toolkit.widgets.toolbars (top-level)
missing module named prompt_toolkit.filters.renderer_height_is_known - imported by prompt_toolkit.filters (top-level), prompt_toolkit.shortcuts.choice_input (top-level), prompt_toolkit.shortcuts.progress_bar.base (top-level), prompt_toolkit.shortcuts.prompt (top-level)
missing module named prompt_toolkit.filters.has_focus - imported by prompt_toolkit.filters (top-level), prompt_toolkit.widgets.base (top-level), prompt_toolkit.widgets.toolbars (top-level), prompt_toolkit.widgets.dialogs (top-level), prompt_toolkit.shortcuts.prompt (top-level), IPython.terminal.shortcuts.filters (top-level)
missing module named win32clipboard - imported by IPython.lib.clipboard (delayed, optional)
missing module named prompt_toolkit.filters.vi_insert_multiple_mode - imported by prompt_toolkit.filters (top-level), prompt_toolkit.layout.processors (top-level)
missing module named trio - imported by IPython.core.async_helpers (delayed), ipykernel.trio_runner (top-level)
missing module named curio - imported by IPython.core.async_helpers (delayed)
missing module named numpy - imported by IPython.lib.display (delayed), IPython.core.formatters (delayed, conditional), IPython.core.magics.namespace (delayed, conditional, optional)
missing module named 'nbformat.sign' - imported by IPython.core.magics.basic (delayed)
missing module named nbformat - imported by IPython.core.magics.basic (delayed), IPython.core.interactiveshell (delayed, conditional)
missing module named sqlite3.OperationalError - imported by sqlite3 (optional), IPython.core.history (optional)
missing module named sqlite3.DatabaseError - imported by sqlite3 (optional), IPython.core.history (optional)
missing module named 'IPython.config' - imported by IPython.core.history (conditional)
missing module named pytest - imported by executing._pytest_utils (delayed, optional)
missing module named 'astroid.node_classes' - imported by asttokens.astroid_compat (optional)
missing module named 'astroid.nodes' - imported by asttokens.astroid_compat (optional), asttokens.util (optional)
missing module named astroid - imported by asttokens.astroid_compat (optional)
missing module named numpydoc - imported by jedi.inference.docstrings (delayed)
missing module named pkg_resources - imported by jedi.plugins.pytest (delayed, conditional)
missing module named win32evtlog - imported by logging.handlers (delayed, optional)
missing module named win32evtlogutil - imported by logging.handlers (delayed, optional)
missing module named netifaces - imported by jupyter_client.localinterfaces (delayed)
missing module named msgpack - imported by jupyter_client.session (optional)
missing module named orjson - imported by jupyter_client.session (optional)
missing module named six.moves.range - imported by six.moves (top-level), dateutil.rrule (top-level)
runtime module named six.moves - imported by dateutil.tz.tz (top-level), dateutil.tz._factories (top-level), dateutil.tz.win (top-level), dateutil.rrule (top-level)
missing module named StringIO - imported by six (conditional)
missing module named dateutil.tz.tzfile - imported by dateutil.tz (top-level), dateutil.zoneinfo (top-level)
missing module named 'cython.cimports' - imported by zmq.backend.cython._zmq (top-level)
missing module named cython - imported by zmq.backend.cython._zmq (top-level)
missing module named gevent - imported by zmq.green.core (top-level), zmq.green.poll (top-level)
missing module named 'gevent.core' - imported by zmq.green.core (delayed, optional)
missing module named 'gevent.hub' - imported by zmq.green.core (top-level)
missing module named 'gevent.event' - imported by zmq.green.core (top-level)
missing module named zmq.backend.zmq_version_info - imported by zmq.backend (top-level), zmq.sugar.version (top-level)
missing module named zmq.backend.Frame - imported by zmq.backend (top-level), zmq.sugar.frame (top-level), zmq.sugar.tracker (top-level)
missing module named cffi - imported by zmq.utils.interop (delayed, optional)
missing module named zmq.backend.Socket - imported by zmq.backend (top-level), zmq.sugar.socket (top-level)
missing module named zmq.backend.zmq_poll - imported by zmq.backend (top-level), zmq.sugar.poll (top-level)
missing module named pyczmq - imported by zmq.sugar.context (delayed)
missing module named zmq.backend.Context - imported by zmq.backend (top-level), zmq.sugar.context (top-level)
missing module named zmq.backend.proxy - imported by zmq.backend (top-level), zmq.sugar (top-level)
missing module named zmq.ZMQError - imported by zmq (delayed, optional), zmq.sugar.attrsettr (delayed, optional)
missing module named zmq.backend.zmq_errno - imported by zmq.backend (delayed), zmq.error (delayed, conditional)
missing module named zmq.backend.strerror - imported by zmq.backend (delayed), zmq.error (delayed)
missing module named zmq.zmq_version_info - imported by zmq (delayed, conditional), zmq.error (delayed, conditional)
missing module named zmq.zmq_version - imported by zmq (delayed, conditional), zmq.error (delayed, conditional)
missing module named _subprocess - imported by jupyter_client.launcher (delayed, conditional, optional), ipykernel.parentpoller (delayed, optional)
missing module named paramiko - imported by jupyter_client.ssh.tunnel (optional)
missing module named win32security - imported by jupyter_core.paths (delayed)
missing module named ntsecuritycon - imported by jupyter_core.paths (delayed)
missing module named win32api - imported by jupyter_core.paths (delayed, optional)
missing module named jnius - imported by platformdirs.android (delayed, conditional, optional)
missing module named android - imported by platformdirs.android (delayed, conditional, optional)
missing module named ipykernel.get_connection_info - imported by ipykernel (top-level), ipykernel.zmqshell (top-level)
missing module named ipykernel.get_connection_file - imported by ipykernel (top-level), ipykernel.zmqshell (top-level)
missing module named ipykernel.connect_qtconsole - imported by ipykernel (top-level), ipykernel.zmqshell (top-level)
missing module named PySide6 - imported by ipykernel.eventloops (delayed, conditional, optional)
missing module named PyQt6 - imported by ipykernel.eventloops (delayed, conditional, optional)
missing module named PySide2 - imported by ipykernel.eventloops (delayed, conditional, optional)
missing module named PyQt5 - imported by ipykernel.eventloops (delayed, conditional, optional)
missing module named 'gi.repository' - imported by ipykernel.gui.gtk3embed (top-level)
missing module named gi - imported by ipykernel.gui.gtk3embed (top-level)
missing module named gtk - imported by ipykernel.gui.gtkembed (top-level)
missing module named gobject - imported by ipykernel.gui.gtkembed (top-level)
missing module named wx - imported by ipykernel.eventloops (delayed), IPython.lib.guisupport (delayed)
missing module named ipykernel.serialize - imported by ipykernel.ipkernel (delayed, optional)
missing module named ipyparallel - imported by ipykernel.ipkernel (delayed, optional)
missing module named appnope - imported by ipykernel.ipkernel (delayed, conditional)
missing module named '_pydevd_bundle.pydevd_api' - imported by ipykernel.debugger (delayed)
missing module named '_pydevd_bundle.pydevd_suspended_frames' - imported by ipykernel.debugger (optional)
missing module named _pydevd_bundle - imported by debugpy._vendored.force_pydevd (top-level), debugpy.server.cli (top-level), ipykernel.debugger (optional)
missing module named pydevd_file_utils - imported by debugpy.server.api (top-level)
missing module named '_pydevd_bundle.pydevd_constants' - imported by debugpy.server.api (top-level)
missing module named add_code_to_python_process - imported by debugpy.server.cli (delayed, optional)
missing module named pydevd - imported by debugpy._vendored.force_pydevd (top-level), debugpy.server.api (top-level), debugpy.server.cli (top-level)
missing module named 'matplotlib.figure' - imported by matplotlib_inline.backend_inline (top-level)
missing module named 'matplotlib.backends' - imported by matplotlib_inline.backend_inline (top-level)
missing module named 'matplotlib._pylab_helpers' - imported by matplotlib_inline.backend_inline (top-level)
missing module named matplotlib - imported by matplotlib_inline.backend_inline (top-level)
missing module named docrepr - imported by IPython.core.interactiveshell (optional)
missing module named cPickle - imported by IPython.external.pickleshare (optional)
missing module named ipywidgets - imported by rich.live (delayed, conditional, optional)
missing module named attr - imported by rich.pretty (optional)
missing module named tree_sitter - imported by textual._tree_sitter (optional), textual.document._document (conditional), textual.document._syntax_aware_document (optional), textual.widgets._text_area (conditional)
missing module named textual_speedups - imported by textual.geometry (conditional, optional)
missing module named httpx - imported by textual.demo.home (optional)
missing module named 'textual_dev.redirect_output' - imported by textual.app (delayed, conditional, optional)
missing module named 'textual_dev.client' - imported by textual.app (delayed, conditional, optional)
missing module named textual_dev - imported by textual.app (conditional)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+163
View File
@@ -0,0 +1,163 @@
('C:\\Uplink Manager\\dist\\Uplink Manager.exe',
True,
False,
False,
['C:\\Uplink Manager\\uplink_manager.ico'],
None,
True,
False,
b'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<assembly xmlns='
b'"urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">\n <trustInfo x'
b'mlns="urn:schemas-microsoft-com:asm.v3">\n <security>\n <requested'
b'Privileges>\n <requestedExecutionLevel level="requireAdministrator'
b'" uiAccess="false"/>\n </requestedPrivileges>\n </security>\n </tr'
b'ustInfo>\n <compatibility xmlns="urn:schemas-microsoft-com:compatibility'
b'.v1">\n <application>\n <supportedOS Id="{e2011457-1546-43c5-a5fe-'
b'008deee3d3f0}"/>\n <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a244022'
b'5f93a}"/>\n <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"'
b'/>\n <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>\n '
b' <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>\n </appli'
b'cation>\n </compatibility>\n <application xmlns="urn:schemas-microsoft-c'
b'om:asm.v3">\n <windowsSettings>\n <longPathAware xmlns="http://sch'
b'emas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>\n </'
b'windowsSettings>\n </application>\n <dependency>\n <dependentAssembly>'
b'\n <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Con'
b'trols" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b6414'
b'4ccf1df" language="*"/>\n </dependentAssembly>\n </dependency>\n</assem'
b'bly>',
True,
False,
None,
None,
None,
'C:\\Uplink Manager\\build\\uplink_manager\\Uplink Manager.pkg',
[('pyi-contents-directory _internal', '', 'OPTION'),
('PYZ-00.pyz',
'C:\\Uplink Manager\\build\\uplink_manager\\PYZ-00.pyz',
'PYZ'),
('struct',
'C:\\Uplink Manager\\build\\uplink_manager\\localpycs\\struct.pyc',
'PYMODULE'),
('pyimod01_archive',
'C:\\Uplink Manager\\build\\uplink_manager\\localpycs\\pyimod01_archive.pyc',
'PYMODULE'),
('pyimod02_importers',
'C:\\Uplink '
'Manager\\build\\uplink_manager\\localpycs\\pyimod02_importers.pyc',
'PYMODULE'),
('pyimod03_ctypes',
'C:\\Uplink Manager\\build\\uplink_manager\\localpycs\\pyimod03_ctypes.pyc',
'PYMODULE'),
('pyimod04_pywin32',
'C:\\Uplink Manager\\build\\uplink_manager\\localpycs\\pyimod04_pywin32.pyc',
'PYMODULE'),
('pyiboot01_bootstrap',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py',
'PYSOURCE'),
('pyi_rth_inspect',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_inspect.py',
'PYSOURCE'),
('pyi_rth_pkgutil',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_pkgutil.py',
'PYSOURCE'),
('pyi_rth_multiprocessing',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_multiprocessing.py',
'PYSOURCE'),
('uplink_manager', 'C:\\Uplink Manager\\uplink_manager.py', 'PYSOURCE'),
('python313.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\python313.dll',
'BINARY'),
('_multiprocessing.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_multiprocessing.pyd',
'EXTENSION'),
('pyexpat.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\pyexpat.pyd',
'EXTENSION'),
('_ssl.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_ssl.pyd',
'EXTENSION'),
('_hashlib.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_hashlib.pyd',
'EXTENSION'),
('unicodedata.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\unicodedata.pyd',
'EXTENSION'),
('_decimal.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_decimal.pyd',
'EXTENSION'),
('_socket.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_socket.pyd',
'EXTENSION'),
('select.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\select.pyd',
'EXTENSION'),
('_lzma.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_lzma.pyd',
'EXTENSION'),
('_bz2.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_bz2.pyd',
'EXTENSION'),
('_queue.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_queue.pyd',
'EXTENSION'),
('_ctypes.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_ctypes.pyd',
'EXTENSION'),
('_wmi.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_wmi.pyd',
'EXTENSION'),
('_uuid.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_uuid.pyd',
'EXTENSION'),
('_overlapped.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_overlapped.pyd',
'EXTENSION'),
('_asyncio.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_asyncio.pyd',
'EXTENSION'),
('VCRUNTIME140.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\VCRUNTIME140.dll',
'BINARY'),
('libcrypto-3.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libcrypto-3.dll',
'BINARY'),
('libssl-3.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libssl-3.dll',
'BINARY'),
('libffi-8.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libffi-8.dll',
'BINARY'),
('VCRUNTIME140_1.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\VCRUNTIME140_1.dll',
'BINARY'),
('run_uplink.cmd', 'C:\\Uplink Manager\\run_uplink.cmd', 'DATA'),
('run_uplink.ps1', 'C:\\Uplink Manager\\run_uplink.ps1', 'DATA'),
('textual-8.1.1.dist-info\\licenses\\LICENSE',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\licenses\\LICENSE',
'DATA'),
('textual-8.1.1.dist-info\\RECORD',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\RECORD',
'DATA'),
('textual-8.1.1.dist-info\\METADATA',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\METADATA',
'DATA'),
('textual-8.1.1.dist-info\\WHEEL',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\WHEEL',
'DATA'),
('textual-8.1.1.dist-info\\INSTALLER',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\INSTALLER',
'DATA'),
('textual-8.1.1.dist-info\\REQUESTED',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\REQUESTED',
'DATA'),
('base_library.zip',
'C:\\Uplink Manager\\build\\uplink_manager\\base_library.zip',
'DATA')],
[],
False,
False,
1774455296,
[('run.exe',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\bootloader\\Windows-64bit-intel\\run.exe',
'EXECUTABLE')],
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\python313.dll')
+140
View File
@@ -0,0 +1,140 @@
('C:\\Uplink Manager\\build\\uplink_manager\\Uplink Manager.pkg',
{'BINARY': True,
'DATA': True,
'EXECUTABLE': True,
'EXTENSION': True,
'PYMODULE': True,
'PYSOURCE': True,
'PYZ': False,
'SPLASH': True,
'SYMLINK': False},
[('pyi-contents-directory _internal', '', 'OPTION'),
('PYZ-00.pyz',
'C:\\Uplink Manager\\build\\uplink_manager\\PYZ-00.pyz',
'PYZ'),
('struct',
'C:\\Uplink Manager\\build\\uplink_manager\\localpycs\\struct.pyc',
'PYMODULE'),
('pyimod01_archive',
'C:\\Uplink Manager\\build\\uplink_manager\\localpycs\\pyimod01_archive.pyc',
'PYMODULE'),
('pyimod02_importers',
'C:\\Uplink '
'Manager\\build\\uplink_manager\\localpycs\\pyimod02_importers.pyc',
'PYMODULE'),
('pyimod03_ctypes',
'C:\\Uplink Manager\\build\\uplink_manager\\localpycs\\pyimod03_ctypes.pyc',
'PYMODULE'),
('pyimod04_pywin32',
'C:\\Uplink Manager\\build\\uplink_manager\\localpycs\\pyimod04_pywin32.pyc',
'PYMODULE'),
('pyiboot01_bootstrap',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py',
'PYSOURCE'),
('pyi_rth_inspect',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_inspect.py',
'PYSOURCE'),
('pyi_rth_pkgutil',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_pkgutil.py',
'PYSOURCE'),
('pyi_rth_multiprocessing',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_multiprocessing.py',
'PYSOURCE'),
('uplink_manager', 'C:\\Uplink Manager\\uplink_manager.py', 'PYSOURCE'),
('python313.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\python313.dll',
'BINARY'),
('_multiprocessing.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_multiprocessing.pyd',
'EXTENSION'),
('pyexpat.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\pyexpat.pyd',
'EXTENSION'),
('_ssl.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_ssl.pyd',
'EXTENSION'),
('_hashlib.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_hashlib.pyd',
'EXTENSION'),
('unicodedata.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\unicodedata.pyd',
'EXTENSION'),
('_decimal.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_decimal.pyd',
'EXTENSION'),
('_socket.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_socket.pyd',
'EXTENSION'),
('select.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\select.pyd',
'EXTENSION'),
('_lzma.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_lzma.pyd',
'EXTENSION'),
('_bz2.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_bz2.pyd',
'EXTENSION'),
('_queue.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_queue.pyd',
'EXTENSION'),
('_ctypes.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_ctypes.pyd',
'EXTENSION'),
('_wmi.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_wmi.pyd',
'EXTENSION'),
('_uuid.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_uuid.pyd',
'EXTENSION'),
('_overlapped.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_overlapped.pyd',
'EXTENSION'),
('_asyncio.pyd',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\_asyncio.pyd',
'EXTENSION'),
('VCRUNTIME140.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\VCRUNTIME140.dll',
'BINARY'),
('libcrypto-3.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libcrypto-3.dll',
'BINARY'),
('libssl-3.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libssl-3.dll',
'BINARY'),
('libffi-8.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\DLLs\\libffi-8.dll',
'BINARY'),
('VCRUNTIME140_1.dll',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\VCRUNTIME140_1.dll',
'BINARY'),
('run_uplink.cmd', 'C:\\Uplink Manager\\run_uplink.cmd', 'DATA'),
('run_uplink.ps1', 'C:\\Uplink Manager\\run_uplink.ps1', 'DATA'),
('textual-8.1.1.dist-info\\licenses\\LICENSE',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\licenses\\LICENSE',
'DATA'),
('textual-8.1.1.dist-info\\RECORD',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\RECORD',
'DATA'),
('textual-8.1.1.dist-info\\METADATA',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\METADATA',
'DATA'),
('textual-8.1.1.dist-info\\WHEEL',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\WHEEL',
'DATA'),
('textual-8.1.1.dist-info\\INSTALLER',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\INSTALLER',
'DATA'),
('textual-8.1.1.dist-info\\REQUESTED',
'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages\\textual-8.1.1.dist-info\\REQUESTED',
'DATA'),
('base_library.zip',
'C:\\Uplink Manager\\build\\uplink_manager\\base_library.zip',
'DATA')],
'python313.dll',
False,
False,
False,
[],
None,
None,
None)
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,58 @@
This file lists modules PyInstaller was not able to find. This does not
necessarily mean these modules are required for running your program. Both
Python's standard library and 3rd-party Python packages often conditionally
import optional modules, some of which may be available only on certain
platforms.
Types of import:
* top-level: imported at the top-level - look at these first
* conditional: imported within an if-statement
* delayed: imported within a function
* optional: imported within a try-except-statement
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
tracking down the missing module yourself. Thanks!
missing module named _posixshmem - imported by multiprocessing.resource_tracker (conditional), multiprocessing.shared_memory (conditional)
missing module named _scproxy - imported by urllib.request (conditional)
missing module named termios - imported by getpass (optional), tty (top-level), _pyrepl.pager (delayed, optional), textual.drivers.linux_driver (top-level), textual.drivers.linux_inline_driver (top-level)
missing module named pwd - imported by posixpath (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib._local (optional), subprocess (delayed, conditional, optional), getpass (delayed, optional), http.server (delayed, optional), netrc (delayed, optional)
missing module named 'collections.abc' - imported by traceback (top-level), typing (top-level), inspect (top-level), logging (top-level), importlib.resources.readers (top-level), selectors (top-level), tracemalloc (top-level), configparser (top-level), markdown_it.main (top-level), markdown_it.ruler (top-level), markdown_it.utils (top-level), typing_extensions (top-level), asyncio.base_events (top-level), http.client (top-level), asyncio.coroutines (top-level), markdown_it.token (top-level), markdown_it.common.normalize_url (top-level), mdurl._decode (top-level), mdurl._encode (top-level), markdown_it._punycode (top-level), markdown_it.parser_block (top-level), markdown_it.parser_core (top-level), markdown_it.parser_inline (top-level), markdown_it.renderer (top-level), rich.scope (top-level), platformdirs.api (conditional), platformdirs.windows (conditional), platformdirs.macos (conditional), platformdirs.unix (conditional)
missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named _posixsubprocess - imported by subprocess (conditional), multiprocessing.util (delayed)
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level)
missing module named grp - imported by shutil (delayed, optional), tarfile (optional), pathlib._local (optional), subprocess (delayed, conditional, optional)
missing module named posix - imported by os (conditional, optional), posixpath (optional), shutil (conditional), importlib._bootstrap_external (conditional)
missing module named resource - imported by posix (top-level)
missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named pyimod02_importers - imported by C:\Users\Admin\AppData\Local\Programs\Python\Python313\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgutil.py (delayed)
missing module named IPython - imported by rich.jupyter (delayed, optional)
missing module named 'IPython.core' - imported by rich.pretty (delayed, optional)
missing module named attr - imported by rich.pretty (optional)
missing module named pygments.lexers.PrologLexer - imported by pygments.lexers (top-level), pygments.lexers.cplint (top-level)
missing module named _winreg - imported by pygments.formatters.img (optional)
missing module named PIL - imported by pygments.formatters.img (optional)
missing module named ctags - imported by pygments.formatters.html (optional)
missing module named chardet - imported by pygments.lexer (delayed, conditional, optional)
missing module named vms_lib - imported by platform (delayed, optional)
missing module named 'java.lang' - imported by platform (delayed, optional)
missing module named java - imported by platform (delayed)
missing module named textual_speedups - imported by textual.geometry (conditional, optional)
missing module named _typeshed - imported by textual._node_list (conditional), textual.dom (conditional)
missing module named annotationlib - imported by typing_extensions (conditional)
missing module named fcntl - imported by subprocess (optional), pty (delayed, optional)
missing module named ipywidgets - imported by rich.live (delayed, conditional, optional)
missing module named 'IPython.display' - imported by rich.live (delayed, conditional, optional)
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
missing module named tree_sitter - imported by textual._tree_sitter (optional), textual.document._document (conditional), textual.document._syntax_aware_document (optional), textual.widgets._text_area (conditional)
missing module named 'textual_dev.redirect_output' - imported by textual.app (delayed, conditional, optional)
missing module named 'textual_dev.client' - imported by textual.app (delayed, conditional, optional)
missing module named textual_dev - imported by textual.app (conditional)
missing module named jnius - imported by platformdirs.android (delayed, conditional, optional)
missing module named android - imported by platformdirs.android (delayed, conditional, optional)
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+10
View File
@@ -0,0 +1,10 @@
{
"test": {
"gateway": "10.10.1.1",
"subnet": "10.10.1.0/24",
"uplink": "NAT Uplink",
"dns_primary": "",
"dns_secondary": "",
"last_applied": "13:02:35"
}
}
+10 -25
View File
@@ -15,7 +15,6 @@
# ──────────────────────────────────────────────────────────────────────────────
# Uplink Manager © 2026
# Author : Sam Jage
# Version : 1.3.3.7
# ──────────────────────────────────────────────────────────────────────────────
# Purpose : Configures WinNAT on NAT Uplink per site deployment
# Platform : Windows 11 Pro
@@ -161,19 +160,6 @@ def get_uplink_ip() -> str:
return ""
return ip
def get_dns_ips() -> tuple[str, str]:
"""Return (primary, secondary) DNS IPs assigned as /32 on NAT Uplink."""
ok, out = run_ps(
f"Get-NetIPAddress -InterfaceAlias '{UPLINK_ADAPTER}' -PrefixLength 32 "
f"-AddressFamily IPv4 -ErrorAction SilentlyContinue | "
f"Select-Object -ExpandProperty IPAddress"
)
if ok and out:
ips = [ip.strip() for ip in out.splitlines() if ip.strip()]
return (ips[0] if len(ips) > 0 else "", ips[1] if len(ips) > 1 else "")
return "", ""
# ── Validation ────────────────────────────────────────────────────────────────
@@ -677,7 +663,7 @@ class UplinkManagerApp(App):
.stat-box:last-of-type { margin-right: 0; }
#stat-dns-label { margin-top: 1; color: transparent; }
#stat-dns-label.visible { color: $text-muted; text-style: bold; margin-top: 1; margin-bottom: 1; }
#stat-dns-label.visible { color: $text-muted; text-style: bold; }
.stat-dns-ip { color: transparent; text-style: bold; height: 1; }
.stat-dns-ip.visible { color: #fabd2f; }
@@ -854,8 +840,7 @@ class UplinkManagerApp(App):
else:
self._log("✔ Running as Administrator.")
self._log(
f"Dynamic adapter: {UPLINK_ADAPTER} — reconfigured per site deployment")
self._log(f"Dynamic adapter: {UPLINK_ADAPTER} — reconfigured per site deployment")
self._log("Hardcoded: Internet VLAN (WAN uplink) | NAT Uplink (dynamic)")
self._restore_last_build()
self.refresh_status()
@@ -871,8 +856,7 @@ class UplinkManagerApp(App):
def _restore_last_build(self):
builds = load_builds()
if not builds:
self._log(
"No previous builds found. Enter site details and hit Provision.")
self._log("No previous builds found. Enter site details and hit Provision.")
return
site, data = max(
builds.items(), key=lambda x: x[1].get("last_applied", ""))
@@ -897,8 +881,7 @@ class UplinkManagerApp(App):
self._update_dns_card("", "")
# ----------------------------
self._log(
f"Restored last build: '{site}' — verify and hit Provision to reapply.")
self._log(f"Restored last build: '{site}' — verify and hit Provision to reapply.")
def _start_auto_refresh(self):
if self._refresh_timer:
@@ -914,9 +897,7 @@ class UplinkManagerApp(App):
def refresh_status(self):
nats = get_active_nats()
uplink_ip = get_uplink_ip()
dns_primary, dns_secondary = get_dns_ips()
self.call_from_thread(self._update_status_widgets, nats, uplink_ip)
self.call_from_thread(self._update_dns_card, dns_primary, dns_secondary)
def _update_status_widgets(self, nats: list[dict], uplink_ip: str):
nat_lbl = self.query_one("#stat-nat", Label)
@@ -931,14 +912,16 @@ class UplinkManagerApp(App):
status_lbl.set_classes("configured")
else:
upip_lbl.update(uplink_ip if uplink_ip else " No Valid IP")
upip_lbl.set_classes("stat-value active" if uplink_ip else "stat-value warn")
upip_lbl.set_classes(
"stat-value active" if uplink_ip else "stat-value warn")
status_lbl.update("● Pending Configuration")
status_lbl.set_classes("")
if nats:
nat_lbl.update(nats[0].get("Name", ""))
nat_lbl.set_classes("stat-value active")
sub_lbl.update(nats[0].get("InternalIPInterfaceAddressPrefix", ""))
sub_lbl.update(nats[0].get(
"InternalIPInterfaceAddressPrefix", ""))
sub_lbl.set_classes("stat-value active")
else:
nat_lbl.update("None")
@@ -1227,6 +1210,8 @@ class UplinkManagerApp(App):
dns_fields.add_class("visible")
else:
dns_fields.remove_class("visible")
self.query_one("#inp-dns-primary", Input).value = ""
self.query_one("#inp-dns-secondary", Input).value = ""
@on(Input.Changed, "#inp-dns-primary")
def validate_dns_primary_live(self, event: Input.Changed):