1

キャプティブ ポータルがインターネット接続 (コーヒー ショップに接続されたラップトップなど) で使用されていることを検出しようとしています。

Network List Manager COM オブジェクトを使用してこれを達成しようとしています:

NETWORKLIST.NetworkListManager _networkListManager = new NetworkListManager();
foreach (INetworkConnection net in _networkListManager.GetNetworkConnections())
{                
    if (net.GetConnectivity().HasFlag(NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_INTERNET) == true)
      {
           // Check if we are connected by a captive web portal
           // using NLM_INTERNET_CONNECTIVITY_WEBHIJACK
      }                                
 }

ここのドキュメントによると: http://msdn.microsoft.com/en-us/library/windows/desktop/aa370750(v=vs.85).aspx

「これらの接続フラグは、INetwork または INetworkConnection インターフェイスの IPropertyBag インターフェイスを使用して NA_InternetConnectivityV4 または NA_InternetConnectivityV6 プロパティを照会することで取得できます」

NA_InternetConnectivityV4 列挙が存在しない (不完全な実装) か、それらの操作方法がわかりません。

誰かが実際にこれを使用したり、キャプティブポータルが使用されていることを検出する方法についてアイデアを持っていますか?

4

2 に答える 2

1

これは C# ではありませんが、これらの API は C++ で動作することがわかりました

pNetworkListManager->GetNetworks (NLM_ENUM_NETWORK_CONNECTED, &pEnum) INetwork *pINetwork;

//Should actually loop through the possible networks.
HRESULT hr = pEnum->Next(1, &pINetwork, nullptr);

IPropertyBag *pNetworkPropertyBag;
HRESULT hrQueryInterface = pINetwork->QueryInterface(IID_IPropertyBag, (LPVOID*)&pNetworkPropertyBag);
if (SUCCEEDED(hrQueryInterface 1) && pNetworkPropertyBag != nullptr)
{
    NLM_CONNECTIVITY networkConnectivity;
    VARIANT variantConnectivity;

    if (SUCCEEDED(pINetwork->GetConnectivity(&networkConnectivity)))
    {
        if ((networkConnectivity & 
        NLM_CONNECTIVITY_IPV4_INTERNET) == NLM_CONNECTIVITY_IPV4_INTERNET)
        {
            VariantInit(&variantConnectivity);
            if (SUCCEEDED(pNetworkPropertyBag->Read(NA_InternetConnectivityV4, &variantConnectivity, nullptr)) && (V_UINT(&variantConnectivity) & NLM_INTERNET_CONNECTIVITY_WEBHIJACK) == NLM_INTERNET_CONNECTIVITY_WEBHIJACK)
            {
                //Captive Portal detected
            }
            VariantClear(&variantConnectivity);
    }
}

詳細については、http: //www.codeproject.com/Articles/1088221/Captive-Portal-Detection-with-Windows-APIsを確認してください。

于 2016-03-29T04:25:45.357 に答える
0

これを締めくくると、調査の結果、NA_InternetConnectivityV4 列挙が存在せず、MSDN のドキュメントが正しくないことがわかりました。

于 2013-12-10T09:00:21.297 に答える