51

GitHub - kasuganosoras/UChat: 一款使用 PHP 开发的命令行聊天软件,基于 UDP 协议,...

 5 years ago
source link: https://github.com/kasuganosoras/UChat
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

UChat

一款使用 PHP 开发的命令行聊天软件,基于 UDP 协议

本项目属于个人无聊写的作品,有不足的地方欢迎提 Issues 或者 Pull Request。

功能特性

  • 支持分组和私聊
  • 支持 AES-256-CFB 强加密传输
  • 支持抗重放攻击
  • 支持自定义服务器
  • 支持储存配置
  • 使用 UDP 协议
  • 支持断线重连

基本介绍

UChat 其实没有一个明确的分组或者私聊的概念,只要两个以上的用户使用相同的 key 连接服务器,就能一起聊天。

例如用户 A 和用户 B 都使用 2333333 这个 Key 登陆到服务器,那么 A 和 B 就可以一起聊天。

如果用户 A 使用 2333333 这个 Key,而用户 B 使用 6666666 这个 Key,那么 A 和 B 将无法聊天。

实现原理

用户在发送消息的时候,使用自己的 Key 加密消息内容,服务器收到加密的消息后不做任何处理,发送给所有的客户端,其他客户端收到加密的消息后,如果 Key 和发送者的 Key 相同,就可以解密消息内容,如果不相同则无法解密,自然就无法得到消息内容。

于是呢,只要有另一个人的 Key 和你的 Key 相同,那么你们就可以互相看见对方发的消息,如果有很多人都使用一样的 Key,那就可以成为一个群组。

img

环境依赖

运行服务端需要:Swoole、Redis

运行客户端需要:Pthreads

安装与运行

首先将项目 clone 到本地,然后进入目录

git clone https://github.com/kasuganosoras/UChat
cd UChat/

接着启动服务端,推荐在 screen 里运行,或者使用 nohup

php server.php

然后客户端也是同样的启动方式

php client.php

启动客户端以后根据提示设置即可。

关于抗重放攻击

抗重放攻击使用系统时间进行验证,因此请确保聊天各方的时间相差不要超过 1 分钟,否则会验证失败。

开源协议

此项目基于 GPL v3.0 协议开源


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK