1. 程式人生 > >java實現telnet連線操作

java實現telnet連線操作

package com.telnet;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.net.SocketException;

import org.apache.commons.net.telnet.TelnetClient;

public class WindowsShell {
	private TelnetClient telnet = new TelnetClient("VT220");

	InputStream in;
	PrintStream out;

	String prompt = ">";

	public WindowsShell(String ip, int port, String user, String password) {
		try {
			telnet.connect(ip, port);
			in = telnet.getInputStream();
			out = new PrintStream(telnet.getOutputStream());
			login(user, password);
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 登入
	 * 
	 * @param user
	 * @param password
	 */
	public void login(String user, String password) {
		// read()Until("login:");
		readUntil("login:");
		write(user);
		readUntil("password:");
		write(password);
		readUntil(prompt + "");
	}

	/**
	 * 讀取分析結果
	 * 
	 * @param pattern
	 * @return
	 */
	public String readUntil(String pattern) {
		try {
			char lastChar = pattern.charAt(pattern.length() - 1);
			StringBuffer sb = new StringBuffer();
			char ch = (char) in.read();
			
			while (true) {
				sb.append(ch);
				if (ch == lastChar) {
					if (sb.toString().endsWith(pattern)) {
						return sb.toString();
					}
				}
				ch = (char) in.read();
//				System.out.print(ch);
			}
		} 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 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) throws UnsupportedEncodingException {
			WindowsShell ws = new WindowsShell("127.0.0.1", 23, "Administrator", "123");
//			System.out.println(ws);
			// 執行的命令
			String str = ws.sendCommand("ipconfig");
			str = new String(str.getBytes("ISO-8859-1"),"GBK");
			System.out.println(str);
			ws.disconnect();
	}

}

此處需要匯入: commons-net-3.3.jar

例子傳送命令為:ipconfig。

返回結果如下圖:


----------------------------------------------------------------------------------------------------------------------------------------

補充一:

做該功能時,客戶那裡使用的是oracle12, 連線資料庫的方式需要使用OCI。之前一直都使用thin方式, oci第一次使用,可以說是一步一個坎。

從網上查找了一下資料:oci方式,客戶端通過native java method呼叫c library訪問服務端,而這個c library就是oci(oracle called interface),因此這個oci總是需要隨著oracle客戶端安裝(從oracle10.1.0開始,單獨提供OCI Instant Client,不用再完整的安裝client)。

1.先從oracle官網下載oracle12客戶端。

2.安裝客戶端。

3.建立一個本地服務。

4.關鍵來了: java程式碼裡面的書寫方式  

Connection connection = DriverManager.getConnection("jdbc:oracle:oci8:wwj/[email protected]");
其中 wwj/wwj123 為使用者名稱密碼,nets為本地服務名。

也算是一個知識點, 記錄下來,給分享給有需要的小夥伴及自己。

-----------------------------------------------------------------------------------------------------------------------------------------

補充二:

在java實現傳送telnet功能傳送命令時,有的命令執行後會讓你輸入確認命令 y/n 。 

此時如果直接傳送 she.sendCommand("y"); 再發送一次回車she.sendCommand("\r\n"); 此時會返回錯誤資訊

y
                       ^
  % Unknown command, the error locates at '^'  
從網上找也沒有找到類似的問題,我就自己嘗試,最終還真讓我試出來了 she.sendCommand("\r\ny\r\n"); 

相關推薦

java實現telnet連線操作

package com.telnet; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.io.UnsupportedEncodin

Zookeeper客戶端基本操作java實現——建立連線、建立節點、新增修改節點內容、獲取子節點、獲取節點資料、刪除節點

一、引入Zookeeper包,新增pom依賴 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper<

Java實現Excel表格操作--API:jxl

一、jxl瞭解   jxl是一個韓國人寫的java操作excel的工具, 在開源世界中,有兩套比較有影響的API可 供使用,一個是POI,一個是jExcelAPI。其中功能相對POI比較弱一點。但jExcelAPI對中文支援非常好,API是純Java的, 並不 依賴Windows系統,即

Java實現遠端連線Linux並執行命令

需要的jar包 <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</art

APPIUM+java實現長按操作

真心不容易啊,網上找了半天,這個操作Python語言居多 然後在小夥伴的幫助下,寫了個java的 終於可以長按錄音操作啦~~~開心 直接附上語句: TouchAction ta = new TouchAction(driver); WebElement

java實現ftp檔案操作的方式有哪些?

由於時間問題,這裡嘗試了兩種方式:Apache組織提供的org.apache.commons.net.ftp、edtFTPj。 一、org.apache.commons.net.ftp 要使用org.apache.commons.net.ftp實現功能需要專案內引入comm

java實現堆的操作(建堆,插入,刪除)

import java.util.Arrays; //小頂堆的程式碼實現 public class Heap { // 向下調整,頂端的大值往下調,主要用於刪除和建堆,i表示要調整的節點索引,n表示堆的最有一個元素索引 // 刪除時候,i是0,建堆時候i從最後一個節

JAVA實現LDAP連線驗證

什麼是LDAP? LDAP(輕量目錄訪問協議),簡單的說,LDAP是一個能得到關於人或者資源的集合、靜態資料的快速方式。 這種說法似乎有點抽象,結合這幾天在做的一個專案具體來談一下。 AD,LDAP,初來乍到的面對這些在課本上不可能碰到的新術語還真是有些懵了,查了大

Java 實現介面的字串連線操作

實現如下介面   詳細過程 一、建立一個類繼承窗體類並實現監聽介面 二、屬性:             5個標籤,串1,串2,+,=,結果        

java用ServerSocket類結合io流實現一對一聊天(java實現簡單的TCP聊天程式只能用telnet連線後方可使用)

粗略寫了點程式碼,其實這種在流的實現方式裡面可以用好多種不同流方面的類,我這沒用最簡單的,而是那邊弄個流這邊弄個流,好讓自己熟悉不同流的類,希望大家別繞暈哈。可能對新手會有點繞,不過久了應該就會了,程

Java實現雙向循環鏈表的基本操作

scrip ide head ring 鏈表的基本操作 print static count out 1 package Eric.ADT; 2 3 /** 4 * <p> 5 * Title:doubleLinkedList 6

求較大整數n的階乘,因為n較大時n的階乘超出了正常類型的表示範圍,采用數組進行操作java實現

階乘 大數字package net.yk.mlgorithm; /** * 求較大數的階乘 * @author Administrator * * @param <T> */ public class ArraysMul<T> { public static void

java實現樹的一般操作

表示 rom class ado span .get poll() tno 2層 樹是數據結構中最基本的結構,今天的博客更新一下樹的基本操作: 樹的節點結構: package tree; /** * TreeNode: 普通的樹節點 *

Java實現兩分彩源碼搭建操作

繼承 否則 接口 普通 避免 偶數 index 必須 this 一:兩分彩源碼搭建介紹:企 娥:217 1793 408 為了避免插入和刪除的線性開銷,就需要保證表可以不連續存儲,否則表的每部分可能都需要整體移動。Java語言中包含一些普通數據結構的實現,這部分叫做Coll

java實現連線vsftpd伺服器,上傳,下載,刪除。

核心程式碼如下: package com.bh.service; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOExcep

處理器如何實現原子操作 java 實現原子操作 轉載

  原文地址:http://www.infoq.com/cn/articles/atomic-operation 1. 引言 原子(atom)本意是“不能被進一步分割的最小粒子”,而原子操作(atomic operation)意為"不可被中斷的一個或一系列操作" 。在多處理器上

JAVA】使用 jedis操作redis——連線、儲存資料、切庫等

本篇運用Java呼叫jedis包(jedis線上文件API ),做簡單操作例項。 安裝jedis 1. 2.9.0 jar 版本下載: jedis-2.9.0.jar 2. 新建專案,新增該驅動包    連線到 redis 服務

JAVA實現資料庫前端與後臺的連線,顯示登入成功並且跳轉至後臺資料庫

撰寫人——軟體二班——陳喜平 注意要啟動資料庫,不然無法和後臺連結 登入成功直接跳轉至資料列表 如圖 登入不成功,提示框彈出 如圖 完整工程包: 連結:https://pan.baidu.com/s/1e_iJQ6sHIOoeLYWoeXBP5A 提取碼:djhh (需

Java實現單鏈表及相關操作

單鏈表是一種鏈式存取的資料結構,用一組地址任意的儲存單元存放線性表中的資料元素。連結串列中的資料是以結點來表示的。 每個結點的構成:元素(資料元素的映象) + 指標(指示後繼元素儲存位置), 元素就是儲存資料的儲存單元, 指標就是連線每個結點的地址資料。

Java——socket實現tcp連線

Server: import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { /** * Socket服務端 */