Warm tip: This article is reproduced from serverfault.com, please click

其他-使用配置文件通过OpenVPN与Python连接

(其他 - Connecting through openVPN with Python using config file)

发布于 2020-01-22 15:36:58

我正在尝试从在另一个国家/地区运行的计算机收集数据。在Linux终端上,我可以使用带有.ovpn文件的openVPN进行连接。但是,要进行自动API调用,我想使用Python。

有没有一种方法可以通过Python连接并从.opvn文件获取连接详细信息?有点类似于SSHForwarder。

像这样的东西:

from openvpn_api import VPN
v = VPN('199.249.9.9', 1194)
with v.connection():
    print(v.release)

非常感激!

罗格

Questioner
Rutger
Viewed
0
Mikhail S 2020-12-25 21:37:42

你可以通过来从脚本中运行控制台命令subprocess.run(args, stdout=PIPE, stderr=PIPE, universal_newlines=True)

Args应该是这样的列表: ['sudo', '/usr/local/sbin/openvpn', '--config', home + '/path/to/config.ovpn']

例如:

import subprocess, os

home = os.environ["HOME"]
args = [
'sudo',
'/Mike/local/sbin/openvpn',
'--config',
home + '/Mike/Downloads/office.ovpn'
    ]
r = subprocess.run(args, stdout=PIPE, stderr=PIPE, universal_newlines=True)
...
# your code which needs to be connected to openvpn
...
# kill connection
r.stdout

另一种简便的方法是使用subprocess.Popen():

import subprocess, psutil

# define function to kill connection
def kill(proc_pid):
    process = psutil.Process(proc_pid)
    for proc in process.children(recursive=True):
        proc.kill()
    process.kill()

# use shell command to connect openvpn
r = subprocess.Popen(shell_command, shell=True)

...
# your code
...

# kill connection
kill(r.pid)