Отправка и получение SMS из командной строки с помощью Huawei E3131 и HiLink в системе Debian

Я долго искал в интернете руководство по отправке смс по командной строке с Huawei E3131 и HiLink в системе linux на основе Debian. Все они не работали. Похоже, что было обновление программного обеспечения.


HiLink показывает мне следующие версии:

  • Название устройства: E3131
  • Версия аппаратного обеспечения: CU1E3131IM
  • Версия программного обеспечения: 22.521.23.00.00
  • Веб-интерфейс-версия: 17.100.08.00.03

Следующий вопрос: Как отправлять / получать смс с помощью командной строки в системе Linux на основе Debian с E3131?


Существует дополнительный вопрос для настройки оборудования в системе без головы на суперпользователя

4 ответа

Решение

Необходимо 3 шага:

  1. Получить идентификатор сессии
  2. Получить токен
  3. Отправить / получить смс

Шаг 1 - Получить идентификатор сессии

Для получения идентификатора сессии я использую следующую команду в собственном сценарии оболочки:

#!/bin/bash

curl -b session.txt -c session.txt http://192.168.8.1/html/index.html > /dev/null 2>&1

Шаг 2 - Получить токен

Для получения токена я использую следующие команды, также в своем собственном сценарии оболочки:

#!/bin/bash

TOKEN=$(curl -s -b session.txt -c session.txt http://192.168.8.1/html/smsinbox.html)
TOKEN=$(echo $TOKEN | cut -d'"' -f 10)

echo $TOKEN > token.txt

Шаг 3, часть А - Отправка SMS

Наконец, третий сценарий оболочки для отправки смс, который также вызывает два других сценария:

#!/bin/bash

NUMBER=$1
MESSAGE=$2

./session.sh
./token.sh

LENGTH=${#MESSAGE}
TIME=$(date +"%Y-%m-%d %T")
TOKEN=$(<token.txt)

SMS="<request><Index>-1</Index><Phones><Phone>$NUMBER</Phone></Phones><Sca/><Content>$MESSAGE</Content><Length>$LENGTH</Length><Reserved>1</Reserved><Date>$TIME</Date></request>"

echo $SMS

curl -v -b session.txt -c session.txt -H "X-Requested-With: XMLHttpRequest" --data "$SMS" http://192.168.8.1/api/sms/send-sms --header "__RequestVerificationToken: $TOKEN" --header "Content-Type:text/xml"

Использование это:

command phonenumber "text"

Шаг 3, часть Б - получение SMS

А для получения последних непрочитанных смс (или, если их нет в наличии, последних прочитанных смс) я использую следующий скрипт:

#!/bin/bash

./session.sh
./token.sh

TOKEN=$(<token.txt)

DATA="<request><PageIndex>1</PageIndex><ReadCount>1</ReadCount><BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>1</UnreadPreferred></request>"

curl -b session.txt -c session.txt -H "X-Requested-With: XMLHttpRequest" --data "$DATA" http://192.168.8.1/api/sms/sms-list --header "__RequestVerificationToken: $TOKEN" --header "Content-Type:text/xml"

Возможно, это не очень хорошее кодирование, но оно работает.

Хотя Питер объяснил это очень хорошо, но мне нравится иметь один скрипт, а также я использую его на маршрутизаторах OpenWrt вместо Debian.

Итак, вот моя версия для отправки SMS:

#!/bin/sh

RESPONSE=`curl -s -X GET http://192.168.8.1/api/webserver/SesTokInfo`
COOKIE=`echo "$RESPONSE"| grep SessionID=| cut -b 10-147`
TOKEN=`echo "$RESPONSE"| grep TokInfo| cut -b 10-41`
NUMBER=$1
SMS=$2
DATA="<?xml version='1.0' encoding='UTF-8'?><request><Index>-1</Index><Phones><Phone>$NUMBER</Phone></Phones><Sca></Sca><Content>$SMS</Content><Length>11</Length><Reserved>1</Reserved><Date>-1</Date></request>"

curl -v http://192.168.8.1/api/sms/send-sms \
 -H "Cookie: $COOKIE" -H "__RequestVerificationToken: $TOKEN" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
 --data $DATA

А вот скрипт для чтения последних трех смс-сообщений:

#!/bin/sh

RESPONSE=`curl -s -X GET http://192.168.8.1/api/webserver/SesTokInfo`
COOKIE=`echo "$RESPONSE"| grep SessionID=| cut -b 10-147`
TOKEN=`echo "$RESPONSE"| grep TokInfo| cut -b 10-41`
DATA="<request><PageIndex>1</PageIndex><ReadCount>3</ReadCount><BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>1</UnreadPreferred></request>"

curl -b $COOKIE -c $COOKIE -H "X-Requested-With: XMLHttpRequest" --data "$DATA" http://192.168.8.1/api/sms/sms-list --header "__RequestVerificationToken: $TOKEN" --header "Content-Type:text/xml"

Я сделал скрипт Python для моего HUAWEI E3276:

import requests, sys
import xml.etree.ElementTree as ET

msg = "From python"
phone = "PHONE_NUMBER" #To fill
ip = "192.168.1.1" #Dongle ip

#Get token
r = requests.get("http://%s/api/webserver/token" % ip)
root = ET.fromstring(r.content)
token = root[0].text
print "token", token

#Send sms
headers = { "__RequestVerificationToken": token, "Content-Type": "text/xml" }
data = "<request><Index>-1</Index><Phones><Phone>%s</Phone></Phones><Sca/><Content>%s</Content><Length>%d</Length><Reserved>1</Reserved><Date>$TIME</Date></request>" % ( phone, msg, len(msg) )
r = requests.post( "http://%s/api/sms/send-sms" % ip, data=data, headers=headers )
print "send-sms", r.headers, r.content

Я надеюсь, что смогу спасти кого-то неделю:

Скрипты работали наверное пол года отлично. Затем из одного в другой день receiving stoped working. Отправка сработала.

Окно сообщений флешки было заполнено.... Я зашел на веб-интерфейс через http://192.168.8.1 и удалил заполненное поле

(использованный джойстик: Huawei E3531 SurfStick)

Другие вопросы по тегам