通过命令行发送和接收SMS,并在Debian系统上使用Huawei E3131和Hilink发送SMS



我很长时间搜索了Internet的指南如何通过命令行发送SMS,并在基于Debian的Linux系统上与Huawei E3131和Hilink一起发送SMS。他们所有人都没有工作。看来该软件有一个更新。


hilink向我显示以下版本:

  • 设备名称:E3131
  • 硬件 - version:cu1e3131im
  • 软件交换:22.521.23.00.00
  • Web-Frontend-version:17.100.08.00.03

以下问题:如何在带有e3131的基于debian的Linux系统上通过命令行发送/接收SMS?


有一个后续问题,用于在Superuser上的无头系统上设置硬件

需要3个步骤:

  1. 获取会话ID
  2. 获取令牌
  3. 发送/接收SMS

步骤1-获取会话ID

用于获取会话ID我在自己的shell脚本中使用以下命令:

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

步骤2-获取令牌

对于获得令牌,我也会在自己的shell脚本中使用以下命令:

#!/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部分A-发送SMS

最后一个用于发送SMS的第三个Shell脚本,该脚本还调用了其他两个脚本:

#!/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 B部分 - 接收SMS

并且用于接收最后一个未读的SMS(或者,如果不避免,则是最后一个阅读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

这是用于阅读最后三个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`
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"

我为我的华为E3276制作了python脚本:

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 session
session = requests.Session()
# get token
r = session.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 = session.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 and 删除 填写框

(二手棒:华为E3531 Surfstick)

最新更新