在 debian 系统上使用华为 E3131 和 HiLink 通过命令行发送和接收短信
Sending and receiving SMS by command line with Huawei E3131 and HiLink on a debian system
我在互联网上搜索了很长时间,寻找如何在基于 debian 的 linux 系统上使用 Huawei E3131 和 HiLink 通过命令行发送短信的指南。他们都没有工作。看来,软件有更新了。
HiLink 向我展示了以下版本:
- 设备名称:E3131
- 硬件版本:CU1E3131IM
- 软件版本:22.521.23.00.00
- Web 前端版本:17.100.08.00.03
以下问题:如何在带有 E3131 的基于 debian 的 linux 系统上通过命令行发送/接收短信?
There is a follow up question for setting up the hardware on a headless system on superuser
需要 3 个步骤:
- 获取会话 ID
- 获取令牌
- 发送/接收短信
第 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 部分 - 发送短信
最后是用于发送短信的第三个 shell 脚本,它还会调用另外两个脚本:
#!/bin/bash
NUMBER=
MESSAGE=
./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 部分 - 接收短信
为了接收最后一条未读短信(或者,如果不可用,最后一条已读短信)我使用以下脚本:
#!/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"
这可能不是很好的编码,但它确实有效。
虽然 Peter 解释得很好,但我喜欢单一脚本,而且我在 OpenWrt 路由器上使用它而不是 Debian。
这是我发送短信的版本:
#!/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=
SMS=
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"
我为我的 HUAWEI 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上访问了Web界面并删除了填充框
(使用棒:华为E3531 SurfStick)
我在互联网上搜索了很长时间,寻找如何在基于 debian 的 linux 系统上使用 Huawei E3131 和 HiLink 通过命令行发送短信的指南。他们都没有工作。看来,软件有更新了。
HiLink 向我展示了以下版本:
- 设备名称:E3131
- 硬件版本:CU1E3131IM
- 软件版本:22.521.23.00.00
- Web 前端版本:17.100.08.00.03
以下问题:如何在带有 E3131 的基于 debian 的 linux 系统上通过命令行发送/接收短信?
There is a follow up question for setting up the hardware on a headless system on superuser
需要 3 个步骤:
- 获取会话 ID
- 获取令牌
- 发送/接收短信
第 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 部分 - 发送短信
最后是用于发送短信的第三个 shell 脚本,它还会调用另外两个脚本:
#!/bin/bash
NUMBER=
MESSAGE=
./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 部分 - 接收短信
为了接收最后一条未读短信(或者,如果不可用,最后一条已读短信)我使用以下脚本:
#!/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"
这可能不是很好的编码,但它确实有效。
虽然 Peter 解释得很好,但我喜欢单一脚本,而且我在 OpenWrt 路由器上使用它而不是 Debian。
这是我发送短信的版本:
#!/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=
SMS=
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"
我为我的 HUAWEI 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上访问了Web界面并删除了填充框
(使用棒:华为E3531 SurfStick)