【问题标题】:Connecting through openVPN with Python using config file使用配置文件通过 Python 连接 openVPN
【发布时间】:2020-12-25 21:37:42
【问题描述】:

我正在尝试从在另一个国家/地区运行的计算机收集数据。使用 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)

非常感谢!

罗格

【问题讨论】:

    标签: python python-3.x openvpn


    【解决方案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)
    

    【讨论】:

    • 我喜欢这个解决方案,没想到!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    相关资源
    最近更新 更多