Git Product home page Git Product logo

jlu-drcom-client's Introduction

吉林大学校园网认证客户端(C语言版)

基于学校官方提供的Linux认证客户端编写,适用于支持POSIX标准的环境(Linux,BSD,Cygwin...)

客户端编写初衷

主要是为了缓解以下问题

  1. 学校官方仅提供图形界面客户端
  2. GitHub的C/C++轮子过旧,校园网UDP丢包断线
  3. 运行在Java和Python解释器上的客户端过于臃肿

校园网认证协议

吉林大学校园网采用DRCOM D版认证协议(UDP),主要包括关于DRCOM协议的具体内容请参考GitHub DRCOM仓库

客户端执行流程

flowchart LR
    challenge_login[Login Challenge]--> login[Login] 
    login --> keep_alive_auth[Keep Alive Auth]
    keep_alive_auth --> keep_alive_auth
    login --> keep_alive_heart_beat[Keep Alive Heartbeat]
    keep_alive_heart_beat --> keep_alive_heart_beat
    keep_alive_auth --> ctrl_c[Ctrl+C Signal Received]
    keep_alive_heart_beat --> ctrl_c
    ctrl_c --> challenge_logout[Logout Challenge]
    challenge_logout --> logout
Loading
  1. 发送登录challenge,获取salt用于登录
  2. 使用salt构建登录数据包进行账号登录
  3. 发送两种心跳包保持在线,同时程序监听linux命令行的Ctrl+C信号(SIGINT)
  4. 收到SIGINT信号,执行下线流程,发送下线challenge后获取salt进行下线

客户端实现

  1. 主进程完成上述1,2步骤后启动两个独立的线程(pthread)发送不同的心跳包
  2. 实测UDP协议在校园网环境下会有丢包,导致认证服务器收不到心跳包使客户端下线,为了缓解UDP的丢包问题,客户端使用日志记录器Logger记录上一轮发送的心跳包、发送时间、发送数以及回复数,使用Resender监视日志,如果心跳包在发送后2秒后未收到服务器应答则进行重发,重试3次无应答后退出客户端,Render为2个独立线程分别负责两种心跳包的重发
sequenceDiagram
participant Threads_Heartbeat
participant Logger
participant Threads_Resender
Threads_Heartbeat ->> Logger: Write heartbeat logs
Logger ->> Threads_Resender: Read heartbeat logs

Loading

如何使用

下载代码库

git clone https://github.com/AndrewLawrence80/jlu-drcom-client.git

修改配置

修改 config.h

#define CONFIG_USERNAME "xiaoming22" // 邮箱账户,无@后缀
#define CONFIG_PASSWORD "xiaoming123456" // 邮箱密码
#define CONFIG_IP "192.168.1.100" // 校园网IP
#define CONFIG_MAC "\x00\x00\x00\x00\x00\x00" // 校园网IP关联的MAC地址
#define CONFIG_HOST_NAME "xiaoming-linux" // 主机名,linux可以在命令行运行hostname
#define CONFIG_OS_INFO "5.10.0-amd64" // 操作系统版本,linux可以在命令行运行uname -r

安装依赖

Debian/Ubuntu

sudo apt install build-essential binutils linux-headers-amd64 make gcc

本地编译

为代码所在的机器/相同指令集的机器编译

make

交叉编译

为不同指令集的机器编译,以openwrt为例

下载交叉编译SDK

Openwrt下载页面下载对应指令集的SDK,例如MT7621SDK,解压

修改Makefile

export PATH := $(PATH):[解压路径]/openwrt-sdk-[版本]-[指令集]_gcc-[gcc版本]_[libc版本].Linux-x86_64/staging_dir/toolchain-[指令集]_gcc-[gcc版本]_[libc版本]/bin/
export STAGING_DIR := [解压路径]/openwrt-sdk-[版本]-[指令集]_gcc-[gcc版本]_[libc版本].Linux-x86_64/staging_dir/toolchain-[指令集]_gcc-[gcc版本]_[libc版本]/
CC=[上述toolchain/bin目录下的gcc]
LD=[上述toolchain/bin目录下的ld]
# CC=gcc

更多关于Openwrt下的编译参考Openwrt官方文档

保持在命令行运行

Linux下使用Screen

鸣谢

GitHub DRCOMS GitHub ly0 GitHub mchome Github Yesterday17 Github youthlin

关于Issue

提问的智慧

  1. 详细描述你的问题
  2. 复现方法
  3. 程序日志

jlu-drcom-client's People

Contributors

andrewlawrence80 avatar

Stargazers

QinYuxuan avatar Pinkat426 avatar suzukisuncy avatar LiBr avatar  avatar Asi avatar misaka18931 avatar

Watchers

 avatar

jlu-drcom-client's Issues

在线若干小时后断网问题

目前客户端存在登录大约6小时后因为不明原因断网的问题,可能是心跳包发送阶段仍然存在bug,解决方案是退出程序后重新登录,暂时不打算进行查错修复

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.