ZTE-MF823モデムでのSMSの自動作業

このモデムは、モデム自体ではありません。 これは、Linuxベースのarm v7プロセッサを搭載したルーターであり、ネットワークカードとしてシステムに表示され、Linuxで問題なく起動します(usb0ネットワークインターフェイス、192.168.0.0サブネット)。



telnet(ip:192.168.0.1、ログイン:root、パスワード:zte9x15)を介してデバイスに接続し、iptablesを展開し、crontabでスクリプトをハングアップするなど、独自のソフトウェアをインストールすることもできますが、これは今日のことではありません。



モデムを使用して操作を実行するには、Webインターフェイスに対してCGI要求を実行する必要があります。wgetまたはcurlが適しています。 メガホンのモデムにはウェブの顔はありませんが、ビーラインにはあります。 Webマズルはajaxによって同じCGIリクエストを送信するブラウザーベースのJavaScriptアプリケーションです。インターネット上でsmsを操作するための適切なドキュメントが見つからなかったため、Webマズルを埋めてリクエストをキャッチすることにしました。



SMSを使用するには、アドレス192.168.0.1/goform/goform_set_cmd_processに POSTリクエストを送信する必要があります。



SMS送信:

goformId = SEND_SMS

notCallback = true

番号 = 加入者 番号

sms_time = y; m; d; h; i; sの形式の日付

MessageBody = メッセージテキスト

ID = -1

encode_type = UNICODE



SMSを削除:

goformId = DELETE_SMS

msg_id = セミコロンで区切られたメッセージIDリスト

notCallback = true



SMSの受信:

json形式のすべてのメッセージを受信するには、アドレス192.168.0.1/goform/goform_get_cmd_process?cmd=sms_data_total&page=0&data_per_page=5000&mem_store=1&tags=10&order_by=order+by+id+descに連絡する必要があります



応答として、すべてのSMSの配列をJSON形式で受け取ります。



SMSを削除すると、すべてが簡単になりますが、送受信の次の問題は、各文字がUTF HEXコードでエンコードされ、ord()関数で文字コードを取得し、発生したものを16進数システムに変換し、逆にゼロから4文字までで終わることですメッセージをデコードして、テキストを4文字に分割し、10進数システムに変換し、chr()関数を使用してその番号で文字を取得します。 すべてがとてもシンプルに思えますが、ユニコードではphpがうまく機能しないので、ある種のバイクを発明し、すばやくコードを作成する必要がありました。3時間の実験の結果、このモデムでsmsを操作するためのPHPクラスを取得しました。



<?php mb_internal_encoding("UTF-8"); class ZTE_WEB { public $ip="192.168.0.1",$tz="+5"; public function url($url,$post="") { $ch = curl_init($url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_BINARYTRANSFER,false); curl_setopt($ch,CURLOPT_HEADER,false); curl_setopt($ch,CURLOPT_TIMEOUT, 90); $header = array(); $header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; $header[] = 'Accept-Charset: Windows-1251,utf-8;q=0.7,*;q=0.7'; $header[] = 'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3'; $header[] = 'Pragma: '; curl_setopt($ch, CURLOPT_HTTPHEADER, $header); unset ($header); if(!empty($post)) {curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post);} $content = curl_exec($ch); curl_close($ch); return $content; } public function utf2hex($str) { $l=mb_strlen($str); $res=''; for ($i=0;$i<$l;$i++) { $s = mb_substr($str,$i,1); $s = mb_convert_encoding($s, 'UCS-2LE', 'UTF-8'); $s = dechex(ord(substr($s, 1, 1))*256+ord(substr($s, 0, 1))); if (mb_strlen($s)<4) $s = str_repeat("0",(4-mb_strlen($s))).$s; $res.=$s; } return $res; } public function hex2utf($str) { $l=mb_strlen($str)/4; $res=''; for ($i=0;$i<$l;$i++) $res.=html_entity_decode('&#'.hexdec(mb_substr($str,$i*4,4)).';',ENT_NOQUOTES,'UTF-8'); return $res; } //  public function send($number,$text) { $url = 'http://'.$this->ip.'/goform/goform_set_cmd_process'; $post='isTest=false&'; $post.= 'goformId=SEND_SMS&'; $post.= 'notCallback=true&'; $post.= 'Number='.urlencode($number).'&'; $date = gmdate('y;m;d;h;i;s;'.$this->tz,time()+($this->tz*3600)); $post.= 'sms_time='.urlencode($date).'&'; $post.= 'MessageBody='.($this->utf2hex($text)).'&'; $post.= 'ID=-1&'; $post.= 'encode_type=UNICODE'; return $this->url($url,$post); } //    public function get_sms() { $cont=$this->url('http://'.$this->ip.'/goform/goform_get_cmd_process?cmd=sms_data_total&page=0&data_per_page=5000&mem_store=1&tags=10&order_by=order+by+id+desc'); $cont = json_decode($cont,true); $cont = $cont['messages']; foreach ($cont as $id => $arr) $cont[$id]['content']=$this->hex2utf(($cont[$id]['content'])); return $cont; } //   public function clear_sms($cont=0) { if ($cont===0) $cont=$this->get_sms(); $list_id=''; $url = 'http://'.$this->ip.'/goform/goform_set_cmd_process'; foreach ($cont as $id => $arr) $list_id.=$cont[$id]['id'].';'; $post='isTest=false&goformId=DELETE_SMS&msg_id='.urlencode($list_id).'¬Callback=true'; return $this->url($url,$post); } } $zte = new ZTE_WEB; // $zte->send("+79220000000",""); // $zte->clear_sms($zte->get_sms()); // $zte->get_sms(); ?>
      
      





phpスクリプトはすべてのメッセージを受信し、モデムのメモリクリーニングを行うことを前提としています。 このモデムはRaspberry Piに接続され、さまざまなsmsハンドラーとボットがcrontabにハングアップし、信頼できる番号から送信されたコマンドに応答して特定の決定を下します。



All Articles