2013年8月1日 星期四
2011年11月8日 星期二
2011年7月8日 星期五
2011-07-08 電腦概論
vm1
eth0 : LAN1 192.168.X.6/29
eth1 : LAN2 192.168.X.14/29
eth2 : LAN3 192.168.X.25/29
vm2
eth0 : LAN4 192.168.X.22/29
eth1 : LAN3 192.168.X.26/29
eth2 : LAN5 192.168.X.41/29
vm3
eth0 : LAN6 192.168.X.38/29
eth1 : LAN5 192.168.X.42/29
eth2 : 橋接介面卡 192.168.51.X/24
vm3
$su -
安裝路由協定的套件
#yum install quagga -y
#setup 關閉防火牆
初始化所有網路卡NIC
#ifconfig eth0 0.0.0.0 up
#ifconfig eth1 0.0.0.0 up
#ifconfig eth2 0.0.0.0 up
複製設定檔
#cd /etc/quagga
查看該目錄下的檔案
#ls
#cp ripd.conf.sample ripd.conf
#cp ospfd.conf.sample ospfd.conf
啟動zebra & rip 的服務
切換到 /etc/init.d 目錄
#cd /etc/init.d
查看一下目錄下的檔案, 此檔案下的所有檔案都是可執行的程式 (服務)
#ls
zebra 是負責 ip 層設定的服務
#/etc/init.d/zebra start
ripd 是負責 動態路由 RIP 協動的服務
#/etc/init.d/ripd start
正式進入 quagga 的整合模式, exit 回上一層, Ctrl+Z 直接回到第一層
#vtysh
進入 模組 模式
localhost.localdomain#config t
(config)#hostname vm3
進入網路介面卡 eth0 設定 IP 位址並啟動
vm3(config)#interface eth0
vm3(config-if)#ip address 192.168.X.38/29
vm3(config-if)#no shutdown
vm3(config-if)#exit
vm3(config)#interface eth1
vm3(config-if)#ip address 192.168.X.42/29
vm3(config-if)#no shutdown
vm3(config-if)#exit
vm3(config)#interface eth2
vm3(config-if)#ip address 192.168.51.X/24
vm3(config-if)#no shutdown
vm3(config-if)#exit
啟動 forwarding 的功能
vm3(config)#ip forwarding
vm3(config)#exit
查看剛剛所設定的資訊(目前的狀態)
vm3#show running-config?
查看開機時設定的資訊(就是看 zebra.conf & ripd.conf 的內容)
vm3#show startup-config
查看路由表
vm3#show ip route
啟動 RIPv2 的路由協定
vm3#config t
vm3(config)#router rip
vm3(config-router)#version 2
vm3(config-router)#network 192.168.51.0/24
vm3(config-router)#network 192.168.X.32/29
vm3(config-router)#network 192.168.X.40/29
vm3(config-router)#Ctrl+Z
vm3#show ip route
2011年7月7日 星期四
2011-07-07 JAVA
1.http://tw.zkoss.org Firamework
// 學習月份的英文單字的程式
import java.util.Random;
import java.util.Scanner;
class MonthCAI {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
String[] monthString = {
"January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"
}; //另一空間起始記憶體位址
int month = rand.nextInt(12); // 對應的月份:0~11的亂數
System.out.println("問題為" + monthString[month]);
int c=0;
while (true) {
System.out.print("這是幾月呢:");
int m = stdIn.nextInt();
if (m == month + 1)
break;
else {
++c;
System.out.println("答錯了。");
}
if (c>=2)
System.exit(1); //1退出
}
System.out.println("正確答案。");
}
}
-----------------------------------------------------------------------
// 顯示陣列變數的值
class PrintArray {
public static void main(String[] args) {
int[] a = new int[5];
System.out.println("a = " + a);
a = null; //清除記憶體位址
System.out.println("a = " + a);
}
}
-------------------------------------------------------------
// 合計2列3行的矩陣
class Matrix_test {
public static void main(String[] args) {
int[][] x = { {0, 2, 0}, {1, 0, 1} ,{1,1,1}};
for (int i = 0; i < x.length; ++i) {
for (int j = 0; j < x[i].length ; ++j)
//c[i][j] = a[i][j] + b[i][j];
System.out.println(x[i][j]==1 ? '*' : ' ');
}
}
}
-------------------------------------------------------------
//網路抓檔
import java.net.*;
import java.io.*;
public class GetURL1 {
public static void main(String argv[]) throws Exception {
URL url = new URL("http://140.137.222.71/abc.txt"); //URL.class
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); //建立連線;讀進檔案
String line;
StringBuffer sb = new StringBuffer();
while ((line = in.readLine()) != null) {
sb.append(line+"\n");
}
in.close();
System.out.println(sb.toString());
}
}
----------------------------------------------------------------------------
import java.net.*;
import java.io.*;
public class GetURL3 {
public static void main(String argv[]) throws Exception {
URL url = new URL("http://140.137.222.50/abc.txt"); //URL.class
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
int v=0;
String line;
while ((line = in.readLine()) != null) {
for (int i=0; i < line.length() ; i++) {
char c = line.charAt(i); //字串比較
if ( c >=48 && c<=57 )
//System.out.print(c);
v++;
}
}System.out.println(v);
in.close();
//System.out.println(c);
}
}
---------------------------------------------------------------
import java.net.*;
import java.io.*;
public class GetURL4 {
public static void main(String argv[]) throws Exception {
URL url = new URL("http://140.137.222.50/abc1.txt"); //URL.class
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = in.readLine()) != null) {
String[] a1 = line.split(":");
System.out.println(a1[1]);
}
in.close();
//System.out.println(c);
}
}
--------------------------------------------------------------
import java.net.*;
import java.io.*;
public class GetURL5 {
public static void main(String argv[]) throws Exception {
URL url = new URL("http://140.137.222.50/abc2.txt"); //URL.class
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
//String s ;
//String[] a1 = s.split(":");
//System.out.println(a1[1]);
int sum=0;
String s;
while ((s = in.readLine()) != null) {
if (s.isEmpty() == false) {
String[] a1 = s.split(":");
int t=Integer.parseInt(a1[1]);
sum+= t ;
}
} System.out.print(sum);
in.close();
//System.out.println(c);
}
}
----------------------------------------------------------------
String x = "123"; //必需為數字,否則不執行parseInt()
int y = Integer parseInt(x); //字串轉型數值int
-----------------------------------------------------------------
White Space
ASC 10,13 (換行)
ASC 9 (TAB)
ASC 32 (空白)
2011年7月5日 星期二
2011-07-05 電腦概論
vm1 網卡 : LAN1
vm2 網卡 : LAN1
vm3 網卡 : LAN1
vm1的設定
$su -
#ifconfig eth0 192.168.1.1/24 up
vm2的設定
$su -
#ifconfig eth0 192.168.2.2/24 up
此時vm1 與 vm2 應該互 ping 會不通
[原因]
雖然實體是連接在一起, 不過分屬於兩個不同的網段 192.168.1.0/24 與 192.168.2.0/24
啟動 vm3並設定 IP 位址
$su -
#setup 關閉防火牆
#ifconfig eth0 192.168.1.254/24 up
#ifconfig eth0:1 192.168.2.254/24 up
將vm1與vm2設定加入 預設閘道
vm1
#ip route add default via 192.168.1.254
vm2
#ip route add default via 192.168.2.254
啟動vm3的 forwarding 的功能
cat /proc/sys/net/ipv4/ip_forward
#echo "1" > /proc/sys/net/ipv4/ip_forward
此時的vm1 與 vm2 應該可以互通嚕.........YA
狀況二
vm1 網卡 : LAN1
vm2 網卡 : LAN2
vm3 網卡 : LAN1 , LAN2
vm1的設定
$su -
#ifconfig eth0 192.168.1.1/24 up
#ip route add default via 192.168.1.254
vm2的設定
$su -
#ifconfig eth0 192.168.2.2/24 up
#ip route add default via 192.168.2.254
啟動 vm3並設定 IP 位址
$su -
#setup 關閉防火牆
#ifconfig eth0 192.168.1.254/24 up
#ifconfig eth1 192.168.2.254/24 up
啟動vm3的 forwarding 的功能
#echo "1" > /proc/sys/net/ipv4/ip_forward
此時的vm1 與 vm2 應該可以互通嚕.........YA
2011年7月4日 星期一
2011-07-04 JAVA
import java.util.Random;
import java.util.Scanner;
class LinearSearch {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
final int n = 12; // 元素數
int[] a = new int[n]; // 宣告陣列
for (int j = 0; j < n; j++)
a[j] = rand.nextInt(10);
System.out.print("陣列a的所有元素的值\n{ ");
for (int j = 0; j < n; j++)
System.out.print(a[j] + " ");
System.out.println(" }");
System.out.print("搜尋的數值:");
int key = stdIn.nextInt();
int i;
for (i = 0; i < n; i++)
if (a[i] == key)
break;
if (i < n) // 搜尋成功
System.out.println("該值存在於a[" + i + "]。");
else // 搜尋失敗
System.out.println("該值不存在。");
}
}
----------------------------------------------------------------------------------
// 線性搜尋
import java.util.Random;
import java.util.Scanner;
class LinearSearch {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
final int n = 12; // 元素數
int[] a = new int[n]; // 宣告陣列
for (int j = 0; j < n; j++)
a[j] = rand.nextInt(10);
System.out.print("陣列a的所有元素的值\n{ ");
//for (int j = 0; j < n; j++)
//System.out.print(a[j] + " ");
//System.out.println(" }");
for (int j : a)
System.out.print(j + " ");
System.out.print("搜尋的數值:");
int key = stdIn.nextInt();
int i;
for (i = 0; i < n; i++)
if (a[i] == key)
break;
if (i < n) // 搜尋成功
System.out.println("該值存在於a[" + i + "]。");
else // 搜尋失敗
System.out.println("該值不存在。");
}
}
--------------------------------------------------------------------------------------
// 線性搜尋
import java.util.Random;
import java.util.Scanner;
class MyP6_7 {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
final int n = 12; // 元素數
int[] a = new int[n]; // 宣告陣列
for (int j = 0; j < n; j++)
a[j] = rand.nextInt(10);
System.out.print("陣列a的所有元素的值\n{ ");
//for (int j = 0; j < n; j++)
//System.out.print(a[j] + " ");
//System.out.println(" }");
for (int j : a)
System.out.print(j + " ");
System.out.print("搜尋的數值:");
int key = stdIn.nextInt();
int i;
for (i = n-1; i >= 0; i--) //倒回來找
if (a[i] == key)
break;
if (i < n) // 搜尋成功
System.out.println("該值存在於a[" + (i+1) + "]。");
else // 搜尋失敗
System.out.println("該值不存在。");
}
}
-----------------------------------------------------------------------------------
// 線性搜尋
import java.util.Random;
import java.util.Scanner;
class MyP6_7 {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
final int n = 12; // 元素數
int[] a = new int[n]; // 宣告陣列
for (int j = 0; j < n; j++)
a[j] = rand.nextInt(10);
System.out.print("陣列a的所有元素的值\n{ ");
//for (int j = 0; j < n; j++)
//System.out.print(a[j] + " ");
//System.out.println(" }");
for (int j : a)
System.out.print(j + " ");
System.out.print("搜尋的數值:");
int key = stdIn.nextInt();
int i;
for (i = n-1; i >= 0; i--) //倒回來找
if (a[i] == key)
break;
if (i < n && i!=-1) // 搜尋成功
System.out.println("該值存在於a[" + (i+1) + "]。");
else // 搜尋失敗
System.out.println("該值不存在。");
}
}
----------------------------------------------------------------------------------------
// 將陣列元素的順序逆向重整並顯示
import java.util.Random;
import java.util.Scanner;
class ReverseArray {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
System.out.print("元素數:");
int n = stdIn.nextInt(); // 輸入元素數
int[] a = new int[n]; // 宣告陣列
for (int i = 0; i < n; i++) {
a[i] = 10 + rand.nextInt(90);
System.out.println("a[" + i + "] = " + a[i]);
}
for (int i = 0; i < n / 2; i++) {
int t = a[i];
a[i] = a[n - i - 1]; //a[i]與a[n-i-1] swap交換
a[n - i - 1] = t;
}
System.out.println("將元素的排列順序逆轉。");
for (int i = 0; i < n; i++)
System.out.println("a[" + i + "] = " + a[i]);
}
}
----------------------------------------------------------------------------------------
// 線性搜尋
import java.util.Random;
import java.util.Scanner;
class MyP6_12 {
public static void main(String[] args) {
int[] a = {0,1,2,3,4,5,6,7,8,9};
for(int i=0 ; i<10 ; ++i){ //i<10,跑幾次,不一定是10
int r = rand.nextInt(9); //0~8
int t;
t=a[r];
a[r]=a[r+1];
a[r+1]=t;
}
for (int v :a)
System.out.print(v+",");
}
}
---------------------------------------------------------------------------------------------
/**
* 處理檔案及目錄
*
* @author (Shieh-Fu Chen)
* @version (V 1.0 2011/06/27)
*
* 執行結果
* ======================================================================
* CD=D:\bobe\toBalaTech\Develop\Java\java2009\tools\npp587
* D:\\fred.txt
*/
import java.util.Scanner;
import java.io.*;
public class MyFile2 {
public static void main (String args[]) throws IOException {
System.out.println("user.dir = " + System.getProperty("user.dir")); // JVM環境變數;取得 user.dir 環境變數的值
System.setProperty("user.dir", "D:/"); // 改變 user.dir 環境變數的值
// java.io.File 這類別主要是處理檔案及目錄的 PathName, 而不是處理檔案的 I/O (開檔, 讀檔, 存檔),
// 下式只是取得 fred.txt 完整目錄名稱, 並沒有建立新檔
String s = new File("fred.txt").getAbsolutePath(); //File class;檔案不存在一樣成立
System.out.println(s);
if (new File(s).exists()) {
Scanner stdIn = new Scanner(System.in);
System.out.println("進行倒數: ");
int x;
System.out.print("正整數值: ");
x = stdIn.nextInt();
if (x == 0)
System.out.println(new File(s).delete());
}
System.out.println("檔案不存在");
}
}
-------------------------------------------------------------------------------------
/**
* 建立文字檔, 並寫入字串資料
*
* @author (Sung-Lin Chen)
* @version (V 0.1 2011/04/22)
*/
import java.util.Scanner;
import java.io.*;
class MyWriter1 {
public static void main(String[] argv) throws IOException {
// PrintWriter 沒有提供 Append File 的建構子
PrintWriter pWriter = new PrintWriter("d:\\MyWriter1.txt"); //PrintWriter產生一檔案,如有`存在檔案則將內容清空
Scanner stdIn = new Scanner(System.in);
System.out.print("ID:");
String s = stdIn.nextLine(); //nextLine輸入字串,空白亦可
System.out.print("Score:");
int a = stdIn.nextInt();
// 寫入檔案
pWriter.print(s+",");
pWriter.print(a);
// 關閉檔案
pWriter.close();
}
}
---------------------------------------------------------------------------------------
/**
* 將輸入成績, 附加在檔案後面
*
* @author (Sung-Lin Chen)
* @version (V 0.1 2011/04/22)
*
*/
import java.util.Scanner;
import java.io.*;
class MyWriter2 {
public static void main(String[] argv) throws IOException{
// FileWriter 有提供 Append File 的建構子, 但是寫入的方法 (write()) 只提供字元及字串資料型態
FileWriter fWriter = new FileWriter("d:\\MyWriter2.txt", true); //FileWriter-->true資料附加
Scanner stdIn = new Scanner(System.in);
System.out.print("Name:");
String n = stdIn.nextLine();
System.out.print("Address:");
String a = stdIn.nextLine();
fWriter.write(n+","); // write() 無法寫入 double 資料
fWriter.write(a);
fWriter.write("\n"); // 在 記事本 中, 並沒有換行, 應如何解決 ? 在檔案是以ASC碼的10,13(微軟),其它OS為10
fWriter.close();
}
}
-----------------------------------------------------------------------------------------------------
/**
* 輸入五位同學, 國英數三科成績,存入文字檔
*
* @author (Sung-Lin Chen)
* @version (V 0.1 2011/04/22)
*
*/
import java.util.Scanner;
import java.io.*;
class MyWriter3 {
public static void main(String[] argv) throws IOException {
// FileWriter 有提供 Append File 的建構子
FileWriter fWriter = new FileWriter("d:\\MyWriter3.txt", true);
// PrintWriter 有提供好用的寫入方法 print()
PrintWriter pWriter = new PrintWriter(fWriter);
Scanner stdIn = new Scanner(System.in);
System.out.print("學號:");
String n = stdIn.nextLine();
System.out.print("國文:");
int c = stdIn.nextInt();
System.out.print("英文:");
int e = stdIn.nextInt();
System.out.print("數學:");
int m = stdIn.nextInt();
pWriter.print(n+","); // 寫入字串
pWriter.print(c+","); // 寫入整數
pWriter.print(e+","); // 寫入整數
pWriter.print(m); // 寫入整數
// 根據不同作業系統, 寫入正確的換行碼
pWriter.print(System.getProperty("line.separator")); //取得JVM環境變數
pWriter.close();
}
}
----------------------------------------------------------------------------------------------------------
/**
* 讀出文字檔內容
*
* @author (Sung-Lin Chen)
* @version (V 0.1 2011/04/22)
*/
import java.io.*;
public class MyReader1 {
public static void main(String[] args) throws IOException {
FileReader fileReader = new FileReader("d:\\MyWriter2.txt"); //FileReader讀入檔案;如檔案不存在, 則無法RUN;
BufferedReader bReader = new BufferedReader(fileReader); //緩衝;提供很好用的METHOD readLine()
String s;
while((s = bReader.readLine()) != null ) {
System.out.println(s);
}
bReader.close();
}
}
--------------------------------------------------------------------------------------------------------
import java.util.Scanner;
import java.io.*;
class MyReaderWriter {
public static void main(String[] args)throws IOException{
FileWriter fWriter = new FileWriter("d:\\out.txt", false);
FileReader fileReader = new FileReader("d:\\MyWriter2.txt");
BufferedReader bReader = new BufferedReader(fileReader);
String s;
while((s = bReader.readLine()) != null ) {
for (int i=0; i < s.length() ; i++) {
char c = s.charAt(i);
fWriter.write(c==',' ? '$' : c);
/* /* if ( c == ',' )
System.out.print('$');
else
System.out.print(c); */
}
fWriter.write(System.getProperty("line.separator"));
}
fileReader.close();
fWriter.close();
}
}
---------------------------------------------------------------------------------------
/**
* 讀出文字檔內容, 並解析單行文字
*
* @author (Shieh-Fu Chen)
* @version (V 0.1 2011/07/04)
*
*/
import java.io.*;
public class dafumenu {
public static void main(String[] args) throws IOException{
FileReader fileReader = new FileReader("d:\\dafumenu.txt");
BufferedReader bReader = new BufferedReader(fileReader);
String s;
while((s = bReader.readLine()) != null ) {
if (s.equals("[system]"))
System.out.println("system");
else if (s.equals("[account]"))
System.out.println("account");
else if (s.equals("[student]"))
System.out.println("student");
else
System.out.println();
}
fileReader.close();
}
//fileReader.close();
}
2011-07-04 JAVA
import java.util.Random;
import java.util.Scanner;
class LinearSearch {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
final int n = 12; // 元素數
int[] a = new int[n]; // 宣告陣列
for (int j = 0; j < n; j++)
a[j] = rand.nextInt(10);
System.out.print("陣列a的所有元素的值\n{ ");
for (int j = 0; j < n; j++)
System.out.print(a[j] + " ");
System.out.println(" }");
System.out.print("搜尋的數值:");
int key = stdIn.nextInt();
int i;
for (i = 0; i < n; i++)
if (a[i] == key)
break;
if (i < n) // 搜尋成功
System.out.println("該值存在於a[" + i + "]。");
else // 搜尋失敗
System.out.println("該值不存在。");
}
}
----------------------------------------------------------------------------------
// 線性搜尋
import java.util.Random;
import java.util.Scanner;
class LinearSearch {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
final int n = 12; // 元素數
int[] a = new int[n]; // 宣告陣列
for (int j = 0; j < n; j++)
a[j] = rand.nextInt(10);
System.out.print("陣列a的所有元素的值\n{ ");
//for (int j = 0; j < n; j++)
//System.out.print(a[j] + " ");
//System.out.println(" }");
for (int j : a)
System.out.print(j + " ");
System.out.print("搜尋的數值:");
int key = stdIn.nextInt();
int i;
for (i = 0; i < n; i++)
if (a[i] == key)
break;
if (i < n) // 搜尋成功
System.out.println("該值存在於a[" + i + "]。");
else // 搜尋失敗
System.out.println("該值不存在。");
}
}
-------------------------------------------------------------------------------
// 線性搜尋
import java.util.Random;
import java.util.Scanner;
class MyP6_7 {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
final int n = 12; // 元素數
int[] a = new int[n]; // 宣告陣列
for (int j = 0; j < n; j++)
a[j] = rand.nextInt(10);
System.out.print("陣列a的所有元素的值\n{ ");
//for (int j = 0; j < n; j++)
//System.out.print(a[j] + " ");
//System.out.println(" }");
for (int j : a)
System.out.print(j + " ");
System.out.print("搜尋的數值:");
int key = stdIn.nextInt();
int i;
for (i = n-1; i >= 0; i--) //倒回來找
if (a[i] == key)
break;
if (i < n) // 搜尋成功
System.out.println("該值存在於a[" + (i+1) + "]。");
else // 搜尋失敗
System.out.println("該值不存在。");
}
}
------------------------------------------------------------------------------------
// 線性搜尋
import java.util.Random;
import java.util.Scanner;
class MyP6_7 {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
final int n = 12; // 元素數
int[] a = new int[n]; // 宣告陣列
for (int j = 0; j < n; j++)
a[j] = rand.nextInt(10);
System.out.print("陣列a的所有元素的值\n{ ");
//for (int j = 0; j < n; j++)
//System.out.print(a[j] + " ");
//System.out.println(" }");
for (int j : a)
System.out.print(j + " ");
System.out.print("搜尋的數值:");
int key = stdIn.nextInt();
int i;
for (i = n-1; i >= 0; i--) //倒回來找
if (a[i] == key)
break;
if (i < n && i!=-1) // 搜尋成功
System.out.println("該值存在於a[" + (i+1) + "]。");
else // 搜尋失敗
System.out.println("該值不存在。");
}
}
----------------------------------------------------------------------------------------------
// 將陣列元素的順序逆向重整並顯示
import java.util.Random;
import java.util.Scanner;
class ReverseArray {
public static void main(String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);
System.out.print("元素數:");
int n = stdIn.nextInt(); // 輸入元素數
int[] a = new int[n]; // 宣告陣列
for (int i = 0; i < n; i++) {
a[i] = 10 + rand.nextInt(90);
System.out.println("a[" + i + "] = " + a[i]);
}
for (int i = 0; i < n / 2; i++) {
int t = a[i];
a[i] = a[n - i - 1]; //a[i]與a[n-i-1] swap交換
a[n - i - 1] = t;
}
System.out.println("將元素的排列順序逆轉。");
for (int i = 0; i < n; i++)
System.out.println("a[" + i + "] = " + a[i]);
}
}
-----------------------------------------------------------------------------------
// 線性搜尋
import java.util.Random;
import java.util.Scanner;
class MyP6_12 {
public static void main(String[] args) {
int[] a = {0,1,2,3,4,5,6,7,8,9};
for(int i=0 ; i<10 ; ++i){ //i<10,跑幾次,不一定是10
int r = rand.nextInt(9); //0~8
int t;
t=a[r];
a[r]=a[r+1];
a[r+1]=t;
}
for (int v :a)
System.out.print(v+",");
}
}
----------------------------------------------------------------------------
/**
* 處理檔案及目錄
*
* @author (Shieh-Fu Chen)
* @version (V 1.0 2011/06/27)
*
* 執行結果
* ======================================================================
* CD=D:\bobe\toBalaTech\Develop\Java\java2009\tools\npp587
* D:\\fred.txt
*/
import java.util.Scanner;
import java.io.*;
public class MyFile2 {
public static void main (String args[]) throws IOException {
System.out.println("user.dir = " + System.getProperty("user.dir")); // JVM環境變數;取得 user.dir 環境變數的值
System.setProperty("user.dir", "D:/"); // 改變 user.dir 環境變數的值
// java.io.File 這類別主要是處理檔案及目錄的 PathName, 而不是處理檔案的 I/O (開檔, 讀檔, 存檔),
// 下式只是取得 fred.txt 完整目錄名稱, 並沒有建立新檔
String s = new File("fred.txt").getAbsolutePath(); //File class;檔案不存在一樣成立
System.out.println(s);
if (new File(s).exists()) {
Scanner stdIn = new Scanner(System.in);
System.out.println("進行倒數: ");
int x;
System.out.print("正整數值: ");
x = stdIn.nextInt();
if (x == 0)
System.out.println(new File(s).delete());
}
System.out.println("檔案不存在");
}
}
------------------------------------------------------------------------------
/**
* 建立文字檔, 並寫入字串資料
*
* @author (Sung-Lin Chen)
* @version (V 0.1 2011/04/22)
*/
import java.util.Scanner;
import java.io.*;
class MyWriter1 {
public static void main(String[] argv) throws IOException {
// PrintWriter 沒有提供 Append File 的建構子
PrintWriter pWriter = new PrintWriter("d:\\MyWriter1.txt"); //PrintWriter產生一檔案,如有`存在檔案則將內容清空
Scanner stdIn = new Scanner(System.in);
System.out.print("ID:");
String s = stdIn.nextLine(); //nextLine輸入字串,空白亦可
System.out.print("Score:");
int a = stdIn.nextInt();
// 寫入檔案
pWriter.print(s+",");
pWriter.print(a);
// 關閉檔案
pWriter.close();
}
}
-------------------------------------------------------------------------------
/**
* 將輸入成績, 附加在檔案後面
*
* @author (Sung-Lin Chen)
* @version (V 0.1 2011/04/22)
*
*/
import java.util.Scanner;
import java.io.*;
class MyWriter2 {
public static void main(String[] argv) throws IOException{
// FileWriter 有提供 Append File 的建構子, 但是寫入的方法 (write()) 只提供字元及字串資料型態
FileWriter fWriter = new FileWriter("d:\\MyWriter2.txt", true); //FileWriter-->true資料附加
Scanner stdIn = new Scanner(System.in);
System.out.print("Name:");
String n = stdIn.nextLine();
System.out.print("Address:");
String a = stdIn.nextLine();
fWriter.write(n+","); // write() 無法寫入 double 資料
fWriter.write(a);
fWriter.write("\n"); // 在 記事本 中, 並沒有換行, 應如何解決 ?在檔案是以ASC碼的10,13 (微軟),其它OS為10
fWriter.close();
}
}
----------------------------------------------------------------------------------------------
/**
* 輸入五位同學, 國英數三科成績,存入文字檔
*
* @author (Sung-Lin Chen)
* @version (V 0.1 2011/04/22)
*
*/
import java.util.Scanner;
import java.io.*;
class MyWriter3 {
public static void main(String[] argv) throws IOException {
// FileWriter 有提供 Append File 的建構子
FileWriter fWriter = new FileWriter("d:\\MyWriter3.txt", true);
// PrintWriter 有提供好用的寫入方法 print()
PrintWriter pWriter = new PrintWriter(fWriter);
Scanner stdIn = new Scanner(System.in);
System.out.print("學號:");
String n = stdIn.nextLine();
System.out.print("國文:");
int c = stdIn.nextInt();
System.out.print("英文:");
int e = stdIn.nextInt();
System.out.print("數學:");
int m = stdIn.nextInt();
pWriter.print(n+","); // 寫入字串
pWriter.print(c+","); // 寫入整數
pWriter.print(e+","); // 寫入整數
pWriter.print(m); // 寫入整數
// 根據不同作業系統, 寫入正確的換行碼
pWriter.print(System.getProperty("line.separator")); //取得JVM環境變數
pWriter.close();
}
}
-----------------------------------------------------------------------------------------------------------
/**
* 讀出文字檔內容
*
* @author (Sung-Lin Chen)
* @version (V 0.1 2011/04/22)
*/
import java.io.*;
public class MyReader1 {
public static void main(String[] args) throws IOException {
FileReader fileReader = new FileReader("d:\\MyWriter2.txt"); //FileReader讀入檔案;如檔案不存在, 則無法RUN;
BufferedReader bReader = new BufferedReader(fileReader); //緩衝;提供很好用的METHOD readLine()
String s;
while((s = bReader.readLine()) != null ) {
System.out.println(s);
}
bReader.close();
}
}
----------------------------------------------------------------------------------------------------
import java.util.Scanner;
import java.io.*;
class MyReaderWriter {
public static void main(String[] args)throws IOException{
FileWriter fWriter = new FileWriter("d:\\out.txt", false);
FileReader fileReader = new FileReader("d:\\MyWriter2.txt");
BufferedReader bReader = new BufferedReader(fileReader);
String s;
while((s = bReader.readLine()) != null ) {
for (int i=0; i < s.length() ; i++) {
char c = s.charAt(i);
fWriter.write(c==',' ? '$' : c);
/* /* if ( c == ',' )
System.out.print('$');
else
System.out.print(c); */
}
fWriter.write(System.getProperty("line.separator"));
}
fileReader.close();
fWriter.close();
}
}
-------------------------------------------------------------------
/**
* 讀出文字檔內容, 並解析單行文字
*
* @author (Shieh-Fu Chen)
* @version (V 0.1 2011/07/04)
*
*/
import java.io.*;
public class dafumenu {
public static void main(String[] args) throws IOException{
FileReader fileReader = new FileReader("d:\\dafumenu.txt");
BufferedReader bReader = new BufferedReader(fileReader);
String s;
while((s = bReader.readLine()) != null ) {
if (s.equals("[system]"))
System.out.println("system");
else if (s.equals("[account]"))
System.out.println("account");
else if (s.equals("[student]"))
System.out.println("student");
else
System.out.println();
}
fileReader.close();
}
//fileReader.close();
}
2011年7月2日 星期六
2011年6月30日 星期四
2011-07-01 JAVA
code review(程式碼審查)
Design Pattern
class MyP5_66 {
public static void main(String[] args) {
System.out.println(Float.toHexString(3.75f));
}
}
---------------------------------------------------------------------------
// 顯示關係運算子、相等運算子、邏輯否定運算子所產生的值
import java.util.Scanner;
class BooleanTester {
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.print("整數a:"); int a = stdIn.nextInt();
System.out.print("整數b:"); int b = stdIn.nextInt();
System.out.println("a < b = " + (a < b));
System.out.println("a <= b = " + (a <= b));
System.out.println("a > b = " + (a > b));
System.out.println("a >= b = " + (a >= b));
System.out.println("a == b = " + (a == b));
System.out.println("a != b = " + (a != b));
System.out.println("!(a==0) = " + !(a == 0));
System.out.println("!(b==0) = " + !(b == 0));
}
}
------------------------------------------------------------------------------------
import java.util.Scanner;
class MyP6_5 {
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.print("元素數:");
int n = stdIn.nextInt();
int[] a = new int[n];
for (int i = 0; i < n ; i++) {
System.out.print("a[" + i + "] = ");
a[i] = stdIn.nextInt();
}
System.out.print("a = {");
for (int i = 0 ; i < n-1; i++)
System.out.print(a[i] + ",");
System.out.println(a[n-1]+"}");
}
}
---------------------------------------------------------------------------
// 求出並顯示陣列所有元素的總和(強化型for敘述)
class ArraySumForIn {
public static void main(String[] args) {
double[] a = { 1.0, 2.0, 3.0, 4.0, 5.0 };
for (int i = 0; i < a.length; i++)
System.out.println("a[" + i + "] = " + a[i]);
double sum = 0; // 總和
for (double i : a)
sum += i;
System.out.println("所有元素的總和為" + sum + "。");
}
}
---------------------------------------------------------------------------------------
// 以1、2、3、4、5初始化陣列的各個元素後顯示
class IntArrayInit {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
a = new int[] {10,20,30,40,50};
for (int i = 0; i < a.length; i++)
System.out.println("a[" + i + "] = " + a[i]);
}
}
--------------------------------------------------------------------------------
// 輸入陣列所有元素的值並顯示
import java.util.Scanner;
class IntArrayScan {
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.print("元素數:");
int n = stdIn.nextInt(); // 輸入元素數
int[] a = new int[n]; // 產生陣列
for (int i = 0; i < n; i++) {
System.out.print("a[" + i + "] = ");
a[i] = stdIn.nextInt();
}
for (int i = 0; i < n; i++)
System.out.println("a[" + i + "] = " + a[i]);
}
}
-----------------------------------------------------------------------------
// 因輸出回列首而改寫顯示完成的字元
class CarriageReturn {
public static void main(String[] args) {
System.out.print("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
System.out.println("\r12345\\");
}
}
------------------------------------------------------------------------------------
// 從0.0開始遞增0.001至1.0為止,並且顯示其總和(以float控制迴圈)
class FloatSum1 {
public static void main(String[] args) {
float sum = 0.0F;
for (float x = 0.0F; x <= 1.0F; x += 0.1F) {
System.out.println("x = " + x);
sum += x;
}
System.out.println("sum = " + sum);
}
}
2011-06-30 JAVA
2.windows 記憶體配置
4. int 4bytes * 8 = 32bits
long 8bytes * 8 = 64bits
char 2bytes * 8 = 16bits
boolean 2bytes * 8 = 16bits
float 4bytes * 8 = 32bits
double 8bytes * 8 = 64bits
--------------------------------------------------------------------------
class MyP5_60 {
class static void main(String[] args) {
long x = 10; //10為int,casting(改型)
}
}
--------------------------------------------------------------------
class MyP5_60 {
class static void main(String[] args) {
long x = 2148000000L; //預設為int,compiler錯誤;加L則OK!
System.out.println("Long整數測試: " + x);
}
}
2010年12月20日 星期一
關於使用Intel PRO/Wirless LAN 2100 3B Mini PCI Adapter無法連上無線網路
找了許久的時間,終於找到原因,Intel PRO/Wirless LAN 2100 3B Mini PCI Adapter這張網卡並不支援WAP2認證,該怎麼辦?去下載lrwc89ww.exe即可解決WAP2無法認證的問題.
http://www-307.ibm.com/pc/support/site.wss/license.do?filename=mobiles/1rwc89ww.exe
2010年12月14日 星期二
中研院用OTRS做網格與資安管理
中研院用OTRS做網格與資安管理
中研院利用開放源碼的OTRS打造管理跨國網格服務的Ticketing System,發揮了應有的記錄與追蹤資安事件的功能,下一步中研院資安小組將更主動、積極,針對主機、防火牆和路由器的Log(登錄檔)做主動式的監控、記錄,並配合OTRS的Ticketing System,收集資料及發送資安通報。
早期IT部門透過E-mail或電話解決其他部門同仁問題,當IT服務事件數量逐漸增多時,這樣的服務效率便趕不上同仁提出需求與解決需求的速度。因此,有些IT部門便設法建立一套事件通報管理系統(Ticketing System)。中央研究院就利用開放源碼的OTRS(Open Source Ticket Request System)軟體,打造管理網格服務和資安事件通報管理系統。
中研院網格計算團隊大規模使用Ticketing System
中研院網格計算團隊和瑞士、義大利、英國、法國和俄羅斯組成全球核心維運中心,監控全球網格系統並協助區域維運中心處理問題。中研院網格計算團隊則是亞太地區的維運中心,負責整個亞洲地區,包含澳洲、日本、印度、韓國、新加坡和臺灣的網格基本運作。
因為中研院網格計算團隊必須負起網格系統建置、問題排除、應用發展以及區域合作等事宜,包括提供亞太6個國家各種網格服務需求,以及提供網格憑證申請與管理服務。這使得中研院網格計算團隊面臨處理繁雜申請事項的困難。
中研院網格計算團隊除了要監控網格網路外,還得要處理各國提出的網格服務需求。為了有效追蹤需求的處理進度,中研院網格計算團隊專案經理蔡明宏利用開放源碼的OTRS,打造屬於中研院網格計算中心的Ticketing System。
OTRS勝出原因在於低成本、有彈性、容易建置
知名的開放源碼事件管理系統,除了OTRS,還有RT:Request Tracker這一套軟體。
「想要的功能,既有的模組就能夠滿足,甚至還有部分自動化功能,或把2個Ticketing System合而為一。」使用方便是網格計算團隊使用OTRS的首要原因。
其次,因為OTRS是開放源碼,「建置成本較低,還可因應不同IT環境,不用動很多程式碼就可有彈性地修改系統,」
OTRS特別之處還在於,「能夠與網格網路監控系統整合,並結合簡訊和電子郵件方式,對網路監控異常狀態時發送通知。」,這是其他Ticketing System不容易做到的。
因為OTRS是開放源碼,IT部門一定要熟悉Linux,並注意資料庫的支援設定即可。目前OTRS比較大的缺點在於對正體中文的支援較為不足。OTRS與CRM(客戶關係管理)系統的整合,將會是Ticketing System下一步發展的方向。」
中研院資訊中心資安小組用OTRS做資安事件管理
在2007年1月才成立的中研院資訊中心資安小組,則利用OTRS來管控資安事件通報。
中研院資訊中心會接收來自教育部、國內外民間企業、國內外大學資訊中心、技術服務中心等許多外部的資安通報。早期,中研院是由資訊中心網路組及系統組來兼管資訊安全,在收到中研院IP被列為可疑受害名單的資安通報後,網路或系統組成員會將該通報郵件轉寄給受害單位的IT部門同仁。不過,中研院資訊中心資安小組工程師陳凱斌表示,以前的作法只是轉寄資安通報,無法記錄並進一步追蹤受害單位是否有解決問題,因而使得資安通報成效往往不彰,只是虛應了事罷了。
中研院資訊中心在2007年1月正式成立資安小組,負責包含中研院及其各所的資安事件通報與追蹤。為了解決以往資安通報只能單向傳遞資訊,資安小組決定建立一個能夠記錄並追蹤的資安事件通報的管理系統(Ticketing System)。
中研院資訊中心資安小組工程師張智翔負責建立Ticketing System,他也選擇OTRS來建置Ticketing System。他指出,由許多使用者的網路評價來看,OTRS在模組化、設定與操作上,獲得很高的評價。
張智翔表示,OTRS在設定上並不難,但初期安裝時,因為使用Fedora 6.0的作業系統,安裝時出現問題,後來改用Open2作業系統後,問題就解決了。
他說:「從2007年3月開始搜尋合適的Ticketing System,5月安裝,7月正式上線,從評估到正式導入所花費的時間並不久。」同樣地,資安小組也面臨OTRS使用者介面(UI)轉換正體中文的困難,張智翔說,後來是將OTRS支援的簡體中文使用者介面,在記事本或Word中,轉換成正體中文之後,即可取代原本的簡體中文使用者介面。
以往資安通報可能會分散地轉交給其他所的IT部門同仁,中研院資訊中心資安小組工程師陳新民表示,透過OTRS建置的Ticketing System,所有資安通報都會被列管記錄、追蹤,資安小組也可以將被通報有資安狀況而必須立即處理的受害IP,一併通報給各所的IT人員,而各所的IT人員在資安事件解決完後,可以透過Ticketing System做事件處理回覆。陳新民認為,這也解決長期以來,中研院某些所因為IT人力較為短缺的問題,因為對相關資安事件通報反應慢,也沒有記錄可追蹤,資安小組也難以提供任何協助。
陳凱斌表示,目前以OTRS建置的Ticketing System,發揮了應有的記錄與追蹤資安事件的功能,下一步,資安小組將扮演更主動、積極的角色,會針對主機、防火牆和路由器的Log(登錄檔)做主動式的監控、記錄,並配合OTRS的Ticketing System,收集資料及發送資安通報。
2010年12月9日 星期四
網管必懂知識
網管必懂知識
1、什麼時候使用多路由協定?
當兩種不同的路由協定要交換路由訊息時,就要用到多路由協定。當然,路由再分配也可以交換路由訊息。下列情況不必使用多路由協定:
從老版本的內定通訊閘協定( Interior Gateway Protocol,I G P)升級到新版本的I G P。
你想使用另一種路由協定但又必須保留原來的協定。
你想終止內定路由,以免受到其他沒有嚴格過濾監管功能的路由器的干擾。
你在一個由多個廠家的路由器構成的環境下。
什麼是距離向量路由協定?
距離向量路由協定是為小型網路環境設計的。在大型網路環境下,這類協定在學習路由及保持路由將產生較大的流量,佔用過多的頻寬。若果在9
0秒內沒有收到相鄰站台傳送的路由選取表更新,它才認為相鄰站台不可達。每隔30秒,距離向量路由協定就要向相鄰站台傳送整個路由選取表,使相鄰站台的路由選取表得到更新。這樣,它就能從別的站台(直接相連的或其他模式連線的)收集一個網路的清單,以便進行路由選取。距離向量路由協定使用跳數作為度量值,來計算到達目的地要經由的路由器數。
例如,R I P使用B e l l m a n - F o r
d算法確定最短路徑,即只要經由最小的跳數就可到達目的地的線路。最大容許的跳數通常定為1 5。那些必須經由1
5個以上的路由器的終端被認為是不可到達的。
距離向量路由協定有如下幾種: IP RIP、IPX RIP、A p p l e Talk RT M P和I G R P。
什麼是連結狀態路由協定?
連結狀態路由協定更適合大型網路,但由於它的複雜性,使得路由器需要更多的C P
U資源。它能夠在更短的時間內發現已經斷了的鏈路或新連線的路由器,使得協定的會聚時間比距離向量路由協定更短。通常,在1
0秒鐘之內沒有收到鄰站的H E L
LO報文,它就認為鄰站已不可達。一個連結狀態路由器向它的鄰站傳送更新報文,知會它所知道的所有鏈路。它確定最優路徑的度量值是一個數值代價,這個代價的值一般由鏈路的頻寬決定。具有最小代價的鏈路被認為是最優的。在最短路徑優先算法中,最大可能代價的值幾乎可以是無限的。
若果網路沒有發生任何變化,路由器只要週期性地將沒有更新的路由選取表進行刷新就可以了(週期的長短可以從3 0分鐘到2個小時)。
連結狀態路由協定有如下幾種: IP OSPF、IPX NLSP和I S - I S。
一個路由器可以既使用距離向量路由協定,又使用連結狀態路由協定嗎?
可以。每一個接口都可以組態為使用不同的路由協定;但是它們必須能夠通過再分配路由來交換路由訊息。(路由的再分配將在本章的後面進行討論。)
2、什麼是訪問表?
訪問表是管理者加入的一系列控制封包在路由器中輸入、輸出的規則。它不是由路由器自己產生的。訪問表能夠容許或禁止封包進入或輸出到目的地。訪問表的表項是順序執行的,即封包到來時,首先看它是否是受第一條表項約束的,若不是,再順序向?蔥校蝗綣??氳諞惶醣硐釔洌?蘼凼潛輝市砘故潛喚?梗?疾槐卦僦蔥邢旅奼硐畹募觳榱恕?
每一個接口的每一種協定只能有一個訪問表。
支援哪些類型的訪問表?
一個訪問表可以由它的編號來確定。具體的協定及其對應的訪問表編號如下:
◎I P標準訪問表編號:1~9 9
◎I P延伸訪問表編號:1 0 0~1 9 9
◎I P X標準訪問表編號:8 0 0~8 9 9
◎I P X延伸訪問表編號:1 0 0 0~1 0 9 9
◎AppleTa l k訪問表編號:6 0 0~6 9 9
提示在Cisco IOS Release11.2或以上版本中,可以用有名訪問表確定編號在1~199的訪問表。
如何建立IP標準訪問表?
一個I P標準訪問表的建立可以由如下指令來完成: Access-list access list number {permit |
deny} source [source-mask]
在這條指令中:
◎access list number:確定這個入口屬於哪個訪問表。它是從1到9 9的數字。
◎permit | deny:表明這個入口是容許還是阻塞從特定位址來的訊息流量。
◎source:確定源I P位址。
◎s o u r c e - m a s
k:確定位址中的哪些比特是用來進行符合的。若果某個比特是"1",表明位址中該位比特不用管,若果是"0"的話,表明位址中該位比特將被用來進行符合。可以使用關鍵字。
以下是一個路由器組態檔中的訪問表例子:
Router# show access-lists
Standard IP access list 1
deny 204.59.144.0, wildcard bits 0.0.0.255
permit any
3、什麼時候使用路由再分配?
路由再分配通常在那些負責從一個自治系統學習路由,然後向另一個自治系統廣播的路由器上進行組態。若果你在使用I G R P或E I G R
P,路由再分配通常是自動執行的。
4、什麼是管理距離?
管理距離是指一種路由協定的路由可信度。每一種路由協定按可嚎性從高到低,依次分配一個信任等級,這個信任等級就叫管理距離。對於兩種不同的路由協定到一個目的地的路由訊息,路由器首先根據管理距離決定相信哪一個協定。
6、如何組態再分配?
在進行路由再分配之前,你必須首先:
1) 決定在哪兒加入新的協定。
2) 確定自治系統邊界路由器(ASBR)。
3) 決定哪個協定在核心,哪個在邊界。
4) 決定進行路由再分配的方向。
可以使用以下指令再分配路由更新(這個例子是針對OSPF的):
router(config-router)#redistribute protocol [process-id] [metric
metric - value ] [metric-type type - value ] [subnets]
在這個指令中:
◎protocol:指明路由器要進行路由再分配的源路由協定。
主要的值有: bgp、eqp、igrp、isis、ospf、static [ ip ]、connected和rip。
◎process-id:指明OSPF的進度ID。
◎metric:是一個可選的參數,用來指明再分配的路由的度量值。預設的度量值是0。
7、為什麼確定毗鄰路由器很重要?
在一個小型網路中確定毗鄰路由器並不是一個主要問題。因為當一個路由器發生故障時,別的路由器能夠在一個可接受的時間內收斂。但在大型網路中,發現一個故障路由器的時延可能很大。知道毗鄰路由器可以加速收斂,因為路由器能夠更快地知道故障路由器,因為hello報文的間隔比路由器交換訊息的間隔時間短。
使用距離向量路由協定的路由器在毗鄰路由器沒有傳送路由更新訊息時,才能發現毗鄰路由器已不可達,這個時間一般為10~90秒。而使用連結狀態路由協定的路由器沒有收到hello報文就可發現毗鄰路由器不可達,這個間隔時間一般為10秒鐘。
距離向量路由協定和連結狀態路由協定如何發現毗鄰路由器?
使用距離向量路由協定的路由器要建立一個路由表(其中內含與它直接相連的網路),同時它會將這個路由表傳送到與它直接相連的路由器。毗鄰路由器將收到的路由表合併入它自己的路由表,同時它也要將自己的路由表傳送到它的毗鄰路由器。使用連結狀態路由協定的路由器要建立一個連結狀態表,內含整個網路目的站的清單。在更新報文中,每個路由器傳送它的整個清單。當毗鄰路由器收到這個更新報文,它就複制其中的內容,同時將訊息發向它的鄰站。在轉信路由表內容時沒有必要進行重新計算。
注意使用IGRP和EIGRP的路由器廣播hello報文來發現鄰站,同時像OSPF一樣交換路由更新訊息。EIGRP為每一種網路層協定儲存一張鄰站表,它內含鄰站的位址、在佇列中等待傳送的報文的數量、從鄰站接收或向鄰站傳送報文需要的平均時間,以及在確定連結中斷之前沒有從鄰站收到任何報文的時間。
8、什麼是自治系統?
一個自治系統就是處於一個管理機構控制之下的路由器和網路群群組。它可以是一個路由器直接連線到一個LAN上,同時也連到Internet上;它可以是一個由企業骨幹網互連的多個局域網。在一個自治系統中的所有路由器必須相互連線,執行相同的路由協定,同時分配同一個自治系統編號。自治系統之間的連結使用外部路由協定,例如B
G P。
9、什麼是BGP?
BGP(Border
GatewayProtocol)是一種在自治系統之間動態交換路由訊息的路由協定。一個自治系統的經典定義是在一個管理機構控制之下的一群組路由器,它使用IGP和普通度量值向其他自治系統轉信報文。
在BGP中使用自治系統這個術語是為了強調這樣一個事實:一個自治系統的管理對於其他自治系統而言是提供一個統一的內定選路計劃,它為那些通過它可以到達的網路提供了一個一致的描述。
10、BGP支援的會話種類?
BGP相鄰路由器之間的會話是建立在TCP協定之上的。TCP協定提供一種可嚎的傳輸機制,支援兩種類型的會話:
o 外部BGP(EBGP):是在屬於兩個不同的自治系統的路由器之間的會話。這些路由器是毗鄰的,共享相同的介質和子網。
o
內定BGP(IBGP):是在一個自治系統內定的路由器之間的會話。它被用來在自治系統內定協調和同步尋找路由的進度。BGP路由器可以在自治系統的任何位置,甚至中間可以相隔數個路由器。
注意"起始的資料流的內容是整個BGP路由表。但以後路由表發生變化時,路由器只傳輸變化的部分。BGP不需要週期性地更新整個路由表。因此,在連線已建立的期間,一個BGP傳送者必須儲存有目前所有同級路由器共有的整個BGP路由表。BGP路由器週期性地傳送Keep
Alive消息來確認連線是啟用的。當發生錯誤或特殊情況時,路由器就傳送Notification消息。當一條連線發生錯誤時,會產生一個notification消息並中斷連線。"-來自RFC11654、BGP*作。
11、BGP容許路由再分配嗎?
容許。因為BGP主要用來在自治系統之間進行路由選取,所以它必須支援RIP、OSPF和
IGRP的路由選取表的綜合,以便將它們的路由表轉入一個自治系統。BGP是一個外部路由協定,因此它的*作與一個內定路由協定不同。在BGP中,只有當一條路由已經存在於IP路由表中時,才能用NETWORK指令在BGP路由表中建立一條路由。
12、如何顯示在資料庫中的所有BGP路由?
要顯示資料庫中的所有BGP路由,只需在EXEC指令行下輸入:
show ip bgp paths
這個指令的輸出可能是:
Address Hash Refcount MetricPath
0 x 2 9 7 A 9 C 0 2 0 i
13、什麼是水平分割?
水平分割是一種避免路由環的出現和加快路由匯聚的技術。由於路由器可能收到它自己傳送的路由訊息,而這種訊息是無用的,水平分割技術不反向通告任何從終端收到的路由更新訊息,而只通告那些不會由於計數到無窮而清除的路由。
14、路由環是如何產生的?
由於網路的路由匯聚時間的存在,路由表中新的路由或變更的路由不能夠很快在全網中穩定,使得有不一致的路由存在,於是會產生路由環。
15、什麼是度量值?
度量值代表距離。它們用來在尋找路由時確定最優路由。每一種路由算法在產生路由表時,會為每一條通過網路的路徑產生一個數值(度量值),最小的值表示最優路徑。度量值的計算可以只考慮路徑的一個特性,但更複雜的度量值是綜合了路徑的多個特性產生的。一些常用的度量值有:
◎跳步數:報文要通過的路由器輸出連接埠的個數。
◎Ticks:資料鏈路的延時(大約1/18每秒)。
◎代價:可以是一個任意的值,是根據頻寬,費用或其他網路管理者定義的計算方法得到的。
◎頻寬:資料鏈路的容量。
◎時延:報文從源端傳到目的地的時間長短。
◎負載:網路資源或鏈路已被使用的部分的大小。
◎可嚎性:網路鏈路的錯誤比特的比率。
◎最大傳輸單元(MTU):在一條路徑上所有連結可接受的最大消息長度(單位為位元組)。
IGRP使用什麼類型的路由度量值?這個度量值由什麼群組成?
IGRP使用多個路由度量值。它內含如下部分:
◎頻寬:源到目的之間最小的頻寬值。
◎時延:路徑中積累的接口延時。
◎可嚎性:源到目的之間最差的可能可嚎性,基於鏈路保持的狀態。
◎負載:源到目的之間的鏈路在最壞情況下的負載,用比特每秒表示。
◎MTU:路徑中最小的M T U值。
16、度量值可以修改或調整嗎?
加一個正的偏移量。這個指令的完整結構如下:可以使用OFFSET-LIST ROUTER子指令
為訪問表中的網路輸入和輸出度量值加入一個正的偏移量。
offset-list {in|out} offset [access-list] no offset-list {in|out}
offset [access-list]
若果參數LIST的值是0,那麼OFFSET參數將新增到所有的度量值。若果OFFSET的值是0,那麼就沒有任何作用。對於IGRP來說,偏移量的值只加到時延上。這個子指令也適用於RIP和hello路由協定。
使用帶適當參數的NO OFFSET- LIST指令可以清除這個偏移量。
在以下的例子中,一個使用IGRP的路由器在所有輸出度量值的時延上加上偏移量10: offset-list out 10
下面是一個將相同的偏移量新增到訪問表121上的例子:
offset-list out 10 121
17、每個路由器在尋找路由時需要知道哪五部分訊息?
所有的路由器需要如下訊息為報文尋找路由:
◎目的位址:報文傳送的目的主電腦。
◎鄰站的確定:指明誰直接連線到路由器的接口上。
◎路由的發現:發現鄰站知道哪些網路。
◎選取路由:通過從鄰站學習到的訊息,提供最優的(與度量值有關)到達目的地的路徑。
◎保持路由訊息:路由器儲存一張路由表,它存儲所知道的所有路由訊息。
18、Cisco路由器支援的路由協定與其他廠家裝置的協定相容嗎?
除了IGRP和EIGRP,Cisco路由器支援的所有路由協定都與其他廠家實現的相同協定相容。IGRP和EIGRP是Cisco的專利產品。
19、RIP路由表的表項的訊息說明了什麼?
RIP路由表的每一個表項都提供了一定的訊息,內含最終目的位址、到目的地的下一跳位址和度量值。這個度量值表示到目的終端的距離(跳步數)。其他的訊息也可以內含。
路由器問題補充:
1、Cisco3600系列路由器目前是否支援廣域網接口卡WIC-2T和WIC-2A/S?
Cisco3600系列路由器在12.007XK及以上版本支援WIC-2T和WIC-2A/S這兩種廣域網接口卡。
但是需要注意的是:
只有快速乙太網混合網路模組能夠支援這兩種廣域網接口卡。
支援這兩種接口卡的網路模組如下所示:
NM-1FE2W, NM-2FE2W, NM-1FE1R2W, NM-2W。
而乙太網混合網路模組不支援,如下所示:
NM-1E2W,NM-2E2W, NM1E1R2W。
2、Cisco3600系列路由器的NM(4A/S,NM(8A/S網路模組和WIC(2A/S廣域網接口卡支援的最大異/同步速率各是多少?
這些網路模組和廣域網接口卡既能夠支援異步,也能夠支援同步。支援的最大異步速率均為115.2Kbps,最大同步速率均為128Kbps。
3、WIC-2T與WIC-1T的電纜各是哪種?
WIC-1T:DB60轉V35或RS232、 449等電纜。 如:CAB-V35-MT。
WIC-2T:SMART型轉V35或RS232、 449等電纜。 如: CAB-SS-V35-MT。
4、Cisco 7000系列上的MCE1與Cisco 2600/3600上的E1、 CE1有什麼區別?
Cisco 7000上的MCE1可組態為E1、 CE1, 而Cisco 2600/3600上的E1、 CE1僅支援自己的功能。
5、Cisco 2600系列路由器,是否支援VLAN間路由,對IOS軟體有何需求?
Cisco(2600系列路由器中,只有Cisco2620和Cisco2621可以支援VLAN間的
路由(百兆連接埠才支援VLAN間路由)。並且若果支援VLAN間路由,要求IOS軟體必須內含IP Plus特性集。
6、Cisco3660路由器與3620/3640路由器相比在硬體上有那些不同?
不同點如下:
*
Cisco3660路由器基本組態內含1或2個10/100M自適應快速乙太網接口;而Cisco3620/3640基本組態中不內含乙太網接口。
* Cisco3660路由器支援網路模組熱插拔,而 Cisco3620/3640不支援網路模組熱插拔。
* Cisco3660的冗余電源為內置, 而Cisco3620/3640的冗余電源為外置的。
7、為什麼3640不能識別NM-1FE2W?
需要將IOS升級到12.0.7T
交換機問題
關於交換機問題:
1、Catalyst 35500XL/2950XL的堆疊是如何實現的?
a. 需要使用專門的堆疊電纜,1米長或50厘米長(CAB-GS-1M或CAB-GS-50CM)以及專門的千兆堆疊卡GigaStack
GBIC (WS-X3550-XL) (該卡已含CAB-GS-50CM 堆疊電纜)。
b. 可以選用2種堆疊方法:菊花鏈法(提供1G的頻寬)或點對點法(提供 2G的頻寬)。
c. 2種方法都可以做備份。
d. 菊花鏈法最多可支援9台交換機的堆疊, 點對點法最多可支援8台。
2、Catalyst 3550 XL系列交換機做堆疊時,是否支援冗余備份?
Catalyst3550XL系列交換機的堆疊有兩種實現方法:菊花鏈模式和點到點模式。
當使用菊花鏈模式時,堆疊的交換機依次連線,交換機之間可以達到1Gbps的傳輸頻寬;
當使用點到點模式時,需要一台單獨的 Catalyst3508G-XL交換機,
其餘的交換機通過堆疊GBIC卡和堆疊線纜與3508G相連,這種方法最大可以達到2Gbps的全雙工傳輸頻寬。
這兩種方法都分別支援堆疊的冗余連線。當使用菊花鏈連線模式時,冗余連線是通過將最上面的交換機與最下面的交換機用堆疊線纜相連線完成的。而當使用點到點連線時,是通過使用第2台3508交換機來完成的。
4、 Catalyst3550 XL的一個千兆口使用堆疊卡做堆疊後, 另外一個千兆口是否可以連線千兆的交換機或千兆的伺服器?
可以。需使用1000Base-SX GBIC或1000Base-LX/LH GBIC。
5、 Ethernet Channel Tech. 可以套用在什麼網路裝置之間?如何使用?
可以套用在交換機之間, 交換機和路由器之間,交換機和伺服器之間
可以將2個或4個10/100Mbps或1000Mbps連接埠使用 Ethernet Channel
Tech.,達到最多400M(10/100Mbps連接埠)、4G(1000Mbps連接埠)
或800M(10/100Mbps連接埠)、8G(1000Mbps連接埠) 的頻寬。
6、Ethernet Channel Technology有什麼作用?
增加頻寬,負載均衡,線路備份
7、 當連接埠設定成 Ethernet Channel時,如何選取線路?
根據資料畫面的乙太網源位址和目的位址最後1位或2位做或運算,決定從哪條鏈路輸出。對於路由器來說是根據網路位址做或運算,以決定鏈路的輸出。
8、Ethernet Channel Technology 與 PAgP (Port Aggregation Protocol )
的區別?
PAgP是 Ethernet Channel的增強版,它支援在 Ethernet Channel 上的 Spanning Tree
Protocol和Uplink Fast,並支援自動組態 Ethernet Channel 的捆綁。
最少需要的電源數 1 2
包轉信速率 18Mpps 18Mpps
背板頻寬 24Gbps 60Gbps
9、Catalyst4000系列是否支援ISL?
從Supervisor Engine Software Release 5.1開始支援。
10、Catalyst4000交換機的冗余電源選項4008/2和4008/3有何區別?
Catalyst4003交換機機箱上有兩個電源插槽,出廠時本身自帶一個電源,4008/2是專為其定制的冗余電源。Catalyst4006的機箱上有三個電源插槽,出廠時帶有2個電源供電,4008/3是為其定制的私人冗余電源。
11、Catalyst 4006的三層交換模組是否不含乙太網連接埠?
不,Catalyst4006的三層交換模組含有32個10/100自適應連接埠和2個千兆連接埠。
在4003上使用時可替代原有的WS-X4232-GB-RJ模組, 從而不影響網路結構。
12、Catalyst 4000系列模組化交換機使用千兆交換模組時, 如何選用目前存在的兩種交換模組(產品編號如下)?
WS-X4306-GB Catalyst 4000 Gigabit Ethernet Module, 6-Ports (GBIC)
WS-X4418-GB Catalyst 4000 GE Module, Server Switching 18-Ports
(GBIC)
這兩個模組的使用環境不同
WS-X4306-GB是一個6口的千兆交換模組,每個連接埠獨佔千兆的頻寬,適合做網路的主幹,用來連線具有千兆接口的交換機;也可以與具有千兆網卡的伺服器相連。
WS-X4418-GB
是一個18口的千兆交換模組,其中有兩個口是獨佔千兆的頻寬,另外16個口共享8G的全雙工的頻寬,但每個連接埠可以突發到千兆。此模組適合在伺服器比較集中的地方連線千兆的伺服器,而不適合連線網路主幹。
13、Catalyst 6000系列的背板頻寬和包轉信速率各為多少?
Catalyst 6500系列的背板頻寬可延伸到256Gbps, 包轉信速率可延伸到150Mpps; Catalyst
6000系列作為一個經濟有效的解決專案可提供到32Gbps的背板頻寬和15Mpps的包轉信速率。
14、Catalyst 6000系列的MSFC 要求多少M DRAM ?
Catalyst 6000系列IOS軟體存放在MSFC裡, MSFC要求有128M DRAM。 預設組態已含128M DRAM。
15、Catalyst 6000系列上的插槽是否有限制?
除第一個插槽私人於引擎, 第二個插槽可用於備份引擎或線卡, 其它插槽都用於線卡。
16、Catalyst 6000系列有幾種引擎?
Catalyst 6000系列的引擎分為Supervisor Engine 1和Supervisor Engine 1A兩種, 其中
Supervisor Engine 1A 有兩個特定的備份引擎。其型號分別如下: 型號 描述
WS-X6K-SUP1-2GE Catalyst 6000 Supervisor Engine1引擎 含兩個千兆連接埠(需購GBIC)
WS-X6K-SUP1A-2GE Catalyst 6000 Supervisor Engine1A引擎 加強的QOS特性,
含兩個千兆連接埠(需購GBIC)
WS-X6K-SUP1A-PFC Catalyst 6000 Supervisor Engine1A引擎
含兩個千兆連接埠(需購GBIC)和PFC卡
WS-X6K-S1A-PFC/2 Catalyst 6000 Supervisor Engine1A冗余引擎
含兩個千兆連接埠(需購GBIC)和PFC卡
WS-X6K-SUP1A-MSFC Catalyst 6000 Supervisor Engine1A引擎
含兩個千兆連接埠(需購GBIC)和MSFC、 PFC卡
WS-X6K-S1A-MSFC/2 Catalyst 6000 Supervisor Engine1A冗余引擎,
含兩個千兆連接埠(需購GBIC)和MSFC、 PFC卡
17、Catalyst 6000系列上備份引擎與主引擎必須是一致的嗎?
是的。 Catalyst 6000系列的備份引擎與主引擎必須是一致的,
例如, 不能將不帶MSFC&PFC的引擎給帶MSFC&PFC的引擎作備份。
另外, WS-X6K-SUP1A-PFC 和 WS-X6K-SUP1A-MSFC有專門的備份引擎。
主、備引擎的對應關係如下:
主引擎 備份引擎
WS-X6K-SUP1-2GE WS-X6K-SUP1-2GE
WS-X6K-SUP1A-2GE WS-X6K-SUP1A-2GE
WS-X6K-SUP1A-PFC WS-X6K-S1A-PFC/2
WS-X6K-SUP1A-MSFC WS-X6K-S1A-MSFC/2
18、Catalyst 6000系列支援的路由協定有哪些?
Catalyst 6000系列支援的路由協定有:OSPF, IGRP, EIGRP, BGP4, IS-IS, RIP和RIP II;
對於群組播PIM支援sparse和dense兩種模式;
支援的非 IP 路由協定有: NLSP, IPX RIP/SAP, IPX EIGRP, RTMP, Apple Talk
EIGRP和DECnet Phase IV和V。
19、Catalyst 6000系列支援的網路協定有哪些?
MSM上支援 6Mpps 的 IP、 IP 群組播和 IPX 。 引擎上的MSFC 支援 15Mpps的 IP、 IP 群組播、IPX以及
AppleTalk、 VINEs、 DECnet.
20、Catalyst6000上若引擎為SUP-1A-2GE, 怎麼實現三層交換的功能?
用MSM實現。 6000上只有含有MSFC的引擎才能通過MSFC實現三層交換功能, 在6000上, MSFC是不能單獨訂購的。
21、Catalyst? 6000交換機和Catalyst? 6500交換機有何區別?6000交換機是否可以升級到6500交換機?
Catalyst?
6000系列交換機的背板頻寬為32G,而6500系列交換機的背板頻寬最大可以延伸到256G。由於這兩個系列的交換機使用的背板匯流排結構不同,所以6000交換機不能升級到6500系列交換機。
但這兩個系列交換機使用相同的交換模組。
22、Catalyst3508G是否也可以同Catalyst3524一樣採用菊花鏈堆疊模式?
完全可以。
23、在交換機之間組態Uplink-Fast時,是否需要關閉原有Spanning-Tree選項?
不需要,Uplink-Fast實際上使用的是一種簡化的Spanning-Tree算法,
與標準的Spanning-Tree相容,因此不需關閉該功能。
概要介紹網路安全中防火牆和IDS的作用
「安全,是一種意識,而不是某種的技術就能實現真正的安全。」隨著工作的時間漸長,對這句話的體會就越深。再防守嚴密的網路,利用人為的疏忽,管理員的懶惰和社會工程學也可能被輕易攻破。 接下來,讓我們正確地認識一下防火牆和IDS的作用吧。 | ||
UID 206045 帖子 4350 精華 積分 3603 現金 95103 元 宣傳 0 次 存款 3597 元 閱讀權限 120 性別 男 在線時間 1120 小時 註冊時間 2008-5-12 最後登錄 2010-12-9 | ||