python - 用于 vpn 连接的 python 上下文管理器
问题描述
我正在尝试为 vpn 连接制作一个非常简单的上下文管理器。
我的要求如下:
- 极其简单的上下文管理器 API
- 跨平台
- 完全通过安装
pip
(不需要sudo apt-get install blah
,yay blah
, 或者去这个网站下载和运行40个命令类型的东西)
我知道openvpn-api python 包,但它似乎(至少对我来说)不支持典型的配置文件 (*.ovpn),这是我对大多数用户在建立一个(例如)docker 容器上的 VPN。
我的过程是让用户有一个可选的能力来在 git repo 中创建一个*.ovpn
文件和一个auth-user-pass
文件,这样(如果他们添加这些文件)包将通过他们的 vpn 运行脚本的各个部分。
这是我到目前为止所尝试的:
import subprocess
import sys
with subprocess.Popen(["openvpn", "--config", "my_vpn_config.ovpn"]) as vpn_proc:
# Do some stuff here, while running all networking though the VPN connection
# This is unnecessary to the program
# - just my way of checking that the connection is being used
# - (Unfortunately, it does not appear to be running anything through the vpn)
with subprocess.Popen(["speedtest"], stdout=subprocess.PIPE) as test_proc:
print(p1.stdout.read())
# Unfortunately, the context manager doesn't seem to
# handle the process closing, or provide a SIGINT/TERM to the process
# So, we just use this `kill()` function here at the end
# of the context manager, out of desperation
vpn_proc.kill()
我知道我在这里犯了多个错误——至少是以下几点:
subprocess.Popen(["openvpn"])
不是( iirc)平台独立的。1a)此外,openvpn
作为程序的使用需要在外部安装pip
- 我强烈反对要求用户- 上下文管理器不处理 openvpn 进程的终止
- VPN 实际上似乎并未用于任何互联网流量
我之前设置了一些自定义上下文管理器,但是由于使用了子进程,这对我来说似乎有点回避。
我愿意使用类似openvpn-api
包装的东西,只要它适合。不幸的是,我只是不明白如何正确使用其中一些工具
也许有人对此有更简单的建议?
解决方案
推荐阅读
- haskell - Haskell 定义数据类型
- php - Http 到 https 错误“ERR_TOO_MANY_REDIRECTS”
- python - 如何迭代 cython(或 numba)中的列表列表?
- html - How to make a text disapper under an image, after scrolling it up?
- node.js - sequelize-cli 在哪里保存种子列表?
- linux - Postgresql - 显示 INTEGER、BIGINT 的用法
- microsoft-graph-toolkit - c#和js之间的登录组合 Msal-provider
- pandas - 基于特定条件的 Pandas 中的 Groupby 累积总和
- java - 使用带有 Node.js 的 aws-secretsmanager-jdbc 连接到 RDS?
- javascript - JS 中的范围导出