1

ここ数時間は本当に進展がないので、解決できない問題について相談する必要があります。Win CE 5.0アプリケーションがあります。これは、RASDialを使用してVPNにダイヤルインするC#/ CompactFrmaework2.0で記述されています。現在PPTPを使用していますが、プレシャードキーを使用してL2TPに変更する必要があります。しかし、正直なところ、私はC ++の経験がなく、コードの半分しか理解していません。より明確に言うと、MSDNのRASAPIとドキュメントを理解していません。このL2PTRASエントリの作成方法とダイヤル方法は理解していますが、事前共有キーをどこでどのように設定するかは理解できません。私たちのコードが原則として行うのと同じことをしているように見えるコードの平和を見つけましたが、ウェブサイト/ボードで、これは事前共有キーを使用していると著者が言っていることがわかりましたが、正直なところ、キーがどこにあるのかわかりません。

(...)

// Device configuration for L2TP VPN 
if (bIsL2TP) { 
    DWORD cbKey = 0; 
    if (g_sharedKey) { 
        cbKey = (wcslen(g_sharedKey))*sizeof(WCHAR); 
    } 
    pL2TPConfigData = (PL2TP_CONFIG_DATA)new BYTE 
[sizeof(L2TP_CONFIG_DATA)+ cbKey]; 


    ZeroMemory(pL2TPConfigData, sizeof(L2TP_CONFIG_DATA)+ cbKey); 
    pL2TPConfigData->dwVersion = 1; 
    pL2TPConfigData->dwAuthType = L2TP_IPSEC_AUTH_PRESHAREDKEY; 
    pL2TPConfigData->dwFlags = 0; 
    pL2TPConfigData->cbKey = cbKey; 
    pL2TPConfigData->dwOffsetKey = sizeof(L2TP_CONFIG_DATA); 
    pL2TPConfigData->cMyCerts = 0; 
    pL2TPConfigData->cRootCerts = 0; 
    pL2TPConfigData->dwOffsetCertHashes = sizeof(L2TP_CONFIG_DATA); 
    if (g_sharedKey) { 
        memcpy((PBYTE)pL2TPConfigData+pL2TPConfigData->dwOffsetKey, 
g_sharedKey, cbKey); 
    } 
    pConfigData = (PBYTE)pL2TPConfigData; 
    cbConfigData = sizeof(L2TP_CONFIG_DATA) + cbKey; 
} 


(...) 


// Create a new phone-book entry. 
res = ::RasSetEntryProperties(NULL, g_entryName, &rasEntry, sizeof 
(rasEntry), pConfigData, cbConfigData); 
if (res != 0) { 
    wprintf(L"Cannot create or update the phone book entry (error# %u). 
Aborting.", res); 
    goto exit; 
} 

コードでは、キーの長さ(cbKey)が決定されていますが、実際のキーがコード内のどこにあるかを誰かが説明できますか?または、誰かがL2TPのRASEntryで事前共有キーを設定する方法について説明してくれますか?

どうもありがとう

twickl

4

1 に答える 1

1

事前共有キーはL2TP_CONFIG_DATA、次の行で構造にコピーされます。

memcpy((PBYTE)pL2TPConfigData+pL2TPConfigData->dwOffsetKey, g_sharedKey, cbKey);

基本的に、この行は「 からのデータをインスタンスにコピーg_sharedKeypL2TPConfigData、 のオフセットから開始してpL2TPConfigData->dwOffsetKeycbKey

コードはこれをifブロックにラップするため、g_sharedKey が NULL の場合、このコピーは行われません。

于 2012-03-14T13:42:17.237 に答える