{ "info": { "author": "Daniel Lenski", "author_email": "dlenski@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: BSD", "Operating System :: POSIX :: Linux", "Topic :: System :: Networking", "Topic :: System :: Systems Administration" ], "description": "vpn-slice\n=========\n\n[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n[![Build Status](https://github.com/dlenski/vpn-slice/workflows/test_and_release/badge.svg)](https://github.com/dlenski/vpn-slice/actions?query=workflow%3Atest_and_release)\n[![PyPI](https://img.shields.io/pypi/v/vpn-slice.svg)](https://pypi.python.org/pypi/vpn-slice)\n[![Homebrew](https://img.shields.io/homebrew/v/vpn-slice.svg)](https://formulae.brew.sh/formula/vpn-slice)\n\nTable of Contents\n=================\n\n * [Introduction](#introduction)\n * [Who this is for](#who-this-is-for)\n * [Requirements](#requirements)\n * [First steps](#first-steps)\n * [Usage](#usage)\n * [Diagnostics](#diagnostics)\n * [Inspiration and credits](#inspiration-and-credits)\n * [License](#license)\n * [TODO](#todo)\n\n## Introduction\n\nThis is a replacement for the\n[`vpnc-script`](https://www.infradead.org/openconnect/vpnc-script.html)\nused by [OpenConnect](https://www.infradead.org/openconnect) or\n[VPNC](https://www.unix-ag.uni-kl.de/~massar/vpnc).\n\nInstead of trying to copy the behavior of standard corporate VPN clients,\nwhich normally reroute **all** your network traffic through the VPN,\nthis one tries to _minimize your contact_ with an intrusive VPN.\nThis is also known as a\n[split-tunnel](https://en.wikipedia.org/wiki/Split_tunneling) VPN, since\nit splits your traffic between the VPN tunnel and your normal network\ninterfaces.\n\n`vpn-slice` makes it easy to set up a split-tunnel VPN:\n\n* By default, it only routes traffic for **specific hosts or subnets**\n through the VPN.\n* It automatically looks up named hosts, using the VPN's DNS servers,\n and adds entries for them to your `/etc/hosts` (which it cleans up\n after VPN disconnection), however it **does not otherwise alter your\n `/etc/resolv.conf` at all**.\n* It has many additional options to customize routing and lookup (for\n example, `--route-splits` to additionally route traffic for specific\n subnets requested *by the server*). Run `vpn-slice --help` to see\n them all.\n\n## Who this is for\n\nIf you are using a VPN to route *all* your traffic for privacy reasons\n(or to avoid censorship in repressive countries), then you **do not want\nto use this**.\n\nThe purpose of this tool is almost the opposite; it makes it easy to\nconnect to a VPN while **minimizing** the traffic that passes over the\nVPN.\n\nThis is for people who have to connect to the high-security VPNs of\ncorporations or other bureaucracies (which monitor and filter and\notherwise impede network traffic), and thus wish to route as little\ntraffic as possible through those VPNs.\n\n## Requirements\n\n* Python 3.3+\n* Either of the following:\n * [`dnspython`](https://pypi.org/project/dnspython) module (**preferred**, tested with v1.16.0)\n * [`dig`](https://en.wikipedia.org/wiki/Dig_(command)) command-line DNS lookup tool (tested with v9.9.5 and v9.10.3)\n* Supported OSes:\n * Linux kernel 3.x+ with\n [`iproute2`](https://en.wikipedia.org/wiki/iproute2) and\n [`iptables`](https://en.wikipedia.org/wiki/iptables) utilities\n (used for all routing setup)\n * macOS 10.x with BSD\n [`route`](https://en.wikipedia.org/wiki/Route_(command))\n * FreeBSD with BSD\n [`route`](https://en.wikipedia.org/wiki/Route_(command))\n if [`procfs`](https://www.freebsd.org/cgi/man.cgi?query=procfs&sektion=5) is mounted\n\nYou can install the latest build [from PyPI](https://pypi.org/project/vpn-slice)\nwith `pip` (make sure you are using the Python 3.x version, usually invoked\nwith `pip3`).\n\nYou should install as `root` (e.g. using `sudo`), because\n`openconnect` or `vpnc` will need to be able to invoke `vpn-slice`\nwhile running as root:\n\n```sh\n# latest release from PyPI\n$ sudo pip3 install vpn-slice\n\n# latest development version\n$ sudo pip3 install https://github.com/dlenski/vpn-slice/archive/master.zip\n```\n\nOn macOS, you can also install from the [Homebrew](https://brew.sh) repository:\n\n```sh\n$ brew install vpn-slice\n```\n\n## First steps\n\nBefore trying to use `vpn-slice` with `openconnect` or `vpnc`,\ncheck that it works properly on your platform, and can verify that it has all of\nthe access and dependencies that it needs (to modify `/etc/hosts`, alter\nrouting table, etc.):\n\n```sh\n$ sudo vpn-slice --self-test\n***************************************************************************\n*** Self-test passed. Try using vpn-slice with openconnect or vpnc now. ***\n***************************************************************************\n```\n\nIf you run the self-test as a non-`root` user, it will tell you what required\naccess it is unable to obtain:\n\n```sh\n$ vpn-slice --self-test\nWARNING: Couldn't configure hosts provider: Cannot read/write /etc/hosts\n******************************************************************************************\n*** Self-test did not pass. Double-check that you are running as root (e.g. with sudo) ***\n******************************************************************************************\nAborting because providers for hosts are required; use --help for more information\n```\n\nWhen you start trying to use `vpn-slice` for real, you should use the\n[diagnostic options](#diagnostics) (e.g `openconnect -s 'vpn-slice\n--verbose --dump'`) to troubleshoot and understand its behavior.\n\n## Usage\n\nYou should specify `vpn-slice` as your connection script with\n`openconnect` or `vpnc`. It has been tested with vpnc v0.5.3, OpenConnect\nv7.06+ (Cisco AnyConnect and Juniper protocols) and v8.0+ (PAN GlobalProtect\nprotocol).\n\nFor example:\n\n```sh\n$ sudo openconnect gateway.bigcorp.com -u user1234 \\\n -s 'vpn-slice 192.168.1.0/24 hostname1 alias2=alias2.bigcorp.com=192.168.1.43'\n$ cat /etc/hosts\n...\n192.168.1.1 dns0.tun0\t\t\t\t\t# vpn-slice-tun0 AUTOCREATED\n192.168.1.2 dns1.tun0\t\t\t\t\t# vpn-slice-tun0 AUTOCREATED\n192.168.1.57 hostname1 hostname1.bigcorp.com\t\t# vpn-slice-tun0 AUTOCREATED\n192.168.1.43 alias2 alias2.bigcorp.com\t\t# vpn-slice-tun0 AUTOCREATED\n```\n\nor\n\n```sh\n# With most versions of vpnc, you *must* specify an absolute path\n# for the disconnect hook to work correctly, due to a bug.\n#\n# I reported this bug, but the original maintainers no longer maintain vpnc.\n# https://lists.unix-ag.uni-kl.de/pipermail/vpnc-devel/2016-August/004199.html\n#\n# However, some Linux distro packagers have picked up my patch in recent\n# releases, e.g. Ubuntu 17.04:\n# https://changelogs.ubuntu.com/changelogs/pool/universe/v/vpnc/vpnc_0.5.3r550-3/changelog\n#\n$ sudo vpnc config_file \\\n --script '/path/to/vpn-slice 192.168.1.0/24 hostname1 alias2=alias2.bigcorp.com=192.168.1.43'\n```\n\nNotice that `vpn-slice` accepts several different kinds of routes and hostnames on the command line:\n\n- Hostnames *alone* (`hostname1`) as well as *host-to-IP* aliases (`alias2=alias2.bigcorp.com=192.168.1.43`).\n The former are first looked up using the VPN's DNS servers. Both are also added to the routing table, as\n well as to `/etc/hosts` (unless `--no-host-names` is specified). As in this example, multiple aliases can\n be specified for a single IP address.\n- Subnets to *include* (`10.0.0.0/8`) in the VPN routes as well as subnets to explicitly *exclude* (`%10.123.0.0/24`).\n\nThere are many command-line options to alter the behavior of\n`vpn-slice`; try `vpn-slice --help` to show them all.\n\n# Diagnostics\n\nRunning with `--verbose` makes it explain what it is doing, while running with\n`--dump` shows the environment variables passed in by the caller.\n\n# Inspiration and credits\n\n* [**@jagtesh**](https://github.com/jagtesh)'s\n [split-tunnelling tutorial gist](https://gist.github.com/jagtesh/5531300) taught me the\n basics of how to set up a split-tunnel VPN by wrapping the standard `vpnc-script`.\n* [**@apenwarr**](https://github.com/apenwarr)'s\n [sshuttle](https://github.com/apenwarr/sshuttle) has the excellent\n `--auto-hosts` and `--seed-hosts` options. These inspired the\n automatic host lookup feature.\n* [**@gmacon**](https://github.com/gmacon)'s\n [PR #11](https://github.com/dlenski/vpn-slice/pull/11) substantially\n refactored the code to separate the OS-dependent parts more\n cleanly, and added macOS support.\n* [**@joelbu**](https://github.com/joelbu)'s\n [PR #30](https://github.com/dlenski/vpn-slice/pull/30) added support for IPv6 DNS\n lookups using `dig`.\n\n# License\n\nGPLv3 or later.\n\n## TODO / Help Wanted\n\n* Better error-explaining\n* Fix timing issues\n* Improve IPv6 support\n* Support OSes other than Linux and macOS\n * Other Unix-like operating systems should be pretty easy\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/dlenski/vpn-slice", "keywords": "", "license": "GPL v3 or later", "maintainer": "", "maintainer_email": "", "name": "vpn-slice", "package_url": "https://pypi.org/project/vpn-slice/", "platform": "", "project_url": "https://pypi.org/project/vpn-slice/", "project_urls": { "Homepage": "https://github.com/dlenski/vpn-slice" }, "release_url": "https://pypi.org/project/vpn-slice/0.16.1/", "requires_dist": [ "setproctitle", "dnspython", "dnspython ; extra == 'dnspython'", "setproctitle ; extra == 'setproctitle'" ], "requires_python": "", "summary": "vpnc-script replacement for easy split-tunnel VPN setup", "version": "0.16.1", "yanked": false, "yanked_reason": null }, "last_serial": 12350488, "releases": { "0.10.2": [ { "comment_text": "", "digests": { "md5": "333a2ae7cb40b44fefa49542c7f3050e", "sha256": "202d260e3fb223d204f5cc9ad154f898445f6f7129621d54ac2532d76dd7f1af" }, "downloads": -1, "filename": "vpn_slice-0.10.2.tar.gz", "has_sig": false, "md5_digest": "333a2ae7cb40b44fefa49542c7f3050e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14668, "upload_time": "2019-10-24T17:55:32", "upload_time_iso_8601": "2019-10-24T17:55:32.355365Z", "url": "https://files.pythonhosted.org/packages/ac/1a/54add4230961e4b86f7f7a5a6329ab8a079e0a3edc12e34a4a7b05520471/vpn_slice-0.10.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.11": [ { "comment_text": "", "digests": { "md5": "16608ac05fb95971639e28f3453aff54", "sha256": "31d8b85acc8bf6b78013391493a6e9a0b0d6413feee47497bb20eff8be7e4577" }, "downloads": -1, "filename": "vpn_slice-0.11.tar.gz", "has_sig": false, "md5_digest": "16608ac05fb95971639e28f3453aff54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14951, "upload_time": "2019-10-30T17:49:15", "upload_time_iso_8601": "2019-10-30T17:49:15.738783Z", "url": "https://files.pythonhosted.org/packages/e6/43/09bd39019ab05906546cec92030fa56a407c184e7eca3f9d0d6ac6502e88/vpn_slice-0.11.tar.gz", "yanked": false, "yanked_reason": null } ], "0.12": [ { "comment_text": "", "digests": { "md5": "4f2f3739d5bb26d3dcf9cc1f42ad75b2", "sha256": "65aa56fe9fe1916fab65341f58390d38c0d7ffc181279a48e63da437c8eb1af1" }, "downloads": -1, "filename": "vpn_slice-0.12.tar.gz", "has_sig": false, "md5_digest": "4f2f3739d5bb26d3dcf9cc1f42ad75b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15124, "upload_time": "2020-01-10T21:14:29", "upload_time_iso_8601": "2020-01-10T21:14:29.832260Z", "url": "https://files.pythonhosted.org/packages/95/d3/2dd75be06a887cfcd7dfd5b8a47ab3c82255a22b64e36fa3bd4fd515b391/vpn_slice-0.12.tar.gz", "yanked": false, "yanked_reason": null } ], "0.13": [ { "comment_text": "", "digests": { "md5": "9fc2f14ad62b4f66bfd04f4d1970a0ff", "sha256": "9b8dbd94687dbc2f1887534a56786677ef1756463018bab69d4ec8780666189f" }, "downloads": -1, "filename": "vpn_slice-0.13.tar.gz", "has_sig": false, "md5_digest": "9fc2f14ad62b4f66bfd04f4d1970a0ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15440, "upload_time": "2020-02-13T03:37:51", "upload_time_iso_8601": "2020-02-13T03:37:51.309477Z", "url": "https://files.pythonhosted.org/packages/08/3a/5701fcd1497c9c33a58e2dd209d1deb222eec43dabf1a3b30c589ce3bb4e/vpn_slice-0.13.tar.gz", "yanked": false, "yanked_reason": null } ], "0.14": [ { "comment_text": "", "digests": { "md5": "af881c08d4175af55eb31ab9e99549e6", "sha256": "eb5a31f80d9c3790f38f9638ee45abfbe1076f04ec5bc37b977dd63eb3a0b866" }, "downloads": -1, "filename": "vpn_slice-0.14.tar.gz", "has_sig": false, "md5_digest": "af881c08d4175af55eb31ab9e99549e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16957, "upload_time": "2020-05-04T03:22:39", "upload_time_iso_8601": "2020-05-04T03:22:39.818533Z", "url": "https://files.pythonhosted.org/packages/41/aa/c68ddd05d9ff76cf4f2f1df116aefefeeccbe9e32f9b3447bb5a933d24fe/vpn_slice-0.14.tar.gz", "yanked": false, "yanked_reason": null } ], "0.14.1": [ { "comment_text": "", "digests": { "md5": "7c73f6ac00cc339ab9d35a60aa0b55e7", "sha256": "637f3fd6ec38706d2d57444246e6770720950e57c88657028a9f64bc123c871d" }, "downloads": -1, "filename": "vpn_slice-0.14.1.tar.gz", "has_sig": false, "md5_digest": "7c73f6ac00cc339ab9d35a60aa0b55e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17546, "upload_time": "2020-05-26T20:11:25", "upload_time_iso_8601": "2020-05-26T20:11:25.431222Z", "url": "https://files.pythonhosted.org/packages/b3/da/acbc456ffe6560f0965765a79b48e45d222be63f3b0c17130067743b958b/vpn_slice-0.14.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.14.2": [ { "comment_text": "", "digests": { "md5": "fb3a0ef3d248293009d458c281fb6486", "sha256": "019c7568c0006d376732b3a1bd1e29eb23c8aa50f1ed53e2d0c80b022af5ab18" }, "downloads": -1, "filename": "vpn-slice-0.14.2.tar.gz", "has_sig": false, "md5_digest": "fb3a0ef3d248293009d458c281fb6486", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18004, "upload_time": "2020-06-11T00:40:09", "upload_time_iso_8601": "2020-06-11T00:40:09.248456Z", "url": "https://files.pythonhosted.org/packages/87/bc/30319efb66e915806bb6717852c7c5e7b1788d4c0b9f2c37a10e9be19e12/vpn-slice-0.14.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.14.3": [ { "comment_text": "", "digests": { "md5": "556ebd5e40f6c8ea0db07257ea0977ba", "sha256": "788545d9cb25625997f1e770de4340fa776d863f61edb5336f46db1c723dd181" }, "downloads": -1, "filename": "vpn-slice-0.14.3.tar.gz", "has_sig": false, "md5_digest": "556ebd5e40f6c8ea0db07257ea0977ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18239, "upload_time": "2020-09-30T20:54:39", "upload_time_iso_8601": "2020-09-30T20:54:39.471672Z", "url": "https://files.pythonhosted.org/packages/bd/95/a09241c5f86791625cdbffc369d45d83704da76a5af508a41361ad93ebed/vpn-slice-0.14.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.14.4": [ { "comment_text": "", "digests": { "md5": "d0c1d2e4043e2cebb241bb275fb33eff", "sha256": "3de8bbc2c52a185f6c182f2914b82b50ef49f580136cf6745387efee470568f4" }, "downloads": -1, "filename": "vpn-slice-0.14.4.tar.gz", "has_sig": false, "md5_digest": "d0c1d2e4043e2cebb241bb275fb33eff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18248, "upload_time": "2020-09-30T20:53:38", "upload_time_iso_8601": "2020-09-30T20:53:38.201247Z", "url": "https://files.pythonhosted.org/packages/e3/aa/9d49ece21bb549cc532f5e18642f3dbceec834e9160d0aa007ddbebf0916/vpn-slice-0.14.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.15": [ { "comment_text": "", "digests": { "md5": "378e492dee21bb7886974b83423a69a7", "sha256": "7d5133aecbed9d5696d59dcb799c3d8d30a89a08f6d36fac335f6b8357786353" }, "downloads": -1, "filename": "vpn-slice-0.15.tar.gz", "has_sig": false, "md5_digest": "378e492dee21bb7886974b83423a69a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18510, "upload_time": "2020-10-11T00:11:19", "upload_time_iso_8601": "2020-10-11T00:11:19.244276Z", "url": "https://files.pythonhosted.org/packages/22/a2/55d1f41fdc1708c0a005f5fc678b85acaa3ed5ba470a3a0410898b3a61ff/vpn-slice-0.15.tar.gz", "yanked": false, "yanked_reason": null } ], "0.16": [ { "comment_text": "", "digests": { "md5": "7687de7f5e7da4510c6c196e80aab2de", "sha256": "927c076bfc0c8f78194c8979ca4fc30f35489bf6ba7e4a942565097df3347445" }, "downloads": -1, "filename": "vpn_slice-0.16-py3-none-any.whl", "has_sig": false, "md5_digest": "7687de7f5e7da4510c6c196e80aab2de", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34577, "upload_time": "2021-12-14T18:30:54", "upload_time_iso_8601": "2021-12-14T18:30:54.612188Z", "url": "https://files.pythonhosted.org/packages/fc/0f/4fb9d49a359f69fa08f64dce9f3dd95186dd06acfca0ee32dc17697fd455/vpn_slice-0.16-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3a62614492bae643b2b6fbe97107f065", "sha256": "6d5c8d972126775181397dcc65332ec60c5b35fe1647b1022ace863589c59a12" }, "downloads": -1, "filename": "vpn-slice-0.16.tar.gz", "has_sig": false, "md5_digest": "3a62614492bae643b2b6fbe97107f065", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34890, "upload_time": "2021-12-14T18:30:56", "upload_time_iso_8601": "2021-12-14T18:30:56.000567Z", "url": "https://files.pythonhosted.org/packages/bc/79/49fc8347a51f70f4c5501f93809f4dc757729def77749cf16af6643074de/vpn-slice-0.16.tar.gz", "yanked": false, "yanked_reason": null } ], "0.16.1": [ { "comment_text": "", "digests": { "md5": "1a44851e1a3e026fc4cdf89fb7d26b25", "sha256": "21b3835b1503b541e6cf534837454dd9c9baf2677671a3981c0e2bc7c26972da" }, "downloads": -1, "filename": "vpn_slice-0.16.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1a44851e1a3e026fc4cdf89fb7d26b25", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34621, "upload_time": "2021-12-19T00:05:35", "upload_time_iso_8601": "2021-12-19T00:05:35.157955Z", "url": "https://files.pythonhosted.org/packages/87/2f/b3d54d272ade85773750c15af0419586b95fc7a8342c49dfd1ad6cfd711b/vpn_slice-0.16.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "deb7ed135c6fad8f8b78d967e7f6e241", "sha256": "28d02dd1b41210b270470350f28967320b3a34321d57cc9736f53d6121e9ceaa" }, "downloads": -1, "filename": "vpn-slice-0.16.1.tar.gz", "has_sig": false, "md5_digest": "deb7ed135c6fad8f8b78d967e7f6e241", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34925, "upload_time": "2021-12-19T00:05:36", "upload_time_iso_8601": "2021-12-19T00:05:36.399948Z", "url": "https://files.pythonhosted.org/packages/74/fd/6c9472e8ed83695abace098d83ba0df4ea48e29e7b2f6c77ced73b9f7dce/vpn-slice-0.16.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9": [ { "comment_text": "", "digests": { "md5": "a0024f792065185c09baae8c0ddfbfbd", "sha256": "e92179ab28ce1fc9fbceb765e12e32886fc4d603f262f53e0367a620a5dab411" }, "downloads": -1, "filename": "vpn_slice-0.9.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "a0024f792065185c09baae8c0ddfbfbd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25336, "upload_time": "2019-05-26T23:10:02", "upload_time_iso_8601": "2019-05-26T23:10:02.880137Z", "url": "https://files.pythonhosted.org/packages/94/37/889a36f42e92d089f7d62245f8451044bf8f877b6517db65b8dd39b75e6f/vpn_slice-0.9.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "d59b474279d3776d88d7767312c6f455", "sha256": "e37def20629d404a82b5bf6d2385c4d5961590a945f2a63075f8f186f7e79564" }, "downloads": -1, "filename": "vpn_slice-0.9.1.tar.gz", "has_sig": false, "md5_digest": "d59b474279d3776d88d7767312c6f455", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14112, "upload_time": "2019-05-29T00:07:11", "upload_time_iso_8601": "2019-05-29T00:07:11.764129Z", "url": "https://files.pythonhosted.org/packages/33/d1/4f6329efc573266becd2bf4d8e84bf6c4098fde4798fe6458a87dc233934/vpn_slice-0.9.1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1a44851e1a3e026fc4cdf89fb7d26b25", "sha256": "21b3835b1503b541e6cf534837454dd9c9baf2677671a3981c0e2bc7c26972da" }, "downloads": -1, "filename": "vpn_slice-0.16.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1a44851e1a3e026fc4cdf89fb7d26b25", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34621, "upload_time": "2021-12-19T00:05:35", "upload_time_iso_8601": "2021-12-19T00:05:35.157955Z", "url": "https://files.pythonhosted.org/packages/87/2f/b3d54d272ade85773750c15af0419586b95fc7a8342c49dfd1ad6cfd711b/vpn_slice-0.16.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "deb7ed135c6fad8f8b78d967e7f6e241", "sha256": "28d02dd1b41210b270470350f28967320b3a34321d57cc9736f53d6121e9ceaa" }, "downloads": -1, "filename": "vpn-slice-0.16.1.tar.gz", "has_sig": false, "md5_digest": "deb7ed135c6fad8f8b78d967e7f6e241", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34925, "upload_time": "2021-12-19T00:05:36", "upload_time_iso_8601": "2021-12-19T00:05:36.399948Z", "url": "https://files.pythonhosted.org/packages/74/fd/6c9472e8ed83695abace098d83ba0df4ea48e29e7b2f6c77ced73b9f7dce/vpn-slice-0.16.1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }