Simplest dashboard for WireGuard VPN written in Python w/ Flask

Overview

Hi! I'm planning the next major update for this project, please let me know if you have any suggestions or feature requests ;) You can create an issue with the "Feature request" template. Cheers!

Help Wanted

If anyone know a better way to distribute releases of python application other than GitHub, please let me know in #103!

Please provide your OS name and version if you can run the dashboard on it perfectly in #31, since I only tested on Ubuntu. Thank you!


WGDashboard

WGDashboard

wakatime

Monitoring WireGuard is not convinient, need to login into server and type wg show. That's why this platform is being created, to view all configurations and manage them in a easier way.

Note: This project is not affiliate to the official WireGuard Project ;)

📣 What's New: v2.3


Table of Content

💡 Features

  • No need to re-configure existing WireGuard configuration! It can search for existed configuration files.
  • Easy to use interface, provided username and password protection to the dashboard
  • Add peers and edit (Allowed IPs, DNS, Private Key...)
  • View peers and configuration real time details (Data Usage, Latest Handshakes...)
  • Share your peer configuration with QR code or file download
  • Testing tool: Ping and Traceroute to your peer's ip
  • And more functions are coming up!

📝 Requirement

  • Recommend the following OS, tested by our beloved users:

    • Ubuntu 18.04.1 LTS - 20.04.1 LTS [@Me]
    • Debian GNU/Linux 10 (buster) [ ❤️ @robchez]
    • AlmaLinux 8.4 (Electric Cheetah) [ ❤️ @barry-smithjr]
    • CentOS 7 [ ❤️ @PrzemekSkw]

    If you have tested on other OS and it works perfectly please provide it to me in #31. Thank you!

  • WireGuard and WireGuard-Tools (wg-quick) are installed.

    Don't know how? Check this official documentation

  • Configuration files under /etc/wireguard, but please note the following sample

    [Interface]
    ...
    SaveConfig = true
    # Need to include this line to allow WireGuard Tool to save your configuration, 
    # or if you just want it to monitor your WireGuard Interface and don't need to
    # make any changes with the dashboard, you can set it to false.
    
    [Peer]
    PublicKey = abcd1234
    AllowedIPs = 1.2.3.4/32
    # Must have for each peer
  • Python 3.7+ & Pip3

🛠 Install

  1. Download WGDashboard

    git clone -b v2.3.1 https://github.com/donaldzou/WGDashboard.git wgdashboard
    
  2. Open the WGDashboard folder

    cd wgdashboard/src
  3. Install WGDashboard

    sudo chmod u+x wgd.sh
    sudo ./wgd.sh install
  4. Give read and execute permission to root of the WireGuard configuration folder, you can change the path if your configuration files are not stored in /etc/wireguard

    sudo chmod -R 755 /etc/wireguard
  5. Run WGDashboard

    ./wgd.sh start

    Note:

    For pivpn user, please use sudo ./wgd.sh start to run if your current account does not have the permission to run wg show and wg-quick.

  6. Access dashboard

    Access your server with port 10086 (e.g. http://your_server_ip:10086), using username admin and password admin. See below how to change port and ip that the dashboard is running with.

🪜 Usage

Start/Stop/Restart WGDashboard

cd wgdashboard/src
-----------------------------
./wgd.sh start    # Start the dashboard in background
-----------------------------
./wgd.sh debug    # Start the dashboard in foreground (debug mode)
-----------------------------
./wgd.sh stop     # Stop the dashboard
-----------------------------
./wgd.sh restart  # Restart the dasboard

Autostart WGDashboard on boot (>= v2.2)

In the src folder, it contained a file called wg-dashboard.service, we can use this file to let our system to autostart the dashboard after reboot. The following guide has tested on Ubuntu, most Debian based OS might be the same, but some might not. Please don't hesitate to provide your system if you have tested the autostart on another system.

  1. Changing the directory to the dashboard's directory

    cd wgdashboard/src
  2. Get the full path of the dashboard's directory

    pwd
    #Output: /root/wgdashboard/src

    For this example, the output is /root/wireguard-dashboard/src, your path might be different since it depends on where you downloaded the dashboard in the first place. Copy the the output to somewhere, we will need this in the next step.

  3. Edit the service file, the service file is located in wireguard-dashboard/src, you can use other editor you like, here will be using nano

    nano wg-dashboard.service

    You will see something like this:

    [Unit]
    After=network.service
    
    [Service]
    WorkingDirectory=
    
         ExecStart=/usr/bin/python3 
         
          /dashboard.py
    
          Restart=always
    
    
    
          [Install]
    
          WantedBy=default.target
         
        

    Now, we need to replace both to the one you just copied from step 2. After doing this, the file will become something like this, your file might be different:

    [Unit]
    After=netword.service
    
    [Service]
    WorkingDirectory=/root/wgdashboard/src
    ExecStart=/usr/bin/python3 /root/wgdashboard/src/dashboard.py
    Restart=always
    
    
    [Install]
    WantedBy=default.target

    Be aware that after the value of WorkingDirectory, it does not have a / (slash). And then save the file after you edited it

  4. Copy the service file to systemd folder

    $ cp wg-dashboard.service /etc/systemd/system/wg-dashboard.service

    To make sure you copy the file successfully, you can use this command cat /etc/systemd/system/wg-dashboard.service to see if it will output the file you just edited.

  5. Enable the service

    $ sudo chmod 664 /etc/systemd/system/wg-dashboard.service
    $ sudo systemctl daemon-reload
    $ sudo systemctl enable wg-dashboard.service
    $ sudo systemctl start wg-dashboard.service  # <-- To start the service
  6. Check if the service run correctly

    $ sudo systemctl status wg-dashboard.service

    And you should see something like this

    ● wg-dashboard.service
         Loaded: loaded (/etc/systemd/system/wg-dashboard.service; enabled; vendor preset: enabled)
         Active: active (running) since Tue 2021-08-03 22:31:26 UTC; 4s ago
       Main PID: 6602 (python3)
          Tasks: 1 (limit: 453)
         Memory: 26.1M
         CGroup: /system.slice/wg-dashboard.service
                 └─6602 /usr/bin/python3 /root/wgdashboard/src/dashboard.py
    
    Aug 03 22:31:26 ubuntu-wg systemd[1]: Started wg-dashboard.service.
    Aug 03 22:31:27 ubuntu-wg python3[6602]:  * Serving Flask app "WGDashboard" (lazy loading)
    Aug 03 22:31:27 ubuntu-wg python3[6602]:  * Environment: production
    Aug 03 22:31:27 ubuntu-wg python3[6602]:    WARNING: This is a development server. Do not use it in a production deployment.
    Aug 03 22:31:27 ubuntu-wg python3[6602]:    Use a production WSGI server instead.
    Aug 03 22:31:27 ubuntu-wg python3[6602]:  * Debug mode: off
    Aug 03 22:31:27 ubuntu-wg python3[6602]:  * Running on all addresses.
    Aug 03 22:31:27 ubuntu-wg python3[6602]:    WARNING: This is a development server. Do not use it in a production deployment.
    Aug 03 22:31:27 ubuntu-wg python3[6602]:  * Running on http://0.0.0.0:10086/ (Press CTRL+C to quit)

    If you see Active: followed by active (running) since... then it means it run correctly.

  7. Stop/Start/Restart the service

    sudo systemctl stop wg-dashboard.service      # <-- To stop the service
    sudo systemctl start wg-dashboard.service     # <-- To start the service
    sudo systemctl restart wg-dashboard.service   # <-- To restart the service
  8. And now you can reboot your system, and use the command at step 6 to see if it will auto start after the reboot, or just simply access the dashboard through your browser. If you have any questions or problem, please report it in the issue page.

✂️ Dashboard Configuration

Dashboard Configuration file

Since version 2.0, WGDashboard will be using a configuration file called wg-dashboard.ini, (It will generate automatically after first time running the dashboard). More options will include in future versions, and for now it included the following config:

Description Default Available in Setting
[Account]
username Dashboard login username admin Yes
password Password, will be hash with SHA256 admin hashed in SHA256 Yes
[Server]
wg_conf_path The path of all the Wireguard configurations /etc/wireguard Yes
app_ip IP address the dashboard will run with 0.0.0.0 Yes
app_port Port the the dashboard will run with 10086 Yes
auth_req Does the dashboard need authentication to access true No
If auth_req = false , user will not be access the Setting tab due to security consideration. User can only edit the file directly in system.
version Dashboard Version v2.2 No

Except auth_req due to security consideration.

Generating QR code and peer configuration file (.conf)

Starting version 2.2, dashboard can now generate QR code and configuration file for each peer. Here is a template of what each QR code encoded with and the same content will be inside the file:

[Interface]
PrivateKey = QWERTYUIOPO234567890YUSDAKFH10E1B12JE129U21=
Address = 0.0.0.0/32
DNS = 1.1.1.1

[Peer]
PublicKey = QWERTYUIOPO234567890YUSDAKFH10E1B12JE129U21=
AllowedIPs = 0.0.0.0/0
Endpoint = 0.0.0.0:51820
Description Default Value Available in Peer setting
[Interface]
PrivateKey The private key of this peer Private key generated by WireGuard (wg genkey) or provided by user Yes
Address The allowed_ips of your peer N/A Yes
DNS The DNS server your peer will use 1.1.1.1 - Cloud flare DNS, you can change it when you adding the peer or in the peer setting. Yes
[Peer]
PublicKey The public key of your server N/A No
AllowedIPs IP ranges for which a peer will route traffic 0.0.0.0/0 - Indicated a default route to send all internet and VPN traffic through that peer. Yes
Endpoint Your wireguard server ip and port, the dashboard will search for your server's default interface's ip. : Yes

How to update the dashboard?

  1. Change your directory to wireguard-dashboard
    cd wireguard-dashboard/src
  2. Update the dashboard
    sudo ./wgd.sh update

🔍 Screenshot

Sign In Page

Index Image

Configuration

Add Peer

Edit Peer

Delete Peer

Dashboard Setting

Ping

Traceroute

Changelog

v2.2.1 - Aug 16, 2021

Bug Fixed:

  • Added support for full subnet on Allowed IP
  • Peer setting Save button

v2.2 - Aug 14, 2021

  • 🎉 New Features
    • Add new peers: Now you can add peers directly on dashboard, it will generate a pair of private key and public key. You can also set its DNS, endpoint allowed IPs. Both can set a default value in the setting page. [ ❤️ in #44]
    • QR Code: You can add the private key in peer setting of your existed peer to create a QR code. Or just create a new one, dashboard will now be able to auto generate a private key and public key ;) Don't worry, all keys will be generated on your machine, and will delete all key files after they got generated. [ ❤️ in #29]
    • Peer configuration file download: Same as QR code, you now can download the peer configuration file, so you don't need to manually input all the details on the peer machine! [ ❤️ in #40]
    • Search peers: You can now search peers by their name.
    • Autostart on boot: Added a tutorial on how to start the dashboard to on boot! Please read the tutorial below. [ ❤️ in #29]
    • Click to copy: You can now click and copy all peer's public key and configuration's public key.
    • ....
  • 🪚 Bug Fixed
    • When there are comments in the wireguard config file, will cause the dashboard to crash.
    • Used regex to search for config files.
  • 🧐 Other Changes
    • Moved all external CSS and JavaScript file to local hosting (Except Bootstrap Icon, due to large amount of SVG files).
    • Updated Python dependencies
      • Flask: v1.1.2 => v2.0.1
      • Jinja: v2.10.1 => v3.0.1
      • icmplib: v2.1.1 => v3.0.1
    • Updated CSS/JS dependencies
      • Bootstrap: v4.5.3 => v4.6.0
    • UI adjustment
      • Adjusted how peers will display in larger screens, used to be 1 row per peer, now is 3 peers in 1 row.

v2.1 - Jul 2, 2021

  • Added Ping and Traceroute tools!
  • Adjusted the calculation of data usage on each peers
  • Added refresh interval of the dashboard
  • Bug fixed when no configuration on fresh install (#23)
  • Fixed crash when too many peers (#22)

v2.0 - May 5, 2021

  • Added login function to dashboard
    • I'm not using the most ideal way to store the username and password, feel free to provide a better way to do this if you any good idea!
  • Added a config file to the dashboard
  • Dashboard config can be change within the Setting tab on the side bar
  • Adjusted UI
  • And much more!

v1.1.2 - Apr 3, 2021

  • Resolved issue #3.

v1.1.1 - Apr 2, 2021

  • Able to add a friendly name to each peer. Thanks #2 !

v1.0 - Dec 27, 2020

  • Added the function to remove peers

🛒 Dependencies

Contributors

All Contributors

Thanks goes to these wonderful people (emoji key):


antonioag95

⚠️ 💻

tonjo

💻

Richard Newton

💻

David Long

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

Comments
  • Adding peer by bulk do crash dashboard

    Adding peer by bulk do crash dashboard

    Hello WGDashboard contributors,

    When I try to add peer (even 1) by bulk everything is crash and wg-dashboard.service is go down.

    image Снимок экрана 2022-03-20 142648

    OS Information:

    • OS: Ubuntu 20.04.4
    • Python Version: 3.8.10
    bug 
    opened by zverstal 36
  • configparser.NoSectionError: No section: 'Interface'

    configparser.NoSectionError: No section: 'Interface'

    Hi Thank you for such a good project of wireguard-dashboard,

    While i try to run the web interface, I am getting the following error. can you please help me with this.

    I installed it on ubuntu 20.04

    Think it got something to do with the Flask, Login page is opening, and when trying to login, it is throwing as internal error on web, in logs, found the reason below:

    Traceback (most recent call last): File "/usr/lib/python3.8/configparser.py", line 1146, in _unify_values sectiondict = self._sections[section] KeyError: 'Interface'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "/home/ubuntu/.local/lib/python3.8/site-packages/flask/app.py", line 2088, in call return self.wsgi_app(environ, start_response) File "/home/ubuntu/.local/lib/python3.8/site-packages/flask/app.py", line 2073, in wsgi_app response = self.handle_exception(e) File "/home/ubuntu/.local/lib/python3.8/site-packages/flask/app.py", line 2070, in wsgi_app response = self.full_dispatch_request() File "/home/ubuntu/.local/lib/python3.8/site-packages/flask/app.py", line 1515, in full_dispatch_request rv = self.handle_user_exception(e) File "/home/ubuntu/.local/lib/python3.8/site-packages/flask/app.py", line 1513, in full_dispatch_request rv = self.dispatch_request() File "/home/ubuntu/.local/lib/python3.8/site-packages/flask/app.py", line 1499, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args) File "/usr/local/etc/wireguard-dashboard/dashboard.py", line 677, in index return render_template('index.html', conf=get_conf_list()) File "/usr/local/etc/wireguard-dashboard/dashboard.py", line 308, in get_conf_list temp = {"conf": i, "status": get_conf_status(i), "public_key": get_conf_pub_key(i)} File "/usr/local/etc/wireguard-dashboard/dashboard.py", line 264, in get_conf_pub_key pri = conf.get("Interface", "PrivateKey") File "/usr/lib/python3.8/configparser.py", line 781, in get d = self._unify_values(section, vars) File "/usr/lib/python3.8/configparser.py", line 1149, in _unify_values raise NoSectionError(section) from None

    bug 
    opened by ramalmaty 21
  • INvalid character written to tunnel json file

    INvalid character written to tunnel json file

    JSON datafile sometimes will have invalid character at end and dashboard won't read properly, hangs going into that tunnels configuration page.

    I added a new peer via phone browser, oddly it seemed to pick up all the info for the previously created and saved peer. I fixed the IP address and other fields, then when I saved this last peer, it stopped responding. Could get into other tunnel's config pages, but not the one that I was in when I saved that peer.

    Went to filesystem, opened that tunnel's json file. When it opened in a json parser like Firefox, it would give an error parsing json at Line 1, Columns 2929. At that location in the file, there were a couple unknown characters: "^@" instead of a curly brace to close the first brace in the file. Removed and replaced with curly brace, reloaded wg-dashboard service and all was fine.

    bug 
    opened by ikidd 19
  • Internal Service Error on Ubuntu and RPi3

    Internal Service Error on Ubuntu and RPi3

    Describe The Problem Cannot login to dashboards on either a Ubuntu or a RPi install. Ubuntu install was installed with fresh WireGuard install, RPi install had an already configured WireGuard setup.

    Attempting to login with the dashboard with the default username admin and password admin results in an internal server error:

    Internal Server Error
    The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
    
    

    Expected Error / Traceback For Ubuntu:

    [2022-01-24 11:47:39,116] ERROR in app: Exception on /auth [POST]
    Traceback (most recent call last):
      File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 2073, in wsgi_app
        response = self.full_dispatch_request()
      File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1518, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1516, in full_dispatch_request
        rv = self.dispatch_request()
      File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1502, in dispatch_request
        return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
      File "dashboard.py", line 704, in auth
        password = hashlib.sha256(data['password'].encode())
    TypeError: 'NoneType' object is not subscriptable'
    

    For RPi:

    [2022-01-24 11:41:35,080] ERROR in app: Exception on /auth [POST]
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 2073, in wsgi_app
        response = self.full_dispatch_request()
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1518, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1516, in full_dispatch_request
        rv = self.dispatch_request()
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1502, in dispatch_request
        return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
      File "dashboard.py", line 704, in auth
        password = hashlib.sha256(data['password'].encode())
    TypeError: 'NoneType' object is not subscriptable
    

    Sidenote: Are my user permissions bad? I see the traceroute says fail on /auth is that for my authentication or is that on wg-dashboard? This error is the same across two distros so it must be something consistent with either wg-dashboard or my network.

    To Reproduce I did a fresh install of both wg-dashboard and wireguard into their default directories running them with ./wgd.sh start. I then tried to access them via the ip and port with default credentials. Upon entering credentials I am greeted with an internal server error.

    OS Information:

    • OS: Ubuntu 20..04.1

    • Python Version: 3.8.10

    • OS: Linux 5.10.63-v7+

    • Python Version: 3.7.3

    Sample of your .conf file Ubuntu:

    [Interface]
    Address = 10.0.0.1/24
    SaveConfig = true
    ListenPort = 51820
    PrivateKey = ABCD
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wlp0s20f3 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wlp0s20f3 -j MASQUERADE
    

    RPi:

    [Interface]
    Address = 10.100.0.1/32
    ListenPort = 47111
    PrivateKey = ABCD
    DNS = 192.168.50.25
    
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    
    
    [Peer]
    #x360
    PublicKey = ABCD
    PresharedKey = ABCD
    AllowedIPs = 10.100.0.2/32, fd08:4711::2/128, 192.168.0.0/24
    

    If any more information is required please let me know! I know I'm prone to making simple errors sometimes lol

    bug 
    opened by Gyrohammer 18
  • Added Gunicorn

    Added Gunicorn

    Added Gunicorn for production mode. I have made minimal changes for add this web-server. Fixed, exclude grep command from aux result. Added Let's Encrypt via certbot

    Need SERVERURL, EMAIL, CONFIGURATION_PATH, SSL ENV variables

    opened by pgalonza 16
  • Server will not accept password

    Server will not accept password

    No matter what I do, I cant get the server to accept my password.

    I tried to use the default settings of admin / admin (SHA256).

    I edited the wg-dashboard.ini file and changed both the username and password, stop and start the server, and it still wont accept.

    Any ideas?

    bug 
    opened by ben-dd 14
  • Different OS incompatibility or flask crash when too many peers  (Original Problem: Unable to see / add peers inside a configuration: TypeError: '<' not supported between instances of 'int' and 'str')

    Different OS incompatibility or flask crash when too many peers (Original Problem: Unable to see / add peers inside a configuration: TypeError: '<' not supported between instances of 'int' and 'str')

    Describe The Problem Installed the dashboard service on top of an existing wireguard server with multiple peers. I'm unable to see anything inside of the configuration. The log file shows a traceback: TypeError: '<' not supported between instances of 'int' and 'str'

    Expected Error / Traceback

    Please provide the error traceback here
    

    [22/Jun/2021 20:20:37] "GET /get_config/wg0 HTTP/1.1" 500 - [2021-06-22 20:20:59,820] ERROR in app: Exception on /get_config/wg0 [GET] Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2447, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1952, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1821, in handle_user_exception reraise(exc_type, exc_value, tb) File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise raise value File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1950, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1936, in dispatch_request return self.view_functionsrule.endpoint File "dashboard.py", line 406, in get_conf "peer_data": get_peers(config_name), File "dashboard.py", line 186, in get_peers result = sorted(result, key=lambda d: d['status']) TypeError: '<' not supported between instances of 'int' and 'str'

    To Reproduce Please provide how you run the dashboard

    Home page shows Wg0. When selecting Wg0 returns blank page with navigation on left still visible. Can activate / deactivate the interface.

    OS Information:

    • OS: CentOS Linux release 8.3.2011
    • Python Version: 3.6.8

    Sample of your .conf file

    [Interface]
    Address = 10.200.200.1/24
    SaveConfig = true
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens32 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens32 -j MASQUERADE
    ListenPort = <Listen port>
    PrivateKey = <Private Key here>
    
    [Peer]
    PublicKey = <Public Key here>
    AllowedIPs = 10.200.200.3/32
    Endpoint = <Client Generated>
    
    [Peer]
    PublicKey = <Public Key here>
    AllowedIPs = 10.200.200.4/32
    Endpoint = <Client Generated>
    
    [Peer]
    PublicKey = <Public Key here>
    AllowedIPs = 10.200.200.6/32
    Endpoint = <Client Generated>
    
    
    Please provide a sample of your configuration file that you are having problem with. You can replace your public key and private key to ABCD...
    

    [Account] username = ABCD password = ABCD

    [Server] wg_conf_path = /etc/wireguard app_ip = 0.0.0.0 app_port = 10086 auth_req = true version = v2.0

    bug 
    opened by ComradeCluck 14
  • KeyError: 'AllowedIPs'

    KeyError: 'AllowedIPs'

    UI starts, then when I click on wg0, blank page and the error. (Note: wireguard is perfectly working)

    Full traceback:

    Traceback (most recent call last):
      File "/opt/wgdashboard/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
        response = self.full_dispatch_request()
      File "/opt/wgdashboard/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/opt/wgdashboard/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "/opt/wgdashboard/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
        raise value
      File "/opt/wgdashboard/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
        rv = self.dispatch_request()
      File "/opt/wgdashboard/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "dashboard.py", line 286, in get_conf
        "peer_data": getdb(config_name),
      File "dashboard.py", line 172, in getdb
        get_conf_peers_data(config_name)
      File "dashboard.py", line 169, in get_conf_peers_data
        db.update({"allowed_ip":i['AllowedIPs']}, peers.id == i["PublicKey"])
    KeyError: 'AllowedIPs'
    
    bug 
    opened by tonjo 13
  • clicking WG0 Settings keeps loading for ever

    clicking WG0 Settings keeps loading for ever

    Describe The Problem I click on the WG0 Connection to open the settings for this connection. WGDashboard starts loading forever from now on.

    Expected Error / Traceback

    [2021-11-19 06:28:34,099] ERROR in app: Exception on /get_config/wg0 [GET]
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 2070, in wsgi_app
        response = self.full_dispatch_request()
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1515, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1513, in full_dispatch_request
        rv = self.dispatch_request()
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1499, in dispatch_request
        return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
      File "dashboard.py", line 779, in get_conf
        "peer_data": get_peers(config_name, search, sort),
      File "dashboard.py", line 327, in get_peers
        get_all_peers_data(config_name)
      File "dashboard.py", line 269, in get_all_peers_data
        search = db.search(peers.id == i['PublicKey'])
      File "/usr/local/lib/python3.7/dist-packages/tinydb/table.py", line 233, in search
        docs = [doc for doc in self if cond(doc)]
      File "/usr/local/lib/python3.7/dist-packages/tinydb/table.py", line 233, in <listcomp>
        docs = [doc for doc in self if cond(doc)]
      File "/usr/local/lib/python3.7/dist-packages/tinydb/table.py", line 603, in __iter__
        for doc_id, doc in self._read_table().items():
      File "/usr/local/lib/python3.7/dist-packages/tinydb/table.py", line 653, in _read_table
        tables = self._storage.read()
      File "/usr/local/lib/python3.7/dist-packages/tinydb/storages.py", line 125, in read
        return json.load(self._handle)
      File "/usr/lib/python3.7/json/__init__.py", line 296, in load
        parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
      File "/usr/lib/python3.7/json/__init__.py", line 348, in loads
        return _default_decoder.decode(s)
      File "/usr/lib/python3.7/json/decoder.py", line 340, in decode
        raise JSONDecodeError("Extra data", s, end)
    json.decoder.JSONDecodeError: Extra data: line 1 column 4504 (char 4503)
    10.7.0.3 - - [19/Nov/2021 06:28:34] "GET /get_config/wg0?search= HTTP/1.1" 500 -
    10.7.0.3 - - [19/Nov/2021 06:28:34] "GET /static/img/logo.png HTTP/1.1" 200 -
    User not loggedin - Attemped access: get_conf
    10.0.5.17 - - [19/Nov/2021 06:28:49] "GET /get_config/wg0?search= HTTP/1.1" 302 -
    10.0.5.17 - - [19/Nov/2021 06:28:49] "GET /signin HTTP/1.1" 200 -
    10.0.5.17 - - [19/Nov/2021 06:28:49] "GET /static/css/dashboard.css HTTP/1.1" 200 -
    10.0.5.17 - - [19/Nov/2021 06:28:49] "GET /static/js/jquery.min.js HTTP/1.1" 200 -
    10.0.5.17 - - [19/Nov/2021 06:28:49] "GET /static/js/bootstrap.bundle.js HTTP/1.1" 200 -
    10.0.5.17 - - [19/Nov/2021 06:28:50] "GET /static/js/tools.js HTTP/1.1" 200 -
    [2021-11-19 06:29:34,197] ERROR in app: Exception on /get_config/wg0 [GET]
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 2070, in wsgi_app
        response = self.full_dispatch_request()
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1515, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1513, in full_dispatch_request
        rv = self.dispatch_request()
      File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1499, in dispatch_request
        return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
      File "dashboard.py", line 779, in get_conf
        "peer_data": get_peers(config_name, search, sort),
      File "dashboard.py", line 327, in get_peers
        get_all_peers_data(config_name)
      File "dashboard.py", line 269, in get_all_peers_data
        search = db.search(peers.id == i['PublicKey'])
      File "/usr/local/lib/python3.7/dist-packages/tinydb/table.py", line 233, in search
        docs = [doc for doc in self if cond(doc)]
      File "/usr/local/lib/python3.7/dist-packages/tinydb/table.py", line 233, in <listcomp>
        docs = [doc for doc in self if cond(doc)]
      File "/usr/local/lib/python3.7/dist-packages/tinydb/table.py", line 603, in __iter__
        for doc_id, doc in self._read_table().items():
      File "/usr/local/lib/python3.7/dist-packages/tinydb/table.py", line 653, in _read_table
        tables = self._storage.read()
      File "/usr/local/lib/python3.7/dist-packages/tinydb/storages.py", line 125, in read
        return json.load(self._handle)
      File "/usr/lib/python3.7/json/__init__.py", line 296, in load
        parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
      File "/usr/lib/python3.7/json/__init__.py", line 348, in loads
        return _default_decoder.decode(s)
      File "/usr/lib/python3.7/json/decoder.py", line 340, in decode
        raise JSONDecodeError("Extra data", s, end)
    json.decoder.JSONDecodeError: Extra data: line 1 column 4504 (char 4503)
    10.7.0.3 - - [19/Nov/2021 06:29:34] "GET /get_config/wg0?search= HTTP/1.1" 500 -
    

    To Reproduce It is running on a raspberry pi 4. It is installed with all recommendations/guidelines provided from this github wiki/installation instructions.

    OS Information:

    • OS: dietpi 7.8.2
    • Python Version: 3.7.3

    Sample of your .conf file

    [Interface]
    Address = 10.7.0.1/24
    SaveConfig = true
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    ListenPort = 51820
    PrivateKey = [SNIP]
    
    [Peer]
    PublicKey = [SNIP]
    PresharedKey = [SNIP]
    AllowedIPs = 10.7.0.2/32
    Endpoint = [SNIP]:60308
    
    [Peer]
    PublicKey = [SNIP]
    PresharedKey = [SNIP]
    AllowedIPs = 10.7.0.3/32
    Endpoint = [SNIP]:63366
    
    [Peer]
    PublicKey = [SNIP]
    PresharedKey = [SNIP]
    AllowedIPs = 10.7.0.4/32
    
    [Peer]
    PublicKey = [SNIP]
    AllowedIPs = 10.7.0.10/32
    
    bug 
    opened by nicedevil007 11
  • Issue with / at start of Public Key? (WireGuard config parsing problem)

    Issue with / at start of Public Key? (WireGuard config parsing problem)

    I am getting the below error when reading in the wg0.conf. Only thing I notice about that particular key is the fact that it starts with a /
    Could that be a problem for the parser?

    [2021-08-15 07:00:34,122] ERROR in app: Exception on /get_config/wg0 [GET] Traceback (most recent call last): File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 2447, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1952, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1821, in handle_user_exception reraise(exc_type, exc_value, tb) File "/usr/local/lib/python3.7/dist-packages/flask/_compat.py", line 39, in reraise raise value File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1950, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1936, in dispatch_request return self.view_functionsrule.endpoint File "dashboard.py", line 714, in get_conf "peer_data": get_peers(config_name, search, sort), File "dashboard.py", line 248, in get_peers get_all_peers_data(config_name) File "dashboard.py", line 209, in get_all_peers_data search = db.search(peers.id == i['PublicKey']) KeyError: 'PublicKey' 10.200.200.32 - - [15/Aug/2021 07:00:34] "GET /get_config/wg0?search= HTTP/1.1" 500 -

    opened by khaberz 11
  • Redirect to http on accessing the web GUI prevents access behind proxy

    Redirect to http on accessing the web GUI prevents access behind proxy

    Hi, I wonder if you can help me. I was running v2.3.1 behind a web proxy proxying to the non-SSL http page as SSL with certificates. Unfortunately, on upgrading to v3.0.5 there is an automatic re-direct to http forced by WG Dashboard. For example, if I access the WG Dashboard server IP directly on: http://192.168.0.45:10086 I get the following re-direct http://192.168.0.45:10086/signin?redirect=http://192.168.0.45:10086/

    Trying to access through an FQDN and SSL via my proxy the proxy will throw a 403 error as the https connection is being re-direct to http and my proxy is set to always connect via https.

    Is there a setting or way to prevent this re-direct from occurring? It has only come about in v3.0.5.

    Fantastic project btw!

    bug 
    opened by arranpaul 9
  • Python 3.7 installed but cannot install wgdashboard

    Python 3.7 installed but cannot install wgdashboard

    I have several python versions installed, but 3.7 is set as default. However, when running "./wgd.sh install" i get the error:

    ------------------------------------------------------------
    | Starting to install WGDashboard                          |
    | WGDashboard required Python 3.7 or above          |
    ------------------------------------------------------------
    

    this is the output from "update-alternatives --config python":

      Selection    Path                      Priority   Status
    ------------------------------------------------------------
    * 0            /usr/local/bin/python3.7   3         auto mode
      1            /usr/bin/python3           2         manual mode
      2            /usr/bin/python3.5         1         manual mode
      3            /usr/local/bin/python3.7   3         manual mode
    

    running "python -V" shows "Python 3.7.9".

    Thanks.

    opened by Maksim-us 0
  • Allow customized port for remote endpoint

    Allow customized port for remote endpoint

    I've tried to config a Peer Remote Endpoint with a customized port, for instance: some.domain:5821.

    But the generated peer configuration in this case is:

    PublicKey = <public key>
    AllowedIps = 0.0.0.0/0
    Endpoint = some.domain:5821:51820
    

    Please, add a way to customize the port.

    Thank you very much.

    enhancement 
    opened by gabichan 0
  • wgdashboard issue with sqlite table names, does not handle interface names with dash in name

    wgdashboard issue with sqlite table names, does not handle interface names with dash in name

    Describe The Problem Wireguard allows interfaces names that match the following regex: ^[a-zA-Z0-9_=+.-]{1,15}$

    In dashboard.py the on line 490 the create_table function crashes when using an interface name such as wg-test.

    The reason for this is that SQlite does not allow dashes in database names unless they are quoted. As reference see this {stackoverflow answer](https://stackoverflow.com/a/3694291).

    The fix is to replace CREATE TABLE IF NOT EXISTS {i} ( with CREATE TABLE IF NOT EXISTS \"{i}\" (

    This will fix the login error. However there are some more locations in the code that still need escaping. For example opening an interface wont work.

    Expected Error / Traceback

    Dec 17 23:01:02 wireguard python3[40351]:   File "/srv/wgdashboard/src/dashboard.py", line 501, in get_conf_list
    Dec 17 23:01:02 wireguard python3[40351]:     g.cur.execute(create_table)
    Dec 17 23:01:02 wireguard python3[40351]: sqlite3.OperationalError: near "-": syntax error
    

    To Reproduce Run the dashboard with an interface with dashes in the name such as wg-test

    OS Information:

           _,met$$$$$gg.          [email protected]
        ,g$$$$$$$$$$$$$$$P.       --------------
      ,g$$P"     """Y$$.".        OS: Debian GNU/Linux 11 (bullseye) x86_64
     ,$$P'              `$$$.     Host: KVM/QEMU (Standard PC (i440FX + PIIX, 1996) pc-i440fx-7.1)
    ',$$P       ,ggs.     `$$b:   Kernel: 5.10.0-19-cloud-amd64
    `d$$'     ,$P"'   .    $$$    Uptime: 1 day, 2 hours, 8 mins
     $$P      d$'     ,    $$P    Packages: 451 (dpkg)
     $$:      $$.   -    ,d$$'    Shell: bash 5.1.4
     $$;      Y$b._   _,d$P'      CPU: Intel i7-8559U (2) @ 2.711GHz
     Y$$.    `.`"Y$$$$P"'         Memory: 112MiB / 1985MiB
     `$$b      "-.__
      `Y$$
       `Y$$.
         `$$b.
           `Y$$b.
              `"Y$b._
                  `"""
    
    python3 -V
    Python 3.9.2
    

    Sample of your .conf file

    default file without any changes
    
    bug 
    opened by epiecs 0
  • Error when the default interface ip cannot be found!

    Error when the default interface ip cannot be found!

    I've installed this great dashboard on my VPS and noticed that when my Linux Machine default route is set to tunnel interface, the "ifcfg.default_interface()" function returns "None" and the program crashes. I am a junior Python developer and I made some changes to solve this problem. Please let me know if you have any comments.

    -------------------ERROR-------------------

    | Starting WGDashboard with Gunicorn in the background. | Failed to read config file: /root/wgdashboard/src/gunicorn.conf.py Traceback (most recent call last): File "/usr/local/lib/python3.8/dist-packages/gunicorn/app/base.py", line 111, in get_config_from_filename spec.loader.exec_module(mod) File "", line 848, in exec_module File "", line 219, in _call_with_frames_removed File "/root/wgdashboard/src/gunicorn.conf.py", line 4, in app_host, app_port = dashboard.get_host_bind() File "/root/wgdashboard/src/dashboard.py", line 1702, in get_host_bind init_dashboard() File "/root/wgdashboard/src/dashboard.py", line 1641, in init_dashboard config['Peers']['remote_endpoint'] = ifcfg.default_interface()['inet'] TypeError: 'NoneType' object is not subscriptable | Log files is under log/

    opened by mbaniadam 0
  • Peer connection status goes offline after 120 sec without handshake

    Peer connection status goes offline after 120 sec without handshake

    After 120 seconds without a handshake, the connection status of a peer goes to 'Peer Disconnected'.

    180 seconds would be a better default value: https://www.ivpn.net/knowledgebase/general/using-wireguard-for-privacy-protection/#:~:text=last%20maximum%20for-,180%20seconds,-.

    Even better to make this value configurable.

    bug 
    opened by martin-g-it 1
Releases(v3.0.6)
  • v3.0.6(Mar 22, 2022)

    Fixed Bug

    • When wgdashboard is running behind a proxy server, redirecting could cause using http while proxy is using https [❤️ from #161]
    Source code(tar.gz)
    Source code(zip)
  • v3.0.5(Jan 31, 2022)

    Quick Fix

    • Fixed public key does not match when user used an existing private key
    • Sorry for the wrong version number that causing the dashboard ask for update after updating.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.3(Jan 24, 2022)

  • v3.0(Jan 18, 2022)

    📣 What's New: v3.0

    • 🎉 New Features

      • Moved from TinyDB to SQLite: SQLite provide a better performance and loading speed when getting peers! Also avoided crashing the database due to race condition.
      • Added Gunicorn WSGI Server: This could provide more stable on handling HTTP request, and more flexibility in the future (such as HTTPS support). BIG THANKS to @pgalonza :heart:
      • Add Peers by Bulk: User can add peers by bulk, just simply set the amount and click add.
      • Delete Peers by Bulk: User can delete peers by bulk, without deleting peers one by one.
      • Download Peers in Zip: User can download all downloadable peers in a zip.
      • Added Pre-shared Key to peers: Now each peer can add with a pre-shared key to enhance security. Previously added peers can add the pre-shared key through the peer setting button.
      • Redirect Back to Previous Page: The dashboard will now redirect you back to your previous page if the current session got timed out and you need to sign in again.
      • Added Some 🥘 Experimental Functions
    • 🪚 Bug Fixed

    • 🧐 Other Changes

      • Key generating moved to front-end: No longer need to use the server's WireGuard to generate keys, thanks to the wireguard.js from the official repository!
      • Peer transfer calculation: each peer will now show all transfer amount (previously was only showing transfer amount from the last configuration start-up).
      • UI adjustment on running peers: peers will have a new style indicating that it is running.
      • wgd.sh finally can update itself: So now user could update the whole dashboard from wgd.sh, with the update command.
      • Minified JS and CSS files: Although only a small changes on the file size, but I think is still a good practice to save a bit of bandwidth ;)

    And many other small changes for performance and bug fixes! :laughing:

    If you have any other brilliant ideas for this project, please shout it in here #129 :heart:

    For users who is using v2.x.x please be sure to read this before updating WGDashboard ;)

    Source code(tar.gz)
    Source code(zip)
  • v3.0-beta.1(Jan 18, 2022)

  • v3.0-beta(Jan 18, 2022)

  • v2.3.1(Sep 9, 2021)

  • v2.3(Sep 8, 2021)

    📣 What's New: Version v2.3

    Source code(tar.gz)
    Source code(zip)
  • v2.2.1(Aug 16, 2021)

  • v2.2(Aug 15, 2021)

    📣 What's New: Version v2.2

    • 🎉 New Features
      • Add new peers: Now you can add peers directly on dashboard, it will generate a pair of private key and public key. You can also set its DNS, endpoint allowed IPs. Both can set a default value in the setting page. [❤️ in #44]
      • QR Code: You can add the private key in peer setting of your existed peer to create a QR code. Or just create a new one, dashboard will now be able to auto generate a private key and public key ;) Don't worry, all keys will be generated on your machine, and will delete all key files after they got generated. [❤️ in #29]
      • Peer configuration file download: Same as QR code, you now can download the peer configuration file, so you don't need to manually input all the details on the peer machine! [❤️ in #40]
      • Search peers: You can now search peers by their name.
      • Autostart on boot: Added a tutorial on how to start the dashboard to on boot! Please read the tutorial below. [❤️ in #29]
      • Click to copy: You can now click and copy all peer's public key and configuration's public key.
      • ....
    • 🪚 Bug Fixed
      • When there are comments in the wireguard config file, will cause the dashboard to crash.
      • Used regex to search for config files.
    • 🧐 Other Changes
      • Moved all external CSS and JavaScript file to local hosting (Except Bootstrap Icon, due to large amount of SVG files).
      • Updated Python dependencies
        • Flask: v1.1.2 => v2.0.1
        • Jinja: v2.10.1 => v3.0.1
        • icmplib: v2.1.1 => v3.0.1
      • Updated CSS/JS dependencies
        • Bootstrap: v4.5.3 => v4.6.0
      • UI adjustment
        • Adjusted how peers will display in larger screens, used to be 1 row per peer, now is 3 peers in 1 row.
    Source code(tar.gz)
    Source code(zip)
  • v2.1(Jul 2, 2021)

    📣 What's New: Version 2.1

    • Added Ping and Traceroute tools!
    • Adjusted the calculation of data usage on each peers
    • Added refresh interval of the dashboard
    • Bug fixed when no configuration on fresh install (#23)
    • Fixed crash when too many peers (#22)

    Please notice that I mistakenly left a configuration file under the db folder, please remove it if you found it inside

    Source code(tar.gz)
    Source code(zip)
  • v2.0(May 5, 2021)

    📣 What's New: Version 2.0

    ⚠️ Update from v1.x.x

    1. Stop the dashboard if it is running.
    2. You can use git pull https://github.com/donaldzou/Wireguard-Dashboard.git v2.0 to get the new update inside Wireguard-Dashboard directory.
    3. Proceed Step 2 & 3 in the Install step down below.

    • Added login function to dashboard

      • I'm not using the most ideal way to store the username and password, feel free to provide a better way to do this if you any good idea!
    • Added a config file to the dashboard

    • Dashboard config can be change within the Setting tab on the side bar

    • Adjusted UI

    • And much more!

    Source code(tar.gz)
    Source code(zip)
  • v1.1.2(Apr 3, 2021)

  • v1.1.1(Apr 3, 2021)

  • v1.0-beta.5(Oct 23, 2020)

  • v1.0-beta.4(Oct 18, 2020)

  • v1.0-beta.3(Oct 18, 2020)

Owner
Donald Zou
I'm a Computer Science student @ Western University. Mainly focused on web development.
Donald Zou
MQTT Explorer - MQTT Subscriber client to explore topic hierarchies

mqtt-explorer MQTT Explorer - MQTT Subscriber client to explore topic hierarchies Overview The MQTT Explorer subscriber client is designed to explore

Gambit Communications, Inc. 4 Jun 19, 2022
Ipscanner - A simple threaded IP-Scanner written in python3 that can monitor local IP's in your network

IPScanner 🔬 A simple threaded IP-Scanner written in python3 that can monitor lo

4 Dec 12, 2022
A simple port scanner for Web/ip scanning Port 0/500 editable inside the .py file

Simple-Port-Scanner a simple port scanner for Web/ip scanning Port 0/500 editable inside the .py file Open Cmd/Terminal Cmd Downloads Run Command: pip

YABOI 1 Nov 22, 2021
Dnspython is a DNS toolkit for Python.

dnspython is a DNS toolkit for Python. It supports almost all record types. It can be used for queries, zone transfers, and dynamic updates. It supports TSIG authenticated messages and EDNS0.

Bob Halley 2.1k Jan 06, 2023
IPV4 network calculation project in Python

Curso de Python 3 do Básico ao Avançado Desafio: Calculando redes IPV4 Criar um programa que obtem um numero de IP com o prefixo da mascara de rede. O

Diego Guedes 3 Jan 21, 2022
A Python Tor template on Gitpod

A Python Tor template on Gitpod This is template configured for ephemeral development environments on Gitpod. prebuild Get Started With Your Own Proje

Ivan Yastrebov 1 Dec 17, 2021
User-friendly packet captures

capture-packets: User-friendly packet captures Please read before using All network traffic occurring on your machine is captured (unless you specify

Seth Michael Larson 2 Feb 05, 2022
A protocol or procedure that connects an ever-changing IP address to a fixed physical machine address

p0znMITM ARP Poisoning Tool What is ARP? Address Resolution Protocol (ARP) is a protocol or procedure that connects an ever-changing IP address to a f

Furkan OZKAN 9 Sep 18, 2022
Network Engineer's Unified Realtime Automation Library

NEURAL is the premiere CLI jockey replacement full stack web/app/database network automation application, providing a "no-code" web app for network engineers developed by a network engineer!

Brett M Spunt 3 Aug 15, 2022
A simple electrical network analyzer, BASED ON computer-aided design.

Electrical Network Analyzer A simple electrical network analyzer. Given the oriented graph of the electrical network (circut), BASED ON computer-aided

Ahmad Abdulrahman 4 Oct 15, 2022
Publish GPU miner info to MQTT

Miner2MQTT Доступ к вашему GPU майнеру через MQTT. Изменения 1.0 EXE файл для Windows 1.1 Управление вентиляторами видеокарт (Linux) Упраление power l

Dmitry Bukhvalov 5 Aug 21, 2022
Tool for pretty printing and optimizing Lightning Network channels.

Suez Tool for pretty printing and optimizing Lightning Network channels. Installation Install poetry poetry install poetry run ./suez Channel fee poli

Pavol Rusnak 69 Nov 03, 2022
A web-based app that allows easy, simple - and if desired high-throughput - analysis of qPCR data

qpcr-Analyser A web-based GUI for the qpcr package that allows easy, simple and high-throughput analysis of qPCR data. As is described in more detail

1 Sep 13, 2022
Monitoring plugin to check network interfaces with Icinga, Nagios and other compatible monitoring solutions

check_network_interface - Monitor network interfaces This is a monitoring plugin for Icinga, Nagios and other compatible monitoring solutions to check

DinoTools 3 Nov 15, 2022
Whoisss is a website information gatharing Tool.

Whoisss Whoisss is a website information gatharing Tool. You can cse it to collect information about website. Usage apt-get update apt-get upgrade pkg

Md. Nur habib 2 Jan 23, 2022
IPE is a simple tool for analyzing IP addresses. With IPE you can find out the server region, city, country, longitude and latitude and much more in seconds.

IPE is a simple tool for analyzing IP addresses. With IPE you can find out the server region, city, country, longitude and latitude and much more in seconds.

Paul 0 Jun 11, 2022
Slowloris is basically an HTTP Denial of Service attack that affects threaded servers.

slowrise-ddos-tool What is Slowloris? Slowloris is basically an HTTP Denial of S

DEMON cat 4 Jun 19, 2022
Asynchronous For Python(asyncio)

asyncio is a library to write concurrent code using the async/await syntax.asyncio is used as a foundation for multiple Python asynchronous frameworks that provide high-performance network and web-se

Janak raikhola 0 Feb 05, 2022
Juniper SNMP Migrations For Python

Juniper SNMP Migrations This example will show how to use the PyEZ plugin for Nornir to build a NETCONF connection to a remote device validate that SN

Calvin Remsburg 1 Jan 07, 2022
Load balancing DICOM router

dicom-loadbalancer Load balancing DICOM router (WORK IN PROGRESS) The DICOM loadbalancer provides functionality for acting as any number of DICOM SCPs

Søren Boll Overgaard 1 Jan 15, 2022