差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
| digi:cellular-router:central-management-demo [2024/11/20 19:57] – ↷ 页面名由digi:cellular-router:local-management-demo改为digi:cellular-router:central-management-demo robin | digi:cellular-router:central-management-demo [2024/11/21 11:34] (当前版本) – robin | ||
|---|---|---|---|
| 行 186: | 行 186: | ||
| 此外,在经典界面下,执行SCI> | 此外,在经典界面下,执行SCI> | ||
| - | 对于像SIM卡自动获取的IP地址等信息,则可以通过SCI> | + | 用这种办法几乎可以获取路由器的任意信息,包括log的调试信息,因此非常方便。 |
| + | |||
| + | <hidden 进阶功能-执行CLI命令并读取返回值> | ||
| + | 高阶的功能包括执行设备所支持的CLI命令,甚至也可以是一个自定义python脚本命令和返值值,通过云端触发后,在本地执行,并按需返回相关参数。 | ||
| + | |||
| + | 比如像SIM卡DHCP自动获取的IP地址等信息,通常没必要在本地接口获取,但也是可以实现的,它可以通过SCI> | ||
| + | Java 例程代码: | ||
| + | < | ||
| + | import java.io.IOException; | ||
| + | import java.io.InputStream; | ||
| + | import java.io.OutputStreamWriter; | ||
| + | import javax.net.ssl.HttpsURLConnection; | ||
| + | import java.net.URL; | ||
| + | import java.util.Scanner; | ||
| + | |||
| + | /* Can replace this with any base 64 encoder for basic authentication. For java 6 | ||
| + | * installations on Sun's JRE you can use " | ||
| + | * not work in some installations (using OpenJDK). | ||
| + | * (javax.mail.internet.MimeUtility) also contains a Base 64 encoder in Java 6. A | ||
| + | * public domain version exists at http:// | ||
| + | */ | ||
| + | import org.apache.commons.codec.binary.Base64; | ||
| + | |||
| + | /** | ||
| + | * This is a stub class with a main method to run a Remote Manager web service. | ||
| + | */ | ||
| + | public class WebServiceRequest { | ||
| + | private static final String username = " | ||
| + | private static final String password = " | ||
| + | |||
| + | /** | ||
| + | * Run the web service request | ||
| + | */ | ||
| + | public static void main(String[] args) { | ||
| + | HttpsURLConnection conn = null; | ||
| + | |||
| + | try { | ||
| + | // Create url to the Remote Manager server for a given web service request | ||
| + | URL url = new URL(" | ||
| + | conn = (HttpsURLConnection) url.openConnection(); | ||
| + | conn.setDoOutput(true); | ||
| + | conn.setDoInput(true); | ||
| + | conn.setRequestMethod(" | ||
| + | |||
| + | // Build authentication string | ||
| + | String userpassword = username + ":" | ||
| + | |||
| + | // can change this to use a different base64 encoder | ||
| + | String encodedAuthorization = Base64.encodeBase64String(userpassword.getBytes()).trim(); | ||
| + | |||
| + | // set request headers | ||
| + | conn.setRequestProperty(" | ||
| + | + encodedAuthorization); | ||
| + | conn.setRequestProperty(" | ||
| + | conn.setRequestProperty(" | ||
| + | |||
| + | // Send data to server | ||
| + | OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); | ||
| + | out.write("< | ||
| + | out.write(" | ||
| + | out.write(" | ||
| + | out.write(" | ||
| + | out.write(" | ||
| + | out.write(" | ||
| + | out.write(" | ||
| + | out.write(" | ||
| + | out.write("</ | ||
| + | out.close(); | ||
| + | // Get input stream from response and convert to String | ||
| + | InputStream is = conn.getInputStream(); | ||
| + | |||
| + | Scanner isScanner = new Scanner(is); | ||
| + | StringBuffer buf = new StringBuffer(); | ||
| + | while (isScanner.hasNextLine()) { | ||
| + | buf.append(isScanner.nextLine() + " | ||
| + | } | ||
| + | String responseContent = buf.toString(); | ||
| + | |||
| + | // add line returns between tags to make it a bit more readable | ||
| + | responseContent = responseContent.replaceAll("><", | ||
| + | |||
| + | // Output response to standard out | ||
| + | System.out.println(responseContent); | ||
| + | } catch (Exception e) { | ||
| + | // Print any exceptions that occur | ||
| + | e.printStackTrace(); | ||
| + | } finally { | ||
| + | if (conn != null) | ||
| + | conn.disconnect(); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| {{: | {{: | ||
| 行 194: | 行 286: | ||
| {{: | {{: | ||
| + | </ | ||
| + | ====通过本地REST接口或SNMP接口设置和获取相关信息==== | ||
| + | SNMP能实现大部分功能,包括读取SIM卡信息等,SNMP协议比较复杂,一般专业的网络管理软件支持SNMP协议来管理网络设备。详情请[[https:// | ||
| - | ====通过ssh访问本地接口获取LTEl连网信息==== | + | REST API可以用于读取和设置部分信息,但并不支持读取Modem的相关配置,它的用法详见:[[digi: |
| - | 可以通过Python和Java来ssh到路由器设备并获取相关的CLI信息,这个方法和同DRM类似,但较为不方便,因为它不像DRM可以精细化的直接得到Json键值对,而是需要通过对seesion中命令的输出来提取相关信息,并且相关代码和脚本是第三方提供的。比如使用python或java来获取CLI的输出: | + | |
| + | 要在本地使用完整功能,一般是可通过Python和Java来ssh到路由器设备并获取相关的CLI信息,这个方法和同DRM的API相比较为不方便,因为它不像DRM可以精细化的直接得到Json键值对,而是需要通过对seesion中命令的输出来提取相关信息。这里是一些示例,比如使用python或java来获取CLI的输出: | ||
| {{: | {{: | ||
| 行 207: | 行 303: | ||
| pip install paramiko | pip install paramiko | ||
| </ | </ | ||
| - | 以下是示例代码: | + | |
| + | 以下是<hidden Java示例代码>: | ||
| < | < | ||
| import paramiko | import paramiko | ||
| 行 253: | 行 350: | ||
| </ | </ | ||
| + | </ | ||
| 二、Java的实现方式 | 二、Java的实现方式 | ||
| 在Java中,你可以使用JSch库来实现SSH连接并执行命令,然后获取命令的执行结果。以下是一个简单的示例,演示如何使用JSch库来实现这一功能。 | 在Java中,你可以使用JSch库来实现SSH连接并执行命令,然后获取命令的执行结果。以下是一个简单的示例,演示如何使用JSch库来实现这一功能。 | ||
| + | <hidden Java 例程代码> | ||
| < | < | ||
| import com.jcraft.jsch.*; | import com.jcraft.jsch.*; | ||
| 行 331: | 行 430: | ||
| </ | </ | ||
| + | </ | ||
| 在这个代码示例中,sendCommand 方法用于发送命令到服务器,而 readOutput 方法用于读取命令的输出。请注意,你可能需要根据服务器的实际响应来调整 readOutput 方法中的结束标记,以便正确地捕获命令的输出。 | 在这个代码示例中,sendCommand 方法用于发送命令到服务器,而 readOutput 方法用于读取命令的输出。请注意,你可能需要根据服务器的实际响应来调整 readOutput 方法中的结束标记,以便正确地捕获命令的输出。 | ||