void on_button_exit_clicked ()
{
    if (state == READY)
        on_program_quit();
    else
        send_eap_packet (EAPOL_LOGOFF);
}
示例#2
0
int main(int argc, char **argv)
{
    int ins_pid;

    init_arguments (&argc, &argv);

    //打开锁文件
    lockfile = open (LOCKFILE, O_RDWR | O_CREAT , LOCKMODE);
    if (lockfile < 0){
        perror ("Lockfile");
        exit(EXIT_FAILURE);
    }

    if ( (ins_pid = program_running_check ()) ) {
        fprintf(stderr,"@@ERROR: zRuijie Already "
                            "Running with PID %d\n", ins_pid);
        exit(EXIT_SUCCESS);
    }
    init_info();
    init_device();
    init_frames ();

    signal (SIGINT, signal_interrupted);
    signal (SIGTERM, signal_interrupted);
    signal (SIGALRM, signal_alarm);

    show_local_info();

    send_eap_packet (EAPOL_START);
    alarm(5);

	pcap_loop (handle, -1, get_packet, NULL);   /* main loop */
    pcap_close (handle);
    return 0;
}
示例#3
0
static void
signal_interrupted (int signo)
{
    extern int exit_flag;
    if (exit_flag)
        exit (EXIT_SUCCESS);
    exit_flag = 1;
    fprintf(stdout,"\n&&Info: Interrupted. \n");
    send_eap_packet(EAPOL_LOGOFF);
}
void
action_eap_req_md5_chg(const struct eap_header *eap_head,
                        const struct pcap_pkthdr *packetinfo,
                        const uint8_t *packet)
{
    state = ID_AUTHED;

    fprintf(stdout, ">>Protocol: REQUEST MD5-Challenge(PASSWORD)\n");
    fill_password_md5((uint8_t*)eap_head->eap_md5_challenge, eap_head->eap_id);
    eap_response_md5ch[0x13] = eap_head->eap_id;
    send_eap_packet(EAP_RESPONSE_MD5_CHALLENGE);
}
void* 
keep_alive(void *arg)
{
    while (1) {
        ruijie_int32_to_byte (eap_life_keeping + 0x18, 
                                htonl (ruijie_live_serial_num + ruijie_succes_key));

        ruijie_int32_to_byte (eap_life_keeping + 0x22, 
                                htonl (ruijie_live_serial_num));
        ++ruijie_live_serial_num;
        send_eap_packet (EAP_RESPONSE_IDENTITY_KEEP_ALIVE);
        sleep (30);
    }
    return (void*)0;
}
void
action_eap_req_idnty(const struct eap_header *eap_head,
                        const struct pcap_pkthdr *packetinfo,
                        const uint8_t *packet)
{
    extern int          exit_flag;

    if (state == STARTED){
        fprintf(stdout, ">>Protocol: REQUEST EAP-Identity\n");
    }
    if (exit_flag)
        return;
    eap_response_ident[0x13] = eap_head->eap_id;
    send_eap_packet(EAP_RESPONSE_IDENTITY);
}
DWORD WINAPI eap_thread()
{
    extern pcap_t *handle;
    extern char    devname[];
    
    init_device();
    init_frames ();
    send_eap_packet (EAPOL_START);
    pcap_loop (handle, -1, get_packet, NULL);   /* main loop */
    pcap_close (handle);

    memset (devname, 0, MAX_DEV_NAME_LEN);
    update_interface_state(NULL);
    return 0;
}
示例#8
0
文件: drcom.c 项目: huntxu/projects
void error_handle(int sig)
{
    if ( sig == -2 ) {
        fprintf(stderr, "an error occured, exiting\n");
    }
    else {
        fprintf(stdout, "user interrupted\n");
    }

    if (dhcp == 1) {
        if ( system(dhclientreleasecmd) == -1 ) {
            fprintf(stderr, "error while releasing dhcp\n");
        }
    }
    if (state == ONLINE) {
        send_eap_packet(EAPOL_LOGOFF);
    }
    pcap_breakloop(handle);
    return;
}
示例#9
0
/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  action_by_eap_type
 *  Description:  根据eap报文的类型完成相关的应答
 * =====================================================================================
 */
void 
action_by_eap_type(enum EAPType pType, 
                        const struct eap_header *header,
                        const struct pcap_pkthdr *packetinfo,
                        const uint8_t *packet) {
//    printf("PackType: %d\n", pType);
    switch(pType){
        case EAP_SUCCESS:
            state = ONLINE;
            fprintf(stdout, ">>Protocol: EAP_SUCCESS\n");
            fprintf(stdout, "&&Info: Authorized Access to Network. \n");
            print_server_info (packet, packetinfo->caplen);
            if (background){
                background = 0;         /* 防止以后误触发 */
                daemon_init();
            }
            break;
        case EAP_FAILURE:
            state = READY;
            fprintf(stdout, ">>Protocol: EAP_FAILURE\n");
            if(state == ONLINE){
                fprintf(stdout, "&&Info: SERVER Forced Logoff\n");
            }
            if (state == STARTED){
                fprintf(stdout, "&&Info: Invalid Username or Client info mismatch.\n");
            }
            if (state == ID_AUTHED){
                fprintf(stdout, "&&Info: Invalid Password.\n");
            }
            print_server_info (packet, packetinfo->caplen);
            pcap_breakloop (handle);
            break;
        case EAP_REQUEST_IDENTITY:
            if (state == STARTED){
                fprintf(stdout, ">>Protocol: REQUEST EAP-Identity\n");
            }
            send_eap_packet(EAP_RESPONSE_IDENTITY);
            break;
        case EAP_REQUETS_MD5_CHALLENGE:
            state = ID_AUTHED;
            fprintf(stdout, ">>Protocol: REQUEST MD5-Challenge(PASSWORD)\n");
            fill_password_md5((uint8_t*)header->eap_md5_challenge, header->eap_id);
            send_eap_packet(EAP_RESPONSE_MD5_CHALLENGE);
            break;
        case EAP_REQUEST_IDENTITY_KEEP_ALIVE:
            if (state == ONLINE){
                fprintf(stdout, ">>Protocol: REQUEST EAP_REQUEST_IDENTITY_KEEP_ALIVE\n");
            }

//            // 使用伪IP模式认证成功后,获取真实IP,并写入RES/IDTY数据块
//            if (use_pseudo_ip){
//
//                //若获取成功,关闭伪IP模式标签
//                if (set_device_new_ip() == 0) {
//                    use_pseudo_ip = 0;
//                }
//            }

            send_eap_packet(EAP_RESPONSE_IDENTITY_KEEP_ALIVE);
            break;
        default:
            return;
    }
}
示例#10
0
文件: drcom.c 项目: huntxu/projects
void get_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{
    const struct eap_header *eap_header
        = (struct eap_header *) (&packet[ETH_HLEN+AUTH_HLEN]);

    ehid = eap_header->eap_id;
    switch (eap_header->eap_code) {
        case EAP_CODE_REQUEST:
            switch (eap_header->eap_type) {
                case EAP_REQUEST_IDENTITY:
                    if (state == STARTED) {
                        fprintf(stdout, "Identification Received\n");
                        state = IDENTIFIED;
                        send_eap_packet(EAP_RESPONSE_IDENTITY);
                    }
                    else {
                        fprintf(stdout, "Warning: we haven't started\n");
                    }
                    return;
                case EAP_REQUEST_NOTIFICATION:
                /* got this packet if authentication failed or in use*/
                    fprintf(stdout, "Server Notification: %s\n",
                            packet+ETH_HLEN+AUTH_HLEN+EAP_HLEN);
                    send_eap_packet(EAP_RESPONSE_MD5_CHALLENGE);
                    return;
                case EAP_REQUEST_MD5_CHALLENGE:
                    state = AUTHED;
                    fprintf(stdout, "MD5 Challenge Received\n");

                    memcpy(md5_challenge,
                           packet+ETH_HLEN+AUTH_HLEN+EAP_HLEN+0x01,
                           0x10);
                    md5digest();

                    send_eap_packet(EAP_RESPONSE_MD5_CHALLENGE);
                    return;
            }
        case EAP_CODE_SUCCESS:
            state = ONLINE;
            fprintf(stdout, "Login Successfully\n");
            if ( system(dhclientcmd) == -1 ) {
                fprintf(stderr, "Error while executing dhclient\n");
                error_handle(-2);
            }
            dhcp = 1;
            get_ip();
            if ( init_udp() == -1) {
                error_handle(-2);
            }
            init_daemon();
            alarm(31);
            return;
        case EAP_CODE_FAILURE:
            if ( state == ONLINE || state == AUTHED) {
                fprintf(stdout, "Logout\n");
                pcap_breakloop(handle);
            }
            return;
    }
    fprintf(stderr, "FATAL: Unknown packet[eap_code(%02x), eap_id(%02x), eap_type(%02x)]\n", eap_header->eap_code, eap_header->eap_id, eap_header->eap_type);
    fprintf(stderr, "Waring: I won't respond to this unknown packet\n");
    return;
}