我想从Web应用程序更改PROROUTE无线蜂窝路由器(H685)的设置。 更改设置的唯一方法是通过telnet登录路由器并在编辑器中更改文件(即vi)并重新启动。
我想使用JAVA从服务器端以编程方式执行此操作, 我可以使用TelnetClient
连接到路由器并发送命令以下是通过telnet和send命令连接到路由器的示例代码
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 /flash/.disable_fun_list
function_dtu:
function_wifi:
function_gps: 。 。 。
function_wifi:on(此行需要更改)
然后发送命令重启路由器。
$重新启动
任何想法,如何做到这一点。
答案 0 :(得分:0)
你想要做的事听起来很糟糕。
我觉得没有必要在properties([
pipelineTriggers([
triggers: [
[
$class: 'jenkins.triggers.ReverseBuildTrigger',
upstreamProjects: "some_project", result: hudson.model.Result.SUCCESS
]
]
]),
])
编辑器中打开此文件。在这种情况下,人们通常建议创建一个临时文件并将其替换为原始文件。
建议的方法:
使用FileReader上的BufferedReader打开要修改的文件。
修改字符串,如果要替换当前读取的行;如果没有,那么只需进入第3步。
现在,一旦你准备好字符串(无论是否更改或未更改)写入文件,然后创建一个临时文件,并将读取字符串(行)写入此临时文件。
有一次,您已完成原始文件的所有行,然后关闭BufferedReader,并删除(或更好地重命名为原始文件)。将临时文件重命名为原始文件名,并将此临时文件移动到您复制(和修改)内容的原始文件的位置!
代码应该像:
vi
答案 1 :(得分:0)
您可以在命令行中使用vi
而无需实际打开vi
作为应用
你可以将args传递给vi
来替换你需要的字符串
你可以传递args来保存文件,当然还有文件路径。
因此您可能最终通过telnet连接执行此命令
vi -c "%s/function_wifi:on/function_wifi:off/g|wq" /path/to/config/file
这将用function_wifi:on
替换字符串function_wifi:off
并保存文件。
然后发送reboot
命令。
了解更多支票this link
答案 2 :(得分:0)
将上述程序更改为
private String prompt = ">";
而不是
private String prompt = "#";