kerberos4安全协议工作过程,C语言部分简易实现(附带模拟黑客入侵)

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

static int hacker;

typedef struct ticket
{
    int server_ID = -1;         //服务器ID
    char* client_ID;        //用户ID
    int password;           //票据密码
    int client_address;     //用户网络地址

}kerberos_ticket;


typedef struct client_message
{

    char *client_ID;         //用户ID
    int client_address;      //用户网络地址
    char *Client_password;   //用户口令
    ticket client_ticket;    //用户的票据

} client[10];


typedef struct server_message
{
    int server_ID;
    ticket server_ticket;

}server[10];





void input_data_client(struct client_message *client);

void input_data_server(struct server_message *server);

int Client_to_AS(struct client_message *client,struct server_message *server);

int client_to_server(struct client_message *client,struct server_message *server);

int hacker_function(struct client_message *client,struct server_message *server);


int main()
{
    client_message client[10];

    server_message server[10];

    input_data_client(client);

    input_data_server(server);

    Client_to_AS(client,server);

    hacker_function(client,server);

    printf("开始正常用户的登录\n\n");
    client_to_server(client,server);

    return 0;
}


void input_data_client(struct client_message *client)
{
    client[0].Client_password = "001";
    client[1].Client_password = "002";
    client[2].Client_password = "003";
    client[3].Client_password = "004";
    client[4].Client_password = "005";
    client[5].Client_password = "006";
    client[6].Client_password = "007";
    client[7].Client_password = "008";
    client[8].Client_password = "009";
    client[9].Client_password = "010";

    client[0].client_address = 192;
    client[1].client_address = 193;
    client[2].client_address = 194;
    client[3].client_address = 195;
    client[4].client_address = 196;
    client[5].client_address = 197;
    client[6].client_address = 198;
    client[7].client_address = 199;
    client[8].client_address = 200;
    client[9].client_address = 201;

}

void input_data_server(struct server_message *server)
{
    server[0].server_ID = 1;
    server[1].server_ID = 2;
    server[2].server_ID = 3;
    server[3].server_ID = 4;
    server[4].server_ID = 5;
    server[5].server_ID = 6;
    server[6].server_ID = 7;
    server[7].server_ID = 8;
    server[8].server_ID = 9;
    server[9].server_ID = 10;
}



int Client_to_AS(struct client_message *client,struct server_message *server)  //返回值作为票据
{

    int number;
    printf("*******************************\n\n开始输入用户信息:\n\n");
    printf("输入您是几号用户(1-9):");
    scanf("%d",&number);
    number = number - 1;
    hacker = number;

    client[number].client_ticket.client_ID = client[number].client_ID;
    client[number].client_ticket.client_address = client[number].client_address;

    char* Client_password;
    Client_password = (char*)malloc(sizeof(char));
    printf("\n请输入您的密码(1就是001,2就是002,以此类推):");
    scanf("%s",Client_password);


    if(strcmp(Client_password,client[number].Client_password) == 0)  //判断密码是否正确
    {
        srand((unsigned)time(NULL));
        int ticket = rand();  //生成票据


        int number_server;
        printf("\n请输入您需要访问的服务器代码(1-10):");
        scanf("%d",&number_server);
        printf("\n输入用户信息结束\n\n*******************************\n\n");
        client[number].client_ticket.server_ID = number_server--;


        server[number_server].server_ticket.client_ID = client[number].client_ID;


        client[number].client_ticket.password = ticket;
        server[number_server].server_ticket.password = ticket;
        server[number_server].server_ticket.client_address = client[number].client_address;

        printf("验证成功,您的票据已经分发\n\n");
        printf("您的票据为%d\n\n",client[number].client_ticket.password);
        printf("对应服务器的票据为%d\n",server[number_server].server_ticket.password);
    }
    else
    {
        printf("\n您输入的密码有错\n");
        exit(-1);
    }
    return 0;
}

int hacker_function(struct client_message *client,struct server_message *server)
{
    printf("\n*******************************\n\n黑客闪亮登场,开始模拟黑客攻击\n\n");
    printf("黑客攻击对象:%d号用户\n\n",hacker+1);
    client[9].client_ticket.password = client[hacker].client_ticket.password;
    client[9].client_ticket.server_ID = client[hacker].client_ticket.server_ID;
    printf("黑客已经获取%d号用户的信息:\n\n他要访问%d号服务器\n\n他的票据口令是:%d\n\n黑客是十号机,在攻击时请输入10\n\n",hacker+1,client[9].client_ticket.server_ID,client[9].client_ticket.password);
    client_to_server(client,server);
    printf("\n黑客攻击失败,他逃跑了\n\n*******************************\n\n");
    return 0;
}

int client_to_server(struct client_message *client,struct server_message *server)
{
    int number;
    printf("请输入您的编号:(1-10,如果是模拟黑客请输入10)");
    scanf("%d",&number);
    number = number - 1;
    while(client[number].client_ticket.server_ID == -1)
    {
        printf("\n这台机器没有申请过这个服务,请重新输入:");
        scanf("%d",&number);
        number = number - 1;
    }
    int server_number = client[number].client_ticket.server_ID - 1;

    if(client[number].client_ticket.password == server[server_number].server_ticket.password)
    {
        printf("\n票据验证成功\n");
        if(client[number].client_address == server[server_number].server_ticket.client_address)
            printf("\n用户IP地址验证成功,没有重放攻击风险,登录成功\n\n*******************************\n");
        else
            printf("\n用户IP地址不一致,可能票据已经泄露\n");
    }
    else
    {
        printf("票据不一致,访问被拒绝\n");
        exit(-1);
    }

}











 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值