1 import java.io.*;
2 import java.util.regex.Pattern;
3 import java.util.regex.Matcher;
4 import org.apache.commons.net.telnet.TelnetClient;
5
6 public class TelnetSample {
7
8 // 特定のメッセージが出力されるまで、サーバからのメッセージを読み込む
9 static String readMessage(Reader reader, String message)
10 throws Exception {
11
12 Pattern pattern = Pattern.compile( message, Pattern.DOTALL );
13 StringBuffer buffer = new StringBuffer();
14 Matcher matcher = null;
15
16 while( true ) {
17 int c = reader.read();
18 if (c < 0) break;
19 buffer.append((char)c);
20 if (reader.ready() == false) {
21 matcher = pattern.matcher( buffer.toString() );
22 if (matcher.matches()) break;
23 }
24 }
25
26 if (matcher.find(0) && matcher.groupCount() >= 1) {
27 return( matcher.group(1) );
28 }
29 return( null );
30 }
31
32
33 public static void main(String[] arg) throws Exception {
34
35 String user = "user";
36 String password = "password";
37 String prompt = "hostname \\d+> $";
38
39 // クライアントの生成
40 TelnetClient telnet = new TelnetClient(); ←(1)
41
42 // サーバに接続
43 telnet.connect( "server_name" ); ←(2)
44
45 // 通信用の入出力ストリームの生成
46 InputStream istream = telnet.getInputStream(); ←(3)
47 OutputStream ostream = telnet.getOutputStream(); ←(3)
48 Reader reader = new InputStreamReader( istream ); ←(3)
49 Writer writer = new OutputStreamWriter( ostream ); ←(3)
50
51 // 認証の実行
52 readMessage(reader, ".*login: $"); ←(4)
53 writer.write( user + "\n" ); ←(4)
54 writer.flush(); ←(4)
55 readMessage(reader, "Password: $"); ←(4)
56 writer.write( password + "\n" ); ←(4)
57 writer.flush(); ←(4)
58
59 // プロンプト出力待ち
60 readMessage(reader, ".*" + prompt); ←(5)
61
62 // コマンド実行
63 writer.write( "ps -aef\n"); ←(5)
64 writer.flush(); ←(5)
65
66 // 実行結果取得
67 String output = readMessage(reader, "(.*)" + prompt); ←(6)
68
69 // 実行結果の出力
70 System.out.print( output );
71
72 // ネットワークの切断
73 telnet.disconnect(); ←(7)
74 }
75 }
|