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.          root@wireguard
        ,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
A script for generating WireGuard configs from Surfshark VPN

Surfshark WireGuard A script for generating WireGuard configs from Surfshark VPN. You must have python3 available on your machine. Usage Currently we

Alireza Ahmand 58 Dec 23, 2022
Python Program to connect to different VPN servers autoatically using Windscribe VPN.

AutomateVPN What is VPN ? VPN stands for Virtual Private Network , it is a technology that creates a safe and encrypted connectionover a less secure n

Vivek 1 Oct 27, 2021
wg-exporter is a simple yet effective Prometheus exporter for Wireguard

wg-exporter wg-exporter is a simple yet effective Prometheus exporter for Wireguard. What are the collected metrics ? General: wg_connected_peers: num

men1n2 3 May 20, 2022
A Simplest TCP client and echo server

Простейшие TCP-клиент и эхо-сервер Цель работы Познакомиться с приемами работы с сетевыми сокетами в языке программирования Python. Задания для самост

Юля Нагубнева 1 Oct 25, 2021
Python script to stop qBittorrent from torrenting without VPN for users with static IP.

Python script to stop qBittorrent from torrenting without VPN for users with static IP.

voidoak_ 1 Oct 25, 2021
SonicWall SSL-VPN Exploit

VisualDoor SonicWall SSL-VPN Exploit, as used by Phineas Fisher to hack Cayman Trust Bank and Hacking Team.

null 169 Nov 15, 2022
sshuttle: where transparent proxy meets VPN meets ssh

Transparent proxy server that works as a poor man's VPN. Forwards over ssh. Doesn't require admin. Works with Linux and MacOS. Supports DNS tunneling.

null 9.4k Jan 9, 2023
A fire and forget command-line tool to allow for easy transitions of VPN connections between a pool of AWS machines.

VPN Swapper A fire and forget command-line tool to allow for easy transitions of VPN connections between a pool of AWS machines. Dependencies poetry -

Workday 5 Jul 7, 2022
Ctech Didik Auto Script VPN 👨🏻‍💻Youtube: Ctech Didik

CTech Didik Auto Script VPN SUPPORT OPERATING SYSTEM Debian GNU/Linux 11 (Bullseye) Debian GNU/Linux 10 (Buster) Debian GNU/Linux 9 (Stretch) Ubuntu S

Ctech Didik 27 Dec 20, 2022
Pritunl is a distributed enterprise vpn server built using the OpenVPN protocol.

Pritunl is a distributed enterprise vpn server built using the OpenVPN protocol.

Pritunl 3.8k Jan 3, 2023
Raspberry Pi Based Serial Console Server, with PushBullet Notification of IP changes, Automatic VPN termination, custom menu, Power Outlet Control, and a lot more

ConsolePi Acts as a serial Console Server, allowing you to remotely connect to ConsolePi via Telnet/SSH/bluetooth to gain Console Access to devices co

null 120 Jan 5, 2023
Openconnect VPN RPi Gateway

Openconnect-VPN-RPi-Gateway See the blog (Chinese) for how to build an Openconne

Zhongze Tang 2 Jan 30, 2022
KoreaVPN - Create a VPN App for Mac Using Automator

VPN app 만들기 (a.k.a. KoreaVPN) VPN을 사용하기 위해 들어가는 10초의 시간을 아끼고, 귀찮음을 최소화 하기 위해 크롤링

DongHee 6 Jan 17, 2022
A vpn that sits in your browser, accessible via a website

VPNInYourBrowser A vpn that sits in your browser, accessible via a website Example setup: https://VPNInBrowser.jaffa42.repl.co Setup Put the code onto

null 1 Jan 20, 2022
A vpn that sits in your browser, accessible via a website

VPNInYourBrowser A vpn that sits in your browser, accessible via a website Example setup: https://VPNInBrowser.jaffa42.repl.co Setup Put the code onto

null 1 Jan 20, 2022
pyWhisker is a Python equivalent of the original Whisker made by Elad Shamir and written in C#.

PyWhisker pyWhisker is a Python equivalent of the original Whisker made by Elad Shamir and written in C#. This tool allows users to manipulate the msD

Shutdown 325 Jan 8, 2023
RollerScanner — Fast Port Scanner Written On Python

RollerScanner RollerScanner — Fast Port Scanner Written On Python Installation You should clone this repository using: git clone https://github.com/Ma

null 68 Nov 9, 2022
Simple Port Scanner script written in Python, plans is to expand upon this script to turn it into a GUI based pen testing suite

PortScanner Simple Port Scanner script written in Python, plans is to expand upon this script to turn it into a GUI based pen testing suite. #IMPORTAN

null 1 Oct 23, 2021
D-dos attack GUI tool written in python using tkinter module

ddos D-dos attack GUI tool written in python using tkinter module #to use this tool on android, do the following on termux. *. apt update *. apt upgra

null 6 Feb 5, 2022