web-dev-qa-db-ja.com

VPNの実行中にプログラムが強制終了されたことを確認するにはどうすればよいですか?

VPNが実行されているときはいつでもnot実行する必要があるプログラムがあります。いつか忘れてしまうかもしれないので、毎回手動で閉じることに頼りたくありません。

それらが同時に実行されていないことを保証したいと思います。これは、もう一方が開始したときに一方を強制終了するか、もう一方が開いているときに一方が開かないようにすることを意味します。

1
Hatshepsut

VPNの実行中にアプリケーションが実行されないようにするオプション

VPNの実行中にアプリケーションが実行されないようにするためのいくつかのオプションがあります。

  • VPNを開くコマンドとアプリケーションを強制終了するコマンドを組み合わせる
  • VPNが実行された場合は、小さなバックグラウンドスクリプトを実行して、アプリケーションを強制終了します

最初のオプションが最もクリーンなようですが、2番目のオプションを選択する理由はいくつかあります。

  • VPNが起動するたびにアプリケーションが強制終了される可能性は十分にありますが、それでもアプリケーションが後で誤って実行されるのを防ぐことはできません。
  • GUIからVPNを開始すると述べているので、VPNの開始方法を変更して、アプリケーションの強制終了と組み合わせる必要があります。

だから...

アプリケーションがVPNと同時に実行されていないことを確認するための小さなバックグラウンドスクリプトの下。

VPNが実行されているかどうかを確認する方法

VPNが実行されているかどうかを確認するために、回答は文字列<OpenVPNserver>がコマンドの出力に存在するかどうかを確認します。

route

か否か。最初にこれが当てはまるかどうかを確認してください。そうでない場合は、別の識別文字列を見つける必要があります。

スクリプトのしくみ

  • スクリプトは、2秒に1回、次の出力にsctring <OpenVPNserver>が含まれているかどうかを確認することにより、VPNが実行されているかどうかを確認します。

    route
    
  • (のみ)その場合、スクリプトは次のコマンドを使用して、アプリケーションが実行されているかどうかを確認します。

    pgrep <application>
    

    もしそうなら、コマンドでそれを殺します:

    kill <pid>
    

スクリプト

#!/usr/bin/env python3
import subprocess
import sys
import time

app = sys.argv[1]

def check_ifrunning():
    # check if connection is up or down
    get_routeinfo = subprocess.check_output(["route"]).decode("utf-8")
    if "<OpenVPNserver>" in get_routeinfo:
        try:
            pid = subprocess.check_output(["pgrep", app]).decode("utf-8").strip()
            subprocess.Popen(["kill", pid])
        except subprocess.CalledProcessError:
            pass

while True:
    time.sleep(2)
    check_ifrunning()

使い方

  1. 最初に端末を開き、慣れているようにVPNを実行して、コマンドの出力に文字列<OpenVPNserver>が含まれているかどうかを確認します

    route
    
  2. その場合は、上記のスクリプトを空のファイルにコピーし、prevent_run.pyとして保存します。

  3. 次のコマンドを使用してスクリプトをテスト実行します。

    python3 /path/to/prevent_run.py <processname>
    

    (たとえば、コマンドpython3 /home/jacob/Bureaublad/prevent_run.py geditを使用してテストしました)

  4. すべてが正常に機能する場合は、スタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加。次のコマンドを追加します。

    python3 /path/to/prevent_run.py <processname>
    

注意

いつものように(そしてそうあるべきですが)、スクリプトは非常に軽量です。目立った「バックグラウンドノイズ」はまったく追加されません。

2
Jacob Vlijm