2016-08-17 54 views
0

我试图使用SMS Gateway应用程序将我的手机用作短信网关。获取Android手机的请求

该应用程序侦听HTTP GET请求,从请求中提取电话号码和消息,然后发送和SMS。

该应用程序提供了以下目标网址: http://fe80::57ee::c539:6741%rmnet0:9090/sendsms(不是真正的IP)

我的问题是:

  1. 为什么这个样子的IPv6虽然我的手机有一个IPv4地址?

  2. 如何包括在HTTP请求"%rmnet0"

  3. 有什么不对下面的代码node.js? (IP和电话号码节录)

    var request = require('request'); 
    
    function send(phone,message){ 
    
    
    // Set the headers 
    var headers = { 
        'User-Agent':  'Domogeek/4', 
        'Content-Type':  'application/x-www-form-urlencoded' 
    }; 
    
    // Configure the request 
    var options = { 
        url: "http://fe80::57ee::c539:6741%rmnet0:9090/sendsms", 
        // url: "http://92.90.21.38:9090/sendsms", 
        method: 'GET', 
        headers: headers, 
        qs: {'phone': phone, 'text': message} 
    }; 
    
        console.log('GET request'); 
    
    // Start the request 
    request(options, function (error, response, body) { 
        if (!error && response.statusCode == 200) { 
         console.info('SMS sended to: %s => %s', phone, message); 
        } else { 
         console.error('SMS error : %s => %s', error, message); 
        } 
    }); 
    
    } 发送( '00684060640', '欢迎');

非常感谢!

回答

0

该应用正在选择错误的地址。这是一个链接本地地址,它始于fe80,不能从外部连接使用。见here about the reachability scope % sign

看看你的ifconfig命令或加上netcfg取决于您的Android版本,看看地址(S)您的电话。

+0

谢谢,所以应用程序正在监听本地界面。 Android会将传入的请求转发到该链接本地地址?这将如何工作? – jomcfly

0

手机具有IPv6协议,因为所有现代手机使用IPv6。这是4G LTE的强制协议。 IPv4是可选的,手机可能根本没有配置IPv4地址(在这种情况下,手机网络使用NAT64/DNS64等翻译技术将IPv4资源通过IPv6呈现给手机)。

在URL中格式化IPv6文字的正确方法位于括号内。例如:

http://[fe80::57ee::c539:6741%rmnet0]:9090/sendsms 

但请注意,某些HTTP客户端实现不能连接到IPv6链接本地地址。在这种情况下,您可能需要联系应用程序开发人员寻求建议(或者更可能报告错误)。