نرسل SMS "مجهول" من وحدة التحكم إلى الرقم المطلوب باستخدام خدمة bytehand و C ++

في بعض الأحيان يصبح من الضروري إرسال رسالة مجهولة المصدر إلى المستلم الصحيح ، دون استخدام هاتفك أو عندما يكون لديك في متناول اليد فقط جهاز كمبيوتر متصل بالإنترنت ووحدة تحكم مفتوحة.

في العديد من الأفلام ، هناك لحظة يحتاج فيها أحد المتسللين الذين يصدمون شخصًا إلى إرسال رسالة إلى رقمه من أجل تشتيت انتباهه أو إخافته ، وفي مثل هذه المواقف ، فإن أهم شيء هو أنه عندما يتصل الشخص بالرقم الذي وردت منه الرسائل القصيرة ، لا تضيء شاشة هاتفك الذكي بدأت الموسيقى في اللعب. عفوًا ... موقف محرج. في هذا الموضوع ، سنكتب برنامجًا في C ++ يسمح لك بإرسال الرسائل القصيرة دون استخدام رقمك وبطاقة SIM وروحك.

السيد روبوت تلفزيوني

تشير كلمة "إخفاء الهوية" إلى أن مرسل الرسالة لم يتم التعرف عليه حقًا ، ولكن ليس كل شيء على ما يرام. خلال المحاكمة ، سيتم توضيح هذه الحقيقة ، حتى مع النكات الخطيرة بشكل خاص لن آتي لزيارتك للاختبار.

تحذير يمكن حل المهمة بطرق أسهل. في هذا الموضوع ، يتم تقديم أحد الحلول بلغة c ++.

دعنا نبدأ العمل.

تعد الخدمة اليدوية الفرعية حلًا تجاريًا يتيح لك القيام بكل من الرسائل الجماعية والرسائل الفردية. الميزة الرئيسية للخدمة ولماذا اخترت أنها واجهة برمجة تطبيقات متاحة من جميع الأنظمة الأساسية ، وهي استجابة طلب HTTP مع نظام ترخيص بسيط للغاية.

إليك ما نحتاج إليه:

  • حساب Bytehand
  • 100 روبل في الحساب (وماذا تريد ، الرسائل القصيرة ليست مجانية)
  • برنامج وحدة التحكم C ++
  • مكتبات Boost.Asio و OpenSSL المترجمة لاتصالات https
  • شهادة تم إنشاؤها من خلال OpenSSL لتبادل البيانات بشكل آمن مع خدمة البايت.

بادئ ذي بدء ، سجل في خدمة اليد الثانوية. التسجيل هو إدخال بريد إلكتروني وكلمة مرور. هذا يكفي بالفعل. بعد ذلك ، يتم إنشاء حسابك ، وعند تجديد الحساب (100 روبل على الأقل) ، يمكنك بالفعل إرسال رسائل باستخدام رأس SMS-INFO. بالنسبة لمعظم المشغلين ، يتم استبدال هذا الإدخال برقم المغادرة. إذا كنت ترغب في ذلك ، يمكنك ابتكار الاسم المستعار الخاص بك.

بعد ذلك نتسلق إلى واجهة برمجة تطبيقات الموارد. ونرى أنه لإرسال الرسائل القصيرة ، تحتاج فقط إلى تشكيل حزمة البيانات التالية:

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!!" } 

ألفت انتباهكم إلى حقيقة أن X-Service-Key في رأس http هو التفويض بالكامل. يمكن عرض هذا المفتاح في الإعدادات الموجودة على الموقع في قسم "الأمان".

أعتقد أن كل شيء واضح هنا ويمكنك البدء في كتابة برنامج وحدة تحكم في 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 } 

في هذه المرحلة ، يتم إرسال الأموال إلى حسابك لإرسال رسالة. وتذهب الرسالة إلى المرسل إليه. عندما يتلقاها ، سيكون رقم شركة أو معرفًا نصيًا ومن غير المحتمل أن يفهم الشخص من كانت هذه الرسالة.

إليك ما حدث عندما كتبت هذا البرنامج:

Myprogram

اتضح خرقاء ، ولكن ما هو. حظاً طيباً للجميع ، ربما ساعدك هذا الموضوع في شيء ما.

كانت هذه مقالتي الثانية هنا. شكرا للقراءة. حظا سعيدا في تطوير تطبيقاتك.

Source: https://habr.com/ru/post/ar419165/


All Articles