【发布时间】:2017-01-08 04:15:19
【问题描述】:
我想从 Web 应用程序更改 PROROUTE 无线蜂窝路由器 (H685) 的设置。 更改设置的唯一方法是通过 telnet 登录路由器并在编辑器(即 vi)中更改文件并重新启动。
我想使用 JAVA 从服务器端以编程方式执行此操作, 我可以使用 TelnetClient 连接到路由器并发送命令
这里是通过telnet连接到路由器并发送命令的示例代码
public class Test
{
private TelnetClient telnet = new TelnetClient();
private InputStream in;
private PrintStream out;
private String prompt = "#";
public Test(String server, String user, String password) {
try {
// Connect to the specified server
telnet.connect(server, 23);
// Get input and output stream references
in = telnet.getInputStream();
out = new PrintStream(telnet.getOutputStream());
// Log the user on
readUntil("Login:");
write(user);
readUntil("Password:");
write(password);
// Advance to a prompt
readUntil(prompt + " ");
} catch (Exception e) {
e.printStackTrace();
}
}
public String readUntil(String pattern) {
try {
char lastChar = pattern.charAt(pattern.length() - 1);
StringBuffer sb = new StringBuffer();
boolean found = false;
char ch = (char) in.read();
while (true) {
System.out.print(ch);
sb.append(ch);
if (ch == lastChar) {
if (sb.toString().endsWith(pattern)) {
return sb.toString();
}
}
ch = (char) in.read();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void write(String value) {
try {
out.println(value);
out.flush();
System.out.println(value);
} catch (Exception e) {
e.printStackTrace();
}
}
public String sendCommand(String command) {
try {
write(command);
return readUntil(prompt + " ");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void disconnect() {
try {
telnet.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
Test telnet = new Test("192.168.1.1", "username", "pwd");
telnet.sendCommand("ls");
telnet.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
但我必须在编辑器中更新文件。
- 发送命令在vi中打开文件
$vi /flash/.disable_fun_list
function_dtu:
function_wifi:
function_gps: . . . .
function_wifi:on(此行需改)
然后发送命令重启路由器。
$重启
任何想法,如何做到这一点。
【问题讨论】:
-
是否需要在vi中打开文件?另外,你不能创建一个临时文件,在那里进行修改,删除原始文件并用临时文件替换它吗?
-
用 ftp 连接并来回传输文件怎么样?
-
连接后,您可以导航到文件位置,并为您要编辑的行执行
string replace。检查sed例如是否可用?! -
@Plirkee ftp 不是一个选项
-
我不是说导航到某行,你可以在提示符下执行
vi -c 'command_to_replace' /file/path/fname,这样你就可以替换你想要的字符串并使用vi命令功能保存文件,检查这个sharadchhetri.com/2014/07/06/vi-edit-file-without-opening