VPN接続があります。VPN接続を確立するには、実行する必要のあるPPTP.bkファイルがあります。このファイルを実行して資格情報を入力すると、VPN接続が確立されます。
プログラムでVPN接続を接続および切断しようとしています。問題は、WindowsにVPN接続が作成されていないため、いつでもVPN接続を確認できる必要があり、存在しない場合はVPN接続を確立する必要があります。
VPN接続があります。VPN接続を確立するには、実行する必要のあるPPTP.bkファイルがあります。このファイルを実行して資格情報を入力すると、VPN接続が確立されます。
プログラムでVPN接続を接続および切断しようとしています。問題は、WindowsにVPN接続が作成されていないため、いつでもVPN接続を確認できる必要があり、存在しない場合はVPN接続を確立する必要があります。
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!");
}
}
}
}
わずかな変更-これは私のために働いたコードです。
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;
}
私のネットワークドライバにはCisco
、説明テキストがありました。これは、ほんの数行の最新バージョンです。
public static class VPNCheck
{
public static bool IsOn()
{
return ((NetworkInterface.GetIsNetworkAvailable())
&& NetworkInterface.GetAllNetworkInterfaces()
.FirstOrDefault(ni => ni.Description.Contains("Cisco"))?.OperationalStatus == OperationalStatus.Up);
}
}
私にとってこれは役に立ちましたが、すべてのインターフェイスをループした後、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;
}
}
}
}
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");
}