基於socket用java實現telnet功能
一、目的
導師安排了個任務:linux下利用java寫一個程式,使其完成以下功能:使用者輸入兩個引數,一個是遠端伺服器的站點地址例如route-server.belwue.de,二是需要traceroute的ip地址(例如1.1.1.1)。
接著,該程式能telnet到route-server.belwue.de上,然後執行traceroute 1.1.1.1命令,程式將執行該命令獲得的結果返回。需要注意的是telnet到伺服器後,可能需要賬號和密碼(也可能不用),然而賬號密碼已經在登入後的返回結果裡有提示了,比如“login with User and password User”,需要將其解析出來並輸入。
二、程式碼
package test;
//import java.io.InputStream;
//import java.io.PrintStream;
import java.util.*;
import java.io.*;
import org.apache.commons.net.telnet.TelnetClient;
/**
* 利用apache net 開源包,使用telnet方式獲取AIX主機資訊
* @version 1.2
*/
public class NetTelnet {
// Telnet物件
private TelnetClient telnet = new TelnetClient();
private InputStream in;
private PrintStream out;
// 提示符。具體請telnet到AIX主機檢視
private char prompt = '#';
// telnet埠
private String port;
// 使用者
private String user;
// 密碼
private String password;
// IP地址
private String ip;
public NetTelnet(String Server) {
try {
// AIX主機IP
//this.ip = "route-server.ip.att.net";
this.ip=Server;
this.password = "rviews";
this.user = "rviews";
this.port = "23";
telnet.connect(ip, Integer.parseInt(port));
//System.out.println("開始獲取輸入流...");
in = telnet.getInputStream();
out = new PrintStream(telnet.getOutputStream());
// 登入
//以下程式碼片是用於判別出各種不同伺服器的返回資訊
//因為伺服器數量不多,所以直接採取有限狀態判斷的辦法
if (Server.equals("route-server.ip.att.net"))
{
readUntil("login:");
write("rviews");
readUntil("Password:");
write("rviews");
}
else if (Server.equals("route-server.twtelecom.net"))
{
readUntil("login:");
write("rviews");
readUntil("Password:");
write("rviews123");
}
else if (Server.equals("public-route-server.is.co.za"))
{
readUntil("Username:");
write("rviews");
readUntil("Password:");
write("rviews");
}
else if (Server.equals("tpr-route-server.saix.net"))
{
readUntil("Username:");
write("saix");
readUntil("Password:");
write("saix");
}
else if (Server.equals("route-server.as6667.net"))
{
readUntil("login:");
write("rviews");
readUntil("Password:");
write("Rviews");
}
else if (Server.equals("route-server.newyork.ny.ibone.comcast.net"))
{
readUntil("Username:");
write("rviews");
}
else if (Server.equals("route-server.host.net"))
{
readUntil("Password:");
write("routes");
}
else if (Server.equals("route-server.east.allstream.com"))
{
readUntil("Username:");
write("rserv");
}
else if (Server.equals("route-server.west.allstream.com"))
{
readUntil("Username:");
write("rserv");
}
else if (Server.equals("route-server.nevadanap.com"))
{
readUntil("Password:");
write("rviews");
}
else if (Server.equals("route-views.oregon-ix.net"))
{
readUntil("Username:");
write("rviews");
}
//readUntil(prompt + " ");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 讀取分析結果
*
* @param pattern
* @return
*/
public String readUntil(String pattern) {
try {
char lastChar = pattern.charAt(pattern.length() - 1);//最後一個字元
StringBuffer sb = new StringBuffer();
//long startMili=System.currentTimeMillis();
//long endMili=System.currentTimeMillis();
char ch = (char) in.read();
while (true) {
sb.append(ch);//若未到最後一個字元則繼續對比下一個字元,並把當前字元儲存進sb中
if (ch == lastChar) {
if (sb.toString().endsWith(pattern)) {
return sb.toString();
}
}
ch = (char) in.read();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 寫
*
* @param value
*/
public void write(String value) {
try {
out.println(value);
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 向目標傳送命令字串
*
* @param command
* @return
*/
public String endUntil(String pattern1,String pattern2) {
try {
char lastChar = pattern1.charAt(pattern1.length() - 1);//最後一個字元
StringBuffer sb = new StringBuffer();
//long startMili=System.currentTimeMillis();
//long endMili=System.currentTimeMillis();
char ch = (char) in.read();
while (true) {
sb.append(ch);//若未到最後一個字元則繼續對比下一個字元,並把當前字元儲存進sb中
if (ch == lastChar) {
if (sb.toString().endsWith(pattern1)) {
return sb.toString();
}
if (sb.toString().endsWith(pattern2)) {
return sb.toString();
}
}
ch = (char) in.read();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String sendCommand(String command, String ipAddress) {
try {
write(command+ipAddress);
System.out.println(command+ipAddress);
//return readUntil(prompt + " ");
readUntil(command+ipAddress);
//System.out.println("check1");
//readUntil("jym");
//System.out.println("check2");
return endUntil("* * *","* * *");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 關閉連線
*
*/
public void disconnect() {
try {
telnet.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] arg) {
try {
//System.out.println("開始執行telnet......");
String Server=arg[0];//"route-server.belwue.de";
String ipAddress=arg[1];//"1.1.1.1";
NetTelnet telnet = new NetTelnet(Server);
String result = telnet.sendCommand("traceroute ",ipAddress);
//System.out.println("顯示結果");
System.out.println(result);
// 最後一定要關閉
telnet.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
相關文章
- 基於Socket.IO實現Android聊天功能Android
- Socket程式設計入門(基於Java實現)程式設計Java
- JAVA Socket 底層是怎樣基於TCP/IP實現的???JavaTCP
- socket實現聊天功能(二)
- 基於 socket.io 快速實現一個實時通訊應用
- Java斷點續傳(基於socket與RandomAccessFile的簡單實現)Java斷點randomMac
- Java 基於UDP 實現單播、組播、廣播 Socket 程式設計JavaUDP程式設計
- 基於Masstransit實現Eventbus的功能
- 用java實現ftp的功能JavaFTP
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- 基於環信實現線上聊天功能
- Python基於TCP實現聊天功能PythonTCP
- telnet連線socket serverServer
- Python基於Socket實現簡易多人聊天室Python
- 關於JAVA 2 網路協議ftp,tfpt,telnet,dns的實現Java協議FTPDNS
- 用RMI實現基於Java的分散式計算(轉)Java分散式
- 使用java實現希表的基礎功能Java
- JAVA - 基於Socket的多執行緒通訊Java執行緒
- C#--基於delegate實現不同功能的排序C#排序
- node.js 用socket實現聊天Node.js
- 基於Java Instrument的Agent實現Java
- iOS基於Socket.io即時通訊IM實現,WebRTC實現視訊通話iOSWeb
- Dubbo之telnet實現
- 如何基於 Channel 實現多路複用
- 使用 Laravel 廣播事件實現基於 Socket.io 的實時訊息通知Laravel事件
- 基於Java+SpringBoot+Mysql實現的古詩詞平臺功能設計與實現三JavaSpring BootMySql
- 基於socket的上傳下載(Java)精簡版Java
- 基於BIT陣列實現全域性功能開關陣列
- 實現基於JWT的Token登入驗證功能JWT
- 基於JQuery實現的文字框自動填充功能jQuery
- 基於CMPP2.0的Socket客戶端(Java) - JAVA程式語言客戶端Java
- 用java實現基於http協議的網路檔案下載JavaHTTP協議
- 基於Java+SpringBoot+Mysql實現的快遞櫃寄取快遞系統功能實現三JavaSpring BootMySql
- 基於Java+SpringBoot+Mysql實現的快遞櫃寄取快遞系統功能實現四JavaSpring BootMySql
- 基於Java+SpringBoot+Mysql實現的快遞櫃寄取快遞系統功能實現八JavaSpring BootMySql
- 基於Java+SpringBoot+Mysql實現的快遞櫃寄取快遞系統功能實現十JavaSpring BootMySql
- 基於Java+SpringBoot心理測評心理測試系統功能實現十JavaSpring Boot
- 基於Java+SpringBoot心理測評心理測試系統功能實現九JavaSpring Boot