V2Net is a network assistant tool for macOS.
Some popular network tools are integrated, with the ability of adding new extensions without coding:
This is an alpha version.
System tray menu:
Show whistle dashboard page in built-in browser:
(If only you want to use the integrated whistle extension,) Node.js is needed.
Install Node.js with Homebrew:
brew install node
# or:
# brew install node@8
Or download installer from https://nodejs.org/en/
Download latest release:
https://github.com/deepjia/v2net/releases
Unpack and drag V2Net.app
to Application
folder.
Example of profile.ini
[General]
skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local, ::ffff:0:0:0:0/1, ::ffff:128:0:0:0/1
# proxy/bypass/capture: extensions selected last time
proxy = ✈️Beijing
bypass = 🚄Privoxy
capture =
# system: whether V2Net is set as system proxy last time
system = false
Port = 8014
InnerPortProxy = 8114
InnerPortBypass = 8214
[Proxy]
# The order of values is defined in "keys" field of extension.json in extension folders
# name = extension_name, *values
✈️Beijing = ss, server_ip, 12345, chacha20-ietf-poly1305, password, 60, true
🇨🇳Shenzhen = vmess, example.org, 443, /ws, uuid
🇨🇳Hangzhou = gost, ss, chacha20:password@server_ip, 12345
🇯🇵Tokyo = gost, socks5, server_ip, 12345
🇺🇸Denver = gost, http, server_ip, 12345
[Bypass]
# Same as proxy, privoxy preferred
🚄Privoxy = privoxy, , 127.0.0.1, , privoxy.txt
#🚄Gost = gost, , 127.0.0.1, , gost.txt
[Capture]
# Same as proxy
🛠️Whistle = whistle
Remember to backup config before manual upgrade.
-
Open
Extension Folder
-
Enter/Create specific
Extension Directroy
-
Modify/Create
extension.json
bin: Main binary of extensions.
args: Arguments for binary to start with.
url: Dashboard url for capture extension.
exitargs: Arguments for binary to quit with.(If left blank, binary process will be stopped when stopping the extension)
keys: Keys to render by jinja2, whose values are in
profile.ini
http: Whether the extension serve as a http proxy.
socks5: Whether the extension serve as a socks5 proxy
render: Render the template files in
Extension Directroy
default: Default vaules to render.
{ "bin": "./extension/myext/bin/mybinary", "args": "-p {{ ExtensionPort }} -c ./extension/myext/myconfig.ini", "url": "http://127.0.0.1:{{ ExtensionPort }}", "exitargs": "", "keys": ["ServerProtocol", "ServerAddress", "SeverPort", "ServerPassword"], "http": false, "socks5": true, "render": {"mytemplate.jinja": "myconfig.ini"}, "default": {"ServerAddress":"example.com"} }
jinja2 is used as render engine, which render {{ key }} as values from the
profile.ini
as well as from default values, which also supports logic causes like {{% if %}} {{% endif %}}.Specially:
- {{ ExtensionPort }} will always be rendered as the proper value depending on your settings in
profile.ini
- If an extension is running as a secondary proxy, {{ ServerPort }} and {{ ServerProtocol }} will be automatically rendered as
http
orsocks5
when left blank.
brew install python git clone https://github.com/deepjia/v2net.git python3 -m venv venv source venv/bin/activate pip install -r requirements.txt python setup.py py2app
- {{ ExtensionPort }} will always be rendered as the proper value depending on your settings in