2016-06-24 11 views
2

필자는 오랫동안 인터넷에서 데비안 기반의 리눅스 시스템에서 Huawei E3131과 HiLink를 사용하여 SMS를 보내는 방법을 안내했다. 그들 모두는 효과가 없습니다. 소프트웨어에 대한 업데이트가있는 것으로 보입니다. 화웨이 E3131과 데비안 시스템에서 HiLink를 사용하여 SMS를 보내고받는 방법

  • 소프트웨어 버전 CU1E3131IM : 22.521.23.00.00
    • 장치-이름 : E3131
    • 하드웨어 버전


      HiLink는 다음 내게 버전을 보여줍니다 -Frontend- 버전 : 17.100.08.00.03


    다음 질문 : E3131을 사용하여 데비안 기반 Linux 시스템에서 명령 줄을 사용하여 SMS를 보내고받는 방법은 무엇입니까?


    There is a follow up question for setting up the hardware on a headless system on superuser

  • 답변

    7

    3 단계가 필요합니다 :

    1. SMS/수신 세션 ID
    2. 토큰
    3. 보내기를 가져 오기

    1 단계 - 가져 오기 세션 ID

    내가 자신의 쉘 스크립트에서 다음 명령을 사용하여 세션 ID를 얻는 경우 :

    #!/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 단계 파트 A - SMS 보내기 마지막으로

    또한 두 개의 다른 스크립트 호출 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" 
    

    사용법입니다 :


    3 단계 파트 B - 수신 SMS

    그리고 마지막으로 읽지 않은 SMS를 수신 (avaiable이다하지 않을 경우, 또는 마지막 읽기 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" 
    

    아주 좋은 코딩은 아니지만 작동합니다.

    +1

    e3531에도 적용될 수 있습니다. – Peters

    +0

    대단히 감사합니다! – valentt

    1

    베드로는 정말 멋지다고 설명했지만, 하나의 스크립트 만 있고, 데비안 대신 OpenWrt 라우터에서도 사용합니다.그래서 여기

    는 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 메시지를 읽을 스크립트입니다

    : 내 화웨이 E3276를위한 파이썬 스크립트를 만든
    #!/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" 
    
    0

    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