Подключение через openVPN с Python с использованием файла конфигурации

Я пытаюсь собрать данные с компьютера, работающего в другой стране. С терминалом Linux я могу использовать openVPN с файлом .ovpn для подключения. Однако для автоматических вызовов API я хочу использовать Python.

Есть ли способ подключиться через Python и получить информацию о подключении из файла .opvn? Немного похоже на SSHForwarder.

Что-то вроде этого:

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

Очень признателен!

Рутгер


person Rutger    schedule 22.01.2020    source источник


Ответы (1)


Вы можете просто запустить консольную команду из своего скрипта с помощью 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)
person Mikhail S    schedule 25.12.2020
comment
Мне нравится это решение, не думал об этом! Спасибо! - person Rutger; 29.12.2020