差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
digi:cellular-router:central-management-demo [2024/11/20 19:57] – ↷ 页面名由digi:cellular-router:local-management-demo改为digi:cellular-router:central-management-demo robindigi:cellular-router:central-management-demo [2024/11/21 11:34] (当前版本) robin
行 186: 行 186:
 此外,在经典界面下,执行SCI>RCI的例程,也可从Query Device Setting或Status命令中获取更多有用的状态或配置信息。 此外,在经典界面下,执行SCI>RCI的例程,也可从Query Device Setting或Status命令中获取更多有用的状态或配置信息。
  
-对于像SIM卡自动获取的IP地址等信息,可以通过SCI>CLI>Send a single Command获取+用这种办法几乎可以获取路由器的任意信息,包括log的调试信息,因此非常方便。 
 + 
 +<hidden 进阶功能-执行CLI命令并读取返回值> 
 +高阶的功能包括执行设备所支持的CLI命令,甚至也可以是一个自定义python脚本命令和返值值,通过云端触发后,在本地执行,并按需返回相关参数。 
 + 
 +比如像SIM卡DHCP自动获取的IP地址等信息,通常没必要在本地接口获取,但也是可以实现的,它可以通过SCI>CLI>Send a single Command获取,也就是发送show network命令并返回相关结果。 
 +Java 例程代码: 
 +<code> 
 +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 "sun.misc.BASE64Encoder" however this will  
 + * not work in some installations (using OpenJDK).  Java mail  
 + * (javax.mail.internet.MimeUtility) also contains a Base 64 encoder in Java 6.  A  
 + * public domain version exists at http://iharder.sourceforge.net/current/java/base64/ 
 + */ 
 +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 = "username"; // put your Remote Manager username here 
 +    private static final String password = "password"; // put your Remote Manager password here 
 + 
 +    /** 
 +     * 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("https://remotemanager.digi.com/ws/sci"); 
 +            conn = (HttpsURLConnection) url.openConnection();  
 +            conn.setDoOutput(true); 
 +            conn.setDoInput(true); 
 +            conn.setRequestMethod("POST");  
 +             
 +            // Build authentication string 
 +            String userpassword = username + ":" + password; 
 + 
 +            // can change this to use a different base64 encoder 
 +            String encodedAuthorization = Base64.encodeBase64String(userpassword.getBytes()).trim(); 
 + 
 +            // set request headers 
 +            conn.setRequestProperty("Authorization", "Basic " 
 +                    + encodedAuthorization); 
 +            conn.setRequestProperty("Content-Type", "text/xml"); 
 +            conn.setRequestProperty("Accept", "text/xml"); 
 +             
 +            // Send data to server 
 +            OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); 
 +            out.write("<sci_request version=\"1.0\"> \r\n"); 
 +            out.write("  <cli> \r\n"); 
 +            out.write("    <targets> \r\n"); 
 +            out.write("      <device id=\"00000000-00000000-0004F3FF-FF4F95C0\"/> \r\n"); 
 +            out.write("    </targets>\r\n"); 
 +            out.write("    <execute timeout=\"10\">show network</execute>\r\n"); 
 +            out.write("    <!-- <execute format=\"base64\">ZGV2aWNlIGNsaSBjb21tYW5k</execute> -->\r\n"); 
 +            out.write("  </cli>\r\n"); 
 +            out.write("</sci_request>\r\n"); 
 +            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() + "\n"); 
 +            } 
 +            String responseContent = buf.toString(); 
 + 
 +            // add line returns between tags to make it a bit more readable 
 +            responseContent = responseContent.replaceAll("><", ">\n<"); 
 + 
 +            // 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(); 
 +        } 
 +    } 
 +
 +</code>
  
 {{:digi:cellular-router:pasted:20241120-175451.png}} {{:digi:cellular-router:pasted:20241120-175451.png}}
行 194: 行 286:
 {{:digi:cellular-router:pasted:20241120-180308.png}} {{:digi:cellular-router:pasted:20241120-180308.png}}
  
 +</hidden>
  
 +====通过本地REST接口或SNMP接口设置和获取相关信息====
 +SNMP能实现大部分功能,包括读取SIM卡信息等,SNMP协议比较复杂,一般专业的网络管理软件支持SNMP协议来管理网络设备。详情请[[https://www.digi.com/resources/documentation/digidocs/90002537/#os/services-snmp-c.htm|参考文档]]
  
-====通过ssh访问本地接口获LTEl连网信息==== +REST API可以用于读和设置部分信息,但并不支持读取Modem的相关配置,它的用法详见:[[digi:cellular-router:dal-restful|使用本地基于Web的REST API 来配置DAL设备]] 
-通过Python和Java来ssh到路由器设备并获取相关的CLI信息,这个方法和同DRM类似,但较为不方便,因为它不像DRM可以精细化的直接得到Json键值对,而是需要通过对seesion中命令的输出来提取相关信息,并且相关代码和脚本是第三方提供的。比如使用python或java来获取CLI的输出:+ 
 +要在本地使用完整功能,一般是可通过Python和Java来ssh到路由器设备并获取相关的CLI信息,这个方法和同DRM的API相比较为不方便,因为它不像DRM可以精细化的直接得到Json键值对,而是需要通过对seesion中命令的输出来提取相关信息。这里是一些示例,比如使用python或java来获取CLI的输出:
 {{:digi:cellular-router:pasted:20241120-185116.png}} {{:digi:cellular-router:pasted:20241120-185116.png}}
  
行 207: 行 303:
 pip install paramiko pip install paramiko
 </code> </code>
-以下是示例代码+ 
 +以下是<hidden Java示例代码>:
 <code> <code>
 import paramiko import paramiko
行 253: 行 350:
  
 </code> </code>
 +</hidden>
  
 二、Java的实现方式 二、Java的实现方式
  
 在Java中,你可以使用JSch库来实现SSH连接并执行命令,然后获取命令的执行结果。以下是一个简单的示例,演示如何使用JSch库来实现这一功能。 在Java中,你可以使用JSch库来实现SSH连接并执行命令,然后获取命令的执行结果。以下是一个简单的示例,演示如何使用JSch库来实现这一功能。
 +<hidden Java 例程代码>
 <code> <code>
 import com.jcraft.jsch.*; import com.jcraft.jsch.*;
行 331: 行 430:
  
 </code> </code>
 +</hidden>
 在这个代码示例中,sendCommand 方法用于发送命令到服务器,而 readOutput 方法用于读取命令的输出。请注意,你可能需要根据服务器的实际响应来调整 readOutput 方法中的结束标记,以便正确地捕获命令的输出。 在这个代码示例中,sendCommand 方法用于发送命令到服务器,而 readOutput 方法用于读取命令的输出。请注意,你可能需要根据服务器的实际响应来调整 readOutput 方法中的结束标记,以便正确地捕获命令的输出。