我们使用字节手和C ++服务从控制台将“匿名” SMS发送到所需的号码

有时有必要将匿名消息发送给正确的收件人,而无需使用您的电话,或者只有一台可以访问Internet并具有开放控制台的计算机。

在许多电影中,有一瞬间黑客破解一个人需要向其号码发送消息以分散他的注意力或吓scar他,在这种情况下,最重要的是,当该人拨打短信的号码时,智能手机的屏幕不会亮起,音乐开始播放。 糟糕!尴尬的处境。 在本主题中,我们将使用C ++编写一个程序,使您无需使用您的电话号码,SIM卡和电话即可发送SMS。

先生机器人电视节目

“匿名”一词意味着发送消息的人并没有被真正识别,但并非一切都那么好。 在审判期间,这一事实将得到澄清,因此,即使开玩笑,我也不会来拜访您进行测试。

警告 该任务可以通过更简单的方式解决。 在本主题中,使用c ++语言提供了一种解决方案。

让我们开始做生意。

字节手服务是一种业务解决方案,它使您既可以进行批量邮件也可以进行单个消息。 服务的主要功能以及我选择它的原因是所有平台都可以使用的API,这是具有非常简单的授权系统的HTTP请求-响应。

这是我们需要的:

  • 字节手帐户
  • 帐户中有100卢布(您想要什么,短信不是免费的)
  • C ++控制台程序
  • 编译的Boost.Asio和OpenSSL库用于https连接
  • 通过OpenSSL创建的证书,用于与字节手服务进行安全的数据交换。

首先,在字节服务上注册。 注册是输入的电子邮件和密码。 这已经足够了。 此后,将创建您的帐户,并且在补充帐户(至少100卢布)时,您已经可以发送带有标题SMS-INFO的消息。 对于大多数运营商,此条目将替换为出发号码。 如果愿意,可以提供自己的文本别名。

接下来,我们进入资源API。 而且我们看到要发送SMS,您只需要形成以下数据包:

POST /v2/sms/messages HTTP/1.1 Host: api.bytehand.com Connection: close Content-Length: * Content-Type: application/json;charset=UTF-8 X-Service-Key: ab4db0b982dcd0ba63e44191e5d71ef8 { "sender": "MyShop", "receiver": "+79167654321", "text": "Today only! 20% off for all goods!!" } 

我提请您注意http标头中的X-Service-Key是整个授权。 可以在网站上“安全性”部分的设置中查看此密钥。

我认为这里一切都很清楚,您可以开始用C ++编写控制台程序

首先,我提请您注意一段代码,该代码使用Boost.Asio使用https协议建立与站点的连接

 //   Boost #include <boost/asio.hpp> #include <boost/asio/ssl.hpp> #include <boost/bind.hpp> // --------------------------- // ---------- Include OpenSSL Lib ---------- #pragma comment (lib, "libeay32.lib") #pragma comment (lib, "ssleay32.lib") // ----------------------------------------- using namespace boost::asio; //    bool verify_certificate(bool preverified, boost::asio::ssl::verify_context& ctx) { X509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle()); return preverified; } int main() { io_service service; // ,    /*------------------------------------------------------------ -     - ------------------------------------------------------------*/ ip::tcp::resolver resolver(service); ip::tcp::resolver::query query("api.bytehand.com", "https"); ip::tcp::resolver::iterator iterator = resolver.resolve(query); ssl::context context(boost::asio::ssl::context::sslv23); context.load_verify_file("dh2048.pem"); ssl::stream<ip::tcp::socket> socket_(service, context); socket_.set_verify_mode(ssl::context::verify_none); socket_.set_verify_callback(boost::bind(verify_certificate, _1, _2)); connect(socket_.lowest_layer(), iterator); socket_.handshake(boost::asio::ssl::stream_base::client); //        socket_.write_some() } 

该代码使用到dh2048.pem证书文件的链接。 您将其替换为您的。
您还可以在此处看到域名api.bytehand.com用作服务器

以下是如何构成服务器的http请求的标头和正文的示例。

 int main() { /*  ,       https */ //            //       string number = "+79180000000"; string signature = "SMS-INFO"; string text = "Today only! 20% off for all goods!!"; std::stringstream request_; //     char sockBuffer[8192]; //      //     ,       Content-Length string reqTmp = "{\"sender\": \"" + signature + "\",\"receiver\": \"" + number + "\",\"text\": \"" + text + "\"}\r\n"; request_ << "POST /v2/sms/messages HTTP/1.1\r\n"; request_ << "Host: api.bytehand.com\r\n"; request_ << "Connection: close\r\n"; request_ << "Content-Length: " << reqTmp.length() << "\r\n"; request_ << "Content-Type: application/json;charset=UTF-8\r\n"; request_ << "X-Service-Key: ab4db0b982dcd0ba63e44191e5d71ef8\r\n"; request_ << "\r\n"; request_ << reqTmp; //     socket_.write_some(buffer(request_.str())); memset(sockBuffer, NULL, 8192); //       socket_.read_some(buffer(boost::asio::buffer(sockBuffer))); //     cout << endl << endl << sockBuffer << endl; } 

提醒您,您将X-Service-Key字段替换为密钥。

执行此代码后,如果一切正常,服务器将返回响应:

 Status Code: 200 Content-Type: application/json;charset=UTF-8 Content-Language: en Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache { "result": "created", "count": 1 } 

此时,资金已汇入您的帐户以发送消息。 然后消息发送给收件人。 当他收到邮件时,它将是一个公司编号或一个文本标识符,一个人不太可能会理解此消息的来源。

这是我编写此程序时发生的事情:

我的程序

结果很笨拙,但这是什么。 祝大家好运,也许这个话题对您有所帮助。

这是我的第二篇文章。 感谢您的阅读。 祝您开发应用程序好运。

Source: https://habr.com/ru/post/zh-CN419165/


All Articles