12

VPN接続があります。VPN接続を確立するには、実行する必要のあるPPTP.bkファイルがあります。このファイルを実行して資格情報を入力すると、VPN接続が確立されます。

プログラムでVPN接続を接続および切断しようとしています。問題は、WindowsにVPN接続が作成されていないため、いつでもVPN接続を確認できる必要があり、存在しない場合はVPN接続を確立する必要があります。

4

5 に答える 5

26

NetworkInterfaceクラスを使ってVPN接続状態を確認しています。この目標のために私が書いたコードは次のとおりです。

if (NetworkInterface.GetIsNetworkAvailable())
{
    NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
    foreach (NetworkInterface  Interface in interfaces)
    {
        if (Interface.OperationalStatus == OperationalStatus.Up)
        {
            if ((Interface.NetworkInterfaceType == NetworkInterfaceType.Ppp) && (Interface.NetworkInterfaceType != NetworkInterfaceType.Loopback))
            {
                IPv4InterfaceStatistics statistics = Interface.GetIPv4Statistics();
                MessageBox.Show(Interface.Name + " "  + Interface.NetworkInterfaceType.ToString() + " " + Interface.Description);
            }
            else
            {
                MessageBox.Show("VPN Connection is lost!");
            }
        }
    }
}
于 2012-09-01T16:45:54.777 に答える
8

わずかな変更-これは私のために働いたコードです。

public bool CheckForVPNInterface()
    {
        if (NetworkInterface.GetIsNetworkAvailable())
        {
            NetworkInterface[] interfaces = 
NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface Interface in interfaces)
            {
                // This is the OpenVPN driver for windows. 
                if (Interface.Description.Contains("TAP-Windows Adapter")
                  && Interface.OperationalStatus == OperationalStatus.Up)
                {
                        return true;
                }
            }
        }
        return false;
    }
于 2017-08-17T17:47:26.290 に答える
4

私のネットワークドライバにはCisco、説明テキストがありました。これは、ほんの数行の最新バージョンです。

public static class VPNCheck
{
    public static bool IsOn()
    {
        return ((NetworkInterface.GetIsNetworkAvailable())
                && NetworkInterface.GetAllNetworkInterfaces()
                                   .FirstOrDefault(ni => ni.Description.Contains("Cisco"))?.OperationalStatus == OperationalStatus.Up);
    }
}
于 2019-09-28T01:42:21.913 に答える
0

私にとってこれは役に立ちましたが、すべてのインターフェイスをループした後、UPしているインターフェイスを見つけたら、特定のVPN名を確認したいと思いました...

            if (NetworkInterface.GetIsNetworkAvailable())
            {
                NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
                foreach (NetworkInterface Interface in interfaces)
                {
                    if (Interface.OperationalStatus == OperationalStatus.Up)
                    {
                        if (Interface.Description.Contains("VPN_Name"))
                        {
                            connected = true;
                            break;
                        }                           
                    }
                }
            }
于 2020-06-04T07:55:29.457 に答える
-1

VPN接続が存在し、問題がない場合は、常に「<strong>tun0」という名前のネットワークインターフェイスが見つかります。したがって、NetworkInterfaceと同じアプローチを使用して、単純なコードを記述しました。

public static boolean isVpnOk(){
    List<String> networks = new ArrayList<>();
    try {
        for (NetworkInterface networkInterface : Collections.list(NetworkInterface.getNetworkInterfaces())) {
            if (networkInterface.isUp()) networks.add(networkInterface.getName());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return networks.contains("tun0");
}
于 2020-08-24T12:40:54.470 に答える