RAKNET内核 - Secure Connections 网络通讯安全连接

1. 前言

随着游戏上线运营之后,一些心怀不轨的玩家就会通过网络攻击或者窃取的方式来作弊,最常见的就我们所说的外挂。那么RakNet是如何规避这些玩家的攻击呢?

RakNet使用传统的网络安全连接的方法从第一步就禁止非常规终端连接到服务器。

本文不使用理论性的对话,只使用简单的例子演示如何对RakNet的网络通讯信息进行加密。本文的基于《RAKENT创建UDP实例,RAKNET简单通讯实例》只上,建议先阅读该篇文章。


2. RakNet Secure Connections处理流程

  1. 全局定义      #define LIBCAT_SECURITY 1
  2. 包含头文件  #include "SecureHandshake.h"
  3. 服务器生成公钥和私钥,并且把生成的公钥给客户端使用
  4. 客户端使用公钥连接服务器

3. Server 服务端处理程序

#if LIBCAT_SECURITY==1
	#include "SecureHandshake.h"
#endif

int main(void)
{
	RakNet::RakPeerInterface *server=RakNet::RakPeerInterface::GetInstance();  
	server->SetIncomingPassword("user_defined_string", (int)strlen("user_defined_string"));  
	server->SetTimeoutTime(30000,RakNet::UNASSIGNED_SYSTEM_ADDRESS);  

// 只需要下面这段代码
#if LIBCAT_SECURITY==1
	cat::EasyHandshake handshake;
	char public_key[cat::EasyHandshake::PUBLIC_KEY_BYTES];
	char private_key[cat::EasyHandshake::PRIVATE_KEY_BYTES];
	handshake.GenerateServerKey(public_key, private_key);
	server->InitializeSecurity(public_key, private_key, false);
	FILE *fp = fopen("publicKey.dat","wb"); // 文件的保存路径根据自己项目需要设置
	fwrite(public_key,sizeof(public_key),1,fp);
	fclose(fp);
#endif


4. Client 客户端处理程序

#if LIBCAT_SECURITY==1
    #include "SecureHandshake.h"
#endif

int main(void)
{

...这里省略几万行代码

#if LIBCAT_SECURITY==1
// 使用安全连接
	// 读取公钥,这个文件是由服务器生成,并且给我的
	char public_key[cat::EasyHandshake::PUBLIC_KEY_BYTES];
	FILE *fp = fopen("publicKey.dat","rb");
	fread(public_key,sizeof(public_key),1,fp);
	fclose(fp);
	
	// RakNet提供处理公钥的类库
	RakNet::PublicKey pk;
	pk.remoteServerPublicKey=public_key;
	pk.publicKeyMode=RakNet::PKM_USE_KNOWN_PUBLIC_KEY;

	// 我只需在连接服务器的时候使用见可以了,^_^   &pk就是我啦~~ 
	bool b = client->Connect(ip, atoi(serverPort), "user_defined_string", (int) strlen("user_defined_string"), &pk)==RakNet::CONNECTION_ATTEMPT_STARTED;	
#else
// 不使用安全连接
	RakNet::ConnectionAttemptResult car = client->Connect(ip, atoi(serverPort), "user_defined_string", (int) strlen("user_defined_string"));
	RakAssert(car==RakNet::CONNECTION_ATTEMPT_STARTED);
#endif


5. 参考阅读

您可以修改并重新发布本文,如果您能留下本文的参考连结,万分谢谢!
如果您对本文存在疑问,欢迎留言或者直接对本文评论,我会在看到的第一时间回复您。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值