一转眼,时间已经到了2018年。在过去的一年中,人工智能被炒作得火热,而数字货币市场也风起云涌。而IT市场的行业垄断也日益严重,各种电子产品相继涨价,玩起了“萝卜涨”。
我无法预测目前的这些行业热点在未来会有什么发展,但是有一个事实是明了的:信息产业的“田园时代”已经过去,网络匿名已经日益成为一种奢侈。从之前的各种网络资源被移除,到今年中旬来姐QQ被封号,再到后来几乎所有网络平台都要求“实名制”,我国对信息产业的监管力度正迈向一个前所未有的高峰。
我有点害怕,说不定将来的哪天我会因为聊天记录而去坐文字狱。我觉得自建即时通讯服务器已经有了一定的必要性。
于是,现学现用,我花了几天时间学习了一点网络通信和信息安全方面的知识,设计并实现了一个简单的网络即时通讯体系。
这套体系是需要服务器的,所谓的服务器,主要是利用它的固定IP地址的优势。利用一个固定的IP来为没有固定IP(甚至是处于内网)的客户端们牵线搭桥。服务器只存账号密码和该账号目前的IP地址以及端口号。每当客户端上线,服务器验证客户端的身份,并登记它目前所使用的IP地址。当客户端希望与另一个客户端通信时,它首先查询本地的缓存,如果缓存不命中,就继续询问服务器。获得对方的地址后,直接向对方发送信息。如果对方不在线,可以选择将信息缓存在服务器上。这些通信可以对内容进行非对称加密,从而保证安全性。所以只要愿意,即使攻击者完全控制了服务器,也不会有信息泄露的风险,同时接受者还能顺利收到消息。
同时,无论客户端和服务器怎么实现,只要符合信息发送的格式,就能做到互相通信,所以人人都能够定制并架设这样的服务器。
比如我的服务器端的实现是这样的:
服务器进行初始化后,进入一个while(1)循环,不断等待接收UDP请求,并将处理结果返回给客户端。
目前已完成的功能:
1. 注册
2. 登陆
3. 上线
4. 下线
5. 请求其他用户IP
6. 基于MD5的密码加密
未完成功能:
1. 基于区块链的用户信息保存
2. 多服务器同步功能
3. 数据持久化
4. 非对称的通信加密
5. 数据包压缩以节省带宽
6.混淆算法(如果以后该服务被封就得用了
客户端设计指导:
参阅:
https://github.com/ZhehooMorgen/pigeon/blob/master/README.md
作者:Sin
编辑:囧星人&喵
领取专属 10元无门槛券
私享最新 技术干货