介绍Telegramd-电报telegram技巧分享

telegram服务器源码

介绍 Telegram

Rei 写于 05 Feb 2015

近来我知道了一个即时通讯工具 Telegram ,在短暂试用之后我就嘻歡上了这个工具,决定将它作为我的重要的即时通讯工具。在阅读了它的 FAQ 之后,我发现 Telegram 有一些跟别家即时通讯不一样的地方,值得我写一篇博客建议。

全功能和易用

要得到我的建议,首先它要是全功能的,而且要对非技能人群易用,Telegram 就满意了这两个条件条件。

Telegram 提供了主流即时通讯工具的功能,我们可以用它发送文字、图片、心情、贴纸、文件!、语音等等(单文件大小上限是 1.5 GB),也可以群聊。

Telegram 提供了全平台客户端,包括 Web,桌面(PC/Mac/Linux),移动端(Android/iOS/WP)。聊天记载是存放在云端的,无论用哪个客户端都能看到同等的聊天记载。

Telegram 有两个特色功能:机密聊天和聊天地点。

机密聊天容许联系人之间使用端到端方法加密聊天信息,纵然把握了服务端权限也无法解密。端对端加密的聊天记载不会在客户端间同步,只在当前使用的装备可见。机密聊天还可以设置消息的自毁时间,即阅后即焚。不外经测试,机密聊天的时间手机截图还是能用的,以是要发隐私内容的时间还要思量对方是否值得相信。

聊天地点容许用户拥有一个 telegram.me/YourUsernameHere 的聊天地点,任何人打开这个地点就可以跟你开始聊天(需要注册)。这个功能是可选的,只要不设置 username 就不会开启。

在提供了丰富的功能底子上,Telegram 的用户体验非常好,大概超越了全部同类软件。它的界面简便,操作切合直觉,反馈敏捷,更多的体验我相信试用过的人都市明白。

开放通讯协议,API 和客户端源码代码

Telegram 开放了它的通讯协议、API 和客户端源码。开放通讯协议,可以让开发者开发自己的客户端;开放 API ,可以基于 Telegram 开发第三方服务;开放官方客户端源码,可以让安全专家检察有没有后门。听说 Telegram 计划开放全部源码——包括服务端,但就是否会导致网络破裂的问题还没完成共鸣。

我对 IETF 尺度的 XMPP 协议有过一些理解,以是知道 Telegram 开放协议有何等难得。XMPP 虽然是 IETF 尺度,但是它从来没有成为主流的即时通讯协议,更多的是作为应用内聊天功能的底层协议使用(比方网游的聊天功能)。最广为人知使用 XMPP 协议的通讯工具是 Gtalk,但是它的功能非常缺少,不能发送图片和群聊。在 Google 开发了 Hangouts 之后,就不再与 XMPP 协议兼容。

我以为 XMPP 没措施盛行的缘故是它的焦点功能集太小,图片和群聊功能都是放在扩展协议。XMPP 虽然有许多扩展协议,但是客户端要么服务端并不肯定支持,这样就造成纵然一个客户端实现了这个功能,对方假如差别时实现,实际上就用不了。如今 XMPP 大概退出了大众视线。

以是我很兴奋看到 Telegram 这样全功能的通讯工具开放了通讯协议。Telegram 也从开放中获益:它的客户端多数是由非官方的开发者开发,然后纳入官方管理的。以后有什么新平台新装备,可以等待很快有开发者为之开发客户端。

葆护隐私

开放协媾和源码并不但是一个噱头,Telegram 的目标是葆护用户的隐私。Telegram 为了打造一个安全的端对端加密协议,网站公布后不久就把协议细节 公布到 Hacker News 上 担当民众校阅。

这里还发生了一个趣事,Telegram 在 Hacker News 公布后立刻引来了许多质疑声,以为他们的加密协议不可靠。Telegram 以为大部分反馈并没有发实际质问题,于是发起悬赏,谁能破解 Telegram 发起人 Pavel Durov 与他兄弟间的机密聊天内容,就能得到赏金 $200,000。后来并没有人通过 Hacker News 上的方法打击成功,倒是一个俄罗斯加密菜鸟(自称)发现了一个协议漏洞,他得到了 $100,000 赏金(没有得到全部赏金由于并没有真正实行打击)。

这件事记载在这篇文章: The story of Telegram or “Why you shouldn’t listen to Hacker News” 。悬赏还在继续,最新的赏金已经涨到了 $300,000 。

Telegram 花了很鼎力大举气葆护用户隐私,假如你很重视通讯隐私,你应该使用 Telegram 的机密聊天模式。纵然黑白机密聊天模式,Telegram 也比大多数聊天工具安全,由于服务端的数据全部加密,密钥分布在多个数据中心,单单控制一个数据中心无法解密用户的聊天数据。

非营利性

Telegram 另有一个长处,就是它的非营利性。Telegram 现在依赖 Pavel Durov 的基金会赞助,没有红利压力。

贸易非原罪,但是贸易化的聊天工具常常附带同一个公司的其他服务,导致功能越来越痴肥,更有甚者 将用户看成打压友商的筹码 ,限定用户发送的内容。非营利性能让 Telegram 把留意力放在怎样进步!安全性和提供更好的用户体验上,而不是给用户设置停滞。

固然,非营利性也是我担心 Telegram 远景的一个地方。Telegram 慷慨地提供单个 1.5 GB 文件传输,这让我很担心他们的储存付出。据 FAQ 介绍,假如基金会资金不够了,他们会实验用户捐助要么增值收费。我不确定这是不是久远之道,只能祝愿 Telegram 能像 Mozilla 那样的非营利组织那么恒久。

联系人怎么办?

要迁徙到新的聊天工具,大概最大的问题是怎么带着联系人迁徙。Telegram 会读取通讯录,在联系人注册 Telegram 之后提示你,但假如注册之后一个联系人都没有怎么办?

我给不出什么提议,一方面是我的小伙伴很少,很轻易就通知完全部人我已经调换聊天工具了;另一方面我的小伙伴以技能喜好者居多,很轻易担当新事物,以是一经我介绍,许多人就一起转了。此中有几个小伙伴 Telegram 上只有我一个联系人,纯粹是为了跟我联系才多装了一个应用,我要谢谢这些小伙伴。

Telegramd – Unofficial open source telegram server written in golang

打造高性能、稳定而且功能美满的开源telegram服务端,建设开源telegram客户端生态系统非官方首选服务!

Chinese

简介

Go语言非官方开源telegram服务端

架构图

架构图

文档

Diffie–Hellman key exchange Creating an Authorization Key Mobile Protocol: Detailed Description (v.1.0, DEPRECATED)

Encrypted CDNs for Speed and Security @steedfly 翻译

编译和安装

简单安装

  • 预备


    mkdir $GOPATH/src/github.com/nebulaim/ cd $GOPATH/src/github.com/nebulaim/ git clone https://github.com/nebulaim/telegramd.git

  • 编译代码


    编译frontend cd $GOPATH/src/github.com/nebulaim/telegramd/server/access/frontend go get go build 编译auth_key cd $GOPATH/src/github.com/nebulaim/telegramd/server/access/auth_key go get go build 编译auth_session cd $GOPATH/src/github.com/nebulaim/telegramd/service/auth_session go get go build 编译sync cd $GOPATH/src/github.com/nebulaim/telegramd/server/sync go get go build 编译upload cd $GOPATH/src/github.com/nebulaim/telegramd/server/upload go get go build 编译document cd $GOPATH/src/github.com/nebulaim/telegramd/service/document go get go build 编译biz_server cd $GOPATH/src/github.com/nebulaim/telegramd/server/biz_server go get go build 编译session cd $GOPATH/src/github.com/nebulaim/telegramd/server/access/session go get go build

  • 运行


    cd $GOPATH/src/github.com/nebulaim/telegramd/server/access/auth_key ./auth_key cd $GOPATH/src/github.com/nebulaim/telegramd/service/auth_session ./auth_session cd $GOPATH/src/github.com/nebulaim/telegramd/server/sync ./sync cd $GOPATH/src/github.com/nebulaim/telegramd/server/upload ./upload cd $GOPATH/src/github.com/nebulaim/telegramd/service/document ./document cd $GOPATH/src/github.com/nebulaim/telegramd/server/biz_server ./biz_server cd $GOPATH/src/github.com/nebulaim/telegramd/server/access/session ./session cd $GOPATH/src/github.com/nebulaim/telegramd/server/access/frontend ./frontend

更多文档

Build document Build script Prerequisite script

配套客户端

官方开源客户端修改适配版本

Android client for telegramd macOS client for telegramd iOS client for telegramd tdesktop for telegramd webogram for telegramd

开源客户端库修改适配版本

tdlib

TODO

技能交流群

Bug反馈,意见和提议欢迎参加 Telegramd中文技能交流群 讨论。

English

Introduce

open source mtproto server implement by golang, which compatible telegram client.

Install

Build and install build prerequisite

Feedback

Please report bugs, concerns, suggestions by issues, or join telegram group Telegramd to discuss problems around source code.

Telegram

Telegram 作为一款风靡环球的交际软件,最大的特点就是信息加密不受监管。中东炮火中的火箭手在用,香港 DU 场 xi qian 的大佬也在用……这种安全私密、不受监管的特点非常切合区块链业务的需求,以是大部分区块链软件会基于 Telegram 做二次研发。固然另有林林总总有安全需求的业务会思量!在 Telegram 的底子上做研发。

开源

除了保证聊天的安全加密,Telegram 全平台也是开源的,包括 Server、iOS、Android 都可以在 Github 看到相应的源码。在 Telegram 后台注册一个账号,就可以开始开发工作了。本文重要谈一下对 Telegram 的 iOS 源码的明白。

底层数据库布局

如下图,通过底层数据库布局,我们可以理解 Telegram 重要业务是:群聊、单聊(普通/私密)、联系人、消息收发、媒体缓存等。

消息机制

Telegram 消息是通过长链吸收发的,做了非对称加密处置,保证不会在传输過逞中被挟制破解。服务器只做消息的转发,并不保存用户的聊天信息。

iOS 端使用的 MTProto 协议进行聊天加密,2.0 版本的协议如下:

消息吸收的過逞如下:

消息布局


_uid:577499321 _contactId:1236149230 _flags:8 _phoneNumber:8613763203217 _phoneNumberHash:-673666323598709087 _firstName:pauley _LastName:Haha _photoUrlSmall:5_852733294_208097_6526069910252166177 _photoUrlBig:5_852733894_20823229_5128008587494466111

消息构建

下面以文本消息为例,梳理下消息构建流程。TGPreparedTextMessage 是预备要发送的消息格式封装类,天生需要的消息 ID 等信息。 然后转换为 TGMessage 通过 TCP 通道发送到 Server,同时写入当地数据库并通过 KVO 的方法更新聊天视图。


TGPreparedTextMessage *preparedMessage = [[TGPreparedTextMessage alloc] initWithText:[NSString stringWithFormat:@"%d", i] replyMessage:nil disableLinkPreviews:NO parsedWebpage:nil entities:nil botContextResult:nil replyMarkup:nil]; if (preparedMessage.randomId == 0) { int64_t randomId = 0; arc4random_buf(&randomId, sizeof(randomId)); preparedMessage.randomId = randomId; } if (preparedMessage.mid == 0) preparedMessage.mid = [[TGDatabaseInstance() generateLocalMids:1][0] intValue]; preparedMessage.date = (int)[[TGTeleboxNetworking instance] approximateRemoteTime]; TGMessage *message = [preparedMessage message]; message.cid = [self peerId]; message.fromUid = 531399335; message.toUid = 577499201; message.date = 1531396567; message.flags = 2; [TGDatabaseInstance() transactionAddMessages:@[message] updateConversationDatas:@{} notifyAdded:true]; [ActionStageInstance() dispatchResource:[[NSString alloc] initWithFormat:@"/tg/conversation/(%lld)/messages", [self peerId]] resource:[[SGraphObjectNode alloc] initWithObject:@[message]]];

聊天 Cell 组建

高度组件化的聊天 Cell,通过一系列图片、文本、按钮、头像、配景等底子组建组装。为了进步性能,视图的渲染使用的 Core Grahics 框架绘制。以是假如需要自定义结构,需要在 layout 方法中 resize 视图。整个聊天 Cell 的组建流程如下图:

焦点类和方法


MTRequestMessageService、TGUpdateMessageService


TGUser *databaseUser = [[TGDatabase instance] loadUser:(int)(it->first)];


TGPreparedTextMessage


[TGDatabaseInstance() transactionAddMessages:@[message] updateConversationDatas:@{} notifyAdded:true];


[ActionStageInstance() dispatchResource:[[NSString alloc] initWithFormat:@"/tg/conversation/(%@)/messages", [self _conversationIdPathComponent]] resource:[[SGraphObjectNode alloc] initWithObject:addToDatabaseMessages]];

相关链接

本文网址:

http://www.1cm8858.com/d/2020626102833_4431_1239219981/home

Ten articles before and after

黑名单机器人AmaZix-电报telegram技巧分享

海螺/telegram(电报)使用红区//电报/海螺账号被屏蔽如何解封?微信保号诚信合作-电报telegram技巧分享

温州话有多强发电报-电报telegram技巧分享

北卡盘点丨号称最安全的telegram也中招了!伊朗黑客“攻破”聊天软件-电报telegram技巧分享

【telegram介绍】telegram是什么/telegram的使用说明/telegram中文化/telegram怎么开频道/line官方帐号改收费机制MONEY钱杂志─@开始爆用户逃离潮!教你三步无痛转移编辑部-电报telegram技巧分享

telegram:收集50个常用机器人Ella优秀频道推荐@-电报telegram技巧分享

如何轻松破解电报帐户?全网免费资源提供站TGTelegram@bcm-电报telegram技巧分享

京城最后"发报人":曾一天收发电报十万封杭州的房还有5位报务员在坚守-电报telegram技巧分享

telegram使用教程(电报)汉化版-电报telegram技巧分享

如何设置每天自动给telegram里的机器人发消息普通账号定时发布信息、签到-电报telegram技巧分享