Enviamos SMS "anónimos" desde la consola al número deseado utilizando el servicio bytehand y C ++

A veces se hace necesario enviar un mensaje anónimo al destinatario correcto, sin usar su teléfono o cuando tiene a mano solo una computadora que tiene acceso a Internet y una consola abierta.

En muchas películas, hay un momento en que un pirata informático que descifra a una persona necesita enviar un mensaje a su número para distraerlo o asustarlo, y en tales situaciones lo más importante es que cuando la persona llama al número desde el que recibió el SMS, la pantalla de su teléfono inteligente no se ilumina y La música comenzó a sonar. Vaya ... Situación incómoda. En este tema, escribiremos un programa en C ++ que le permitirá enviar SMS sin usar su número, tarjeta SIM y alma.

Señor Programa de televisión robot

La palabra "anonimato" implica que quien envió el mensaje no es realmente reconocido, pero no todo es tan bueno. Durante el juicio, este hecho se aclarará, de modo que con bromas particularmente serias no vendré a visitarte para hacerte una prueba.

Advertencia La tarea podría resolverse de manera más fácil. En este tema, una de las soluciones se da en el lenguaje c ++.

Vayamos a los negocios.

El servicio bytehand es una solución comercial que le permite hacer correos masivos y mensajes únicos. La característica principal del servicio y por qué lo elegí es una API disponible en todas las plataformas, que es una Solicitud-Respuesta HTTP con un sistema de autorización muy simple.

Esto es lo que necesitamos:

  • Cuenta Bytehand
  • 100 rublos en la cuenta (y qué quieres, SMS no es gratis)
  • Programa de consola C ++
  • Bibliotecas compiladas Boost.Asio y OpenSSL para conexiones https
  • Un certificado creado a través de OpenSSL para el intercambio seguro de datos con el servicio bytehand.

En primer lugar, regístrese en el servicio bytehand. El registro es un correo electrónico y contraseña ingresados. Esto ya es suficiente. Después de eso, se crea su cuenta y al reponer la cuenta (al menos 100 rublos) ya puede enviar mensajes con el encabezado SMS-INFO. Para la mayoría de los operadores, esta entrada se reemplaza por el número de salida. Si lo desea, puede crear su propio alias de texto.

A continuación subimos a la API de recursos. Y vemos que para enviar SMS solo necesita formar el siguiente paquete de datos:

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

Le llamo la atención sobre el hecho de que la X-Service-Key en el encabezado http es la autorización completa. Esta clave se puede ver en la configuración del sitio en la sección "seguridad".

Creo que todo está claro aquí y puedes comenzar a escribir un programa de consola en c ++

En primer lugar, presento a su atención un código que, utilizando Boost.Asio, establece una conexión con el sitio mediante el protocolo 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() } 

El código usa el enlace al archivo de certificado dh2048.pem. Lo reemplazas con el tuyo.
También puede ver que aquí el nombre de dominio api.bytehand.com se usa como servidor

El siguiente es un ejemplo de cómo se forman el encabezado y el cuerpo de la solicitud http para el servidor.

 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; } 

Le recuerdo que debe reemplazar el campo X-Service-Key con su clave.

Después de ejecutar este código y si todo salió como debería, el servidor devuelve una respuesta:

 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 } 

En este punto, se envía dinero a su cuenta para enviar un mensaje. Y el mensaje va al destinatario. Cuando lo reciba, será un número de compañía o un identificador de texto y es poco probable que una persona entienda de quién fue este mensaje.

Esto es lo que sucedió cuando escribí este programa:

Miprograma

Resultó torpemente, pero lo que es. Buena suerte a todos, tal vez este tema te ayudó con algo.

Este fue mi segundo artículo aquí. Gracias por leer Buena suerte desarrollando tus aplicaciones.

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


All Articles