基本的な Cisco VPN クライアント (v.5 だと思います) を使用しています。特定のプロファイル(またはそのプロファイル)が接続されているかどうかをプログラムで判断する方法はありますか?
私はどういうわけかクライアント自体からステータスを取得しようとしています。応答があるかどうかを確認するために、VPN の反対側の IP に対して ping を実行する必要はありません。
実際には、APIを使用せずにいくつかの方法があります(私はまだ見つけることができません/ DL)
最も簡単な方法の1つは、次の場所にあるレジストリ設定を確認することです。HKEY_LOCAL_MACHINE \ SOFTWARE \ Cisco Systems \ VPN Client \ AllAccess \ TunnelEstablished(0または1)
もう1つの方法は、ManagementObjectSearcherを使用して確立したネットワークインターフェイスの名前で検出することです。以下のサンプルコードを参照してください。
ManagementObjectSearcher query = null;
try { query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'"); }
catch (Exception ex)
{
}
// "native code call stack error"
try { queryCollection = query.Get(); }
catch (Exception ex)
{
}
int i = 0;
try
{
foreach (ManagementObject mo in queryCollection)
{
MojPopisDostupnih[i] = mo["Description"].ToString();
// networksListBox.Items.Add(mo["Description"].ToString());
i = i + 1;
}
for (int j = 0; j <= MojPopisDostupnih.Length - 1; j++)
{
if (MojPopisDostupnih[j] != null)
{
if (MojPopisDostupnih[j].IndexOf("Cisco Systems VPN Adapter") != -1)
{ }
else
{ }
}
}
}
catch (Exception ex)
{
}
さらに別の方法は、process.startを使用して「vpnclientstat」のCLI(コマンドライン)を実行し、標準出力をアプリの文字列ビルダーにリダイレクトしてから、文字列に適切なデータが含まれているかどうかを確認することです。これについて詳しくは、こちらをご覧ください。 :
Cisco VPN用の API (vpnapi.dll) があります。
「diciu」が書いたように、システム構成フレームワークを照会できます。彼が与えたscutilコマンドのプログラム上の同等物は次のようなものです
#import <SystemConfiguration/SystemConfiguration.h>
- (void)printPrimaryService {
SCDynamicStoreRef dynamicStoreDomainState = SCDynamicStoreCreate(NULL,
CFSTR("myApplicationName"),
NULL,
NULL);
if (dynamicStoreDomainState) {
NSString *netIPv4Key = [NSString stringWithFormat:@"%@/%@/%@/%@",
kSCDynamicStoreDomainState,
kSCCompNetwork,
kSCCompGlobal,
kSCEntNetIPv4];
NSMutableDictionary *netIPv4Dictionary = (NSMutableDictionary *) SCDynamicStoreCopyValue(dynamicStoreDomainState, (CFStringRef)netIPv4Key);
if (netIPv4Dictionary ) {
NSString *primaryService = [netIPv4Dictionary objectForKey:(NSString *)kSCDynamicStorePropNetPrimaryService];
if (primaryService) {
NSLog(@"primary service = \"%@\"\n", primaryService); /* When the Cisco VPN is active, I get "com.cisco.VPN" here */
}
[netIPv4Dictionary release];
}
CFRelease(dynamicStoreDomainState);
}
}
上記を使用して、CiscoVPNクライアントが接続されているかどうかを確認できます。次に、VPN接続に関連付けられたDNSサーバーを取得するのと同様のことを行うことができます。結果のDNSサーバーを会社のDNSサーバーと比較して、会社にVPN接続されているかどうかを確認します。不格好ですが、動作し、高速です。pingがタイムアウトするのを待つ必要はありません。
Cisco VPN Clientの最新バージョンでは、CiscoがAPIを公開していることに注意してください。残念ながら、これはMicrosoftWindows専用です。多分彼らはいつかMac用のものを作るでしょう。