openWrt上freeradius的4路握手失败?

openWrt上freeradius的4路握手失败?,openwrt,freeradius,Openwrt,Freeradius,我使用openWrt上的freeradius服务器获取sim IMSI。因为我确实有一些sim值rand,sres,kc,所以我更改了源代码使用假值。可以成功地对其进行身份验证。但是在4路握手的过程中,它失败了!只需要一次握手 我用wireshark捕获了一些包,谁能帮我分析原因,或者有更好的方法在openWrt上获取imsi eap sim认证过程 第1次握手,共4次 我找到了原因! 一开始,我没有sim值rand、sres、kc,所以我创建了一些伪值。代码需要正确的msk值来构建PMK包,如

我使用openWrt上的freeradius服务器获取sim IMSI。因为我确实有一些sim值rand,sres,kc,所以我更改了源代码使用假值。可以成功地对其进行身份验证。但是在4路握手的过程中,它失败了!只需要一次握手

我用wireshark捕获了一些包,谁能帮我分析原因,或者有更好的方法在openWrt上获取imsi

eap sim认证过程

第1次握手,共4次

我找到了原因! 一开始,我没有sim值rand、sres、kc,所以我创建了一些伪值。代码需要正确的msk值来构建PMK包,如下所示:

static int eap_sim_sendsuccess(EAP_HANDLER *handler)
{
    unsigned char *p;
    struct eap_sim_server_state *ess;
    VALUE_PAIR **outvps;
    VALUE_PAIR *newvp;

    /* outvps is the data to the client. */
    outvps= &handler->request->reply->vps;
    ess = (struct eap_sim_server_state *)handler->opaque;

    /* set the EAP_ID - new value */
    newvp = paircreate(ATTRIBUTE_EAP_ID, PW_TYPE_INTEGER);
    newvp->vp_integer = ess->sim_id++;
    pairreplace(outvps, newvp);

    p = ess->keys.msk;   //**look here**!
    add_reply(outvps, "MS-MPPE-Recv-Key", p, EAPTLS_MPPE_KEY_LEN);
    p += EAPTLS_MPPE_KEY_LEN;
    add_reply(outvps, "MS-MPPE-Send-Key", p, EAPTLS_MPPE_KEY_LEN);
    return 1;
}
因此,它构建了一个错误的PMK包。手机收到了四分之一的握手,然后就掉了下来