博客

  • CCNA實驗題總結

     RIP實驗
    壹:首先最重要的事情就是看清題目,弄清題目給妳的信息,是確定其他的路由器沒有問題,只有指定的壹台有問題?還是不知道問題在那裏,估計是所有的路由器都要檢查壹遍,這個很關鍵,
    看清了題目有事備功半的效果!可以避免做無謂的檢查!
    二:壹般是出現如下的故障點給妳處理
    IP地址配錯               妳要仔細檢查,
    NETWORK宣告有問題        壹般是缺少,但是妳要切記,RIP是有類的路由選擇協議,在宣告的時候壹定要
                            使用標准的模式,比如 10.0.0.0  172.16.0.0
                            192.168.10.0  A B C三類壹定要分清!
                            同時記得 RIP只宣告和自己直連的網段,而且用標准模式.
      
    S0口上的時鍾沒有配置    這個妳要到別的路由器上去看有的正確的配置,如果它是56000,妳就56000,如果                        它是64000,妳就64000
    要妳配IP地址          壹般是給妳壹個網段,要妳配第幾個可用的子網的第壹或最後或連續的那幾個地址,                      壹般要注意是否可以使用0子網,同時掩碼千萬要注意,有時給妳的不是標准掩碼
    端口SHUTDOWN         要記得  NO  SHUTDOWN
    三:問題處理完後,千萬要記得存盤!
    具體的實驗題目 妳可以參考   TK46的第三題,要記得所有的命令
    ENABLE
    CONFGI  TERMINAL
    INTERFACE  ETHERNET  0
    IP  ADDRESS   134.163.6.1   255.255.255.0
    NO SHUTDOWN
    EXIT
    INTERFACE   SERIAL  0
    IP  ADDRESS   10.88.0.1    255.255.255.0
    NO SHUTDOWN
    ROUTER  RIP
    (如果是要配置RIP Version 2的話還要加上version 2)
    NETWORK   10.0.0.0
    NETWORK   134.163.0.0
    EXIT
    COPY RUNNING-CONFIG  STARTUP-CONFIG
    OSPF實驗
    壹:首先最重要的事情就是看清題目,弄清題目給妳的信息,是確定其他的路由器沒有問題,只有指定的壹台有問題?還是不知道問題在那裏,估計是所有的路由器都要檢查壹遍,這個很關鍵,
    看清了題目有事備功半的效果!可以避免做無謂的檢查!
    二:壹般是出現如下的故障點給妳處理
    其中壹個 OSPF 的域錯誤       比如屬于AREA 0 寫成AREA  1
                                 這裏說明壹下,在同壹個區域裏的AREA必須壹致!
    還有反掩瑪錯誤               用255.255.255.0
    還有缺少通告                 有壹段網絡沒有宣告,
                                 在這裏說明壹下,其實OSPF的本意不是這樣的,是做路由彙總的,但是在考試中是不現實的。考試主要是考基本,所以壹般妳就可以象RIP宣告那樣,把妳這台路由器連著的端口所屬于的網段宣告壹遍就可以了,但是和RIP的區別就是,
    宣告時候是無類的,所以要采用合適的反掩碼,因爲端口的地址壹般是無類的,所以要宣告所有的和本端口在壹個子網內的全部網段才行!
    比如 192.168.100.5/30
    表示爲 192.168.100.5   255.255.255.252
    宣告所有應該是
    192.168.100.4   0.0.0.3
    如果是 192.168.5.0/22
                                     
    表示爲 192.168.5.0   255.255.252.0
                                     
    宣告所有應該是
                                            
    192.168.4.0   0.0.3.255
                                     
    標准的其實是最好宣告的,
    不標准的壹般子網的網絡地址和反掩碼難計算壹點!
    同時還要指明是屬于哪個區域!
    三:問題處理完後,千萬要記得存盤!
    下面是具體試驗步驟:
    config t
    show run
    ( 壹定要show run 看看這個路由器的OSPF掩碼 和 域 是不是有錯誤, 三個hosts 都要 show run ,找到有問題的那個host  然後進行下面的操作)
    no router ospf 2
    ( 妳可以先show ip ospf 找到他的進程ID  我的是2 )
    show ip ospf
    router ospf 2
    (2是本台路由器的OPSF進程ID,只有本地意義,不必與其他路由器上的OSPF進程ID相同)
    network 網絡號   反掩瑪  areo 0
    network 網絡號   反掩瑪  areo 0
    exit
    copy run start
    VLAN實驗
      說明:
    (1)壹般說給交換機配地址,壹般指的就是給管理VLAN 1配壹個經過計算的IP地址,往往給妳壹個地址,要妳計算出最後壹個或第壹個可用IP地址什麽的來!
    比如:VLAN還是老樣子,叫我配192.168.64.65 255.255.255.224 的最後壹個可用IP
    這裏的地址段是  192.168.64.64到95  由于64和95不能用,所以最先壹個可用地址是  192.168.64.65/27  ,最後壹個可用的地址是192.168.64.94/27
    (2)    注意考試的時候用vlan database進入配置模式也和conf t進入是壹樣的,都可以拿滿分的                   請大家放心。
    (3)注意給VLAN配管理地址  是用的
    SW#CONFIG TERMINAL
    SW(CONFIG)#INTERFACE VLAN  1
    SW(CONFIG-IF)#IP ADDRESS 10.0.0.1  255.255.255.0
    SW(CONFIG-IF)#NO SHUTDOWN
    大家可以把他認爲是壹個物理口(因爲顯示CONFIG-IF),在這個基礎上,可以配IP,還要記得 NO SHUTDOWN
    但是也可以使用
    SW#VLAN DATABASE
    SW(VLAN)#INTERFACE VLAN 1
    SW(CONFIG-IF)#IP ADDRESS 10.0.0.1  255.255.255.0
    SW(CONFIG-IF)#NO SHUTDOWN
    大家注意沒有,不管是用VLAN DATABASE進入,還是用CONFIG TERMINAL進入,最後敲INTERFACE VLAN 1
    都是(CONFIG-IF)#
    所以強烈建議用CONFIG TERMINAL 進入

    題目:要求配新加的switch的 IP ,缺省網關 ,找出VTP域名(在另壹個switch上可以用show vtp status獲得VTP domain信息,用SHOW RUNNING獲得其他如缺省網關等等信息),並把新switch放在同壹個域 ,模式爲客戶模式
    配置實例:SW=2900系列
    sw>en
    sw#config t  
    sw(config)#interface vlan 1
    sw(config-if)#ip address 192.168.10.1 255.255.255.0
    sw(config-if)#no shutdown
    sw(config-if)#exit
    sw(config)#ip default-gateway 192.168.20.1
    sw(config)#vtp domain domain-name  
    sw(config)#vtp mode client  (VTP模式也可以在database模式下配置)
    sw(config)#crtl-z  
    sw#copy running-config startup-config
    SW=1900系列
    (在2950上用SHOW VTP STATUS ,在1900上用SHOW VTP)
    Sw>enable
    Sw#config terminal   (沒有 VLAN DATABASE命令)
    Sw(config)# ip address 192.168.10.1 255.255.255.0
    Sw(config)# ip default-gateway 192.168.20.1
    Sw(config)#vtp domain domain-name
    Sw(config)#vtp server|client
    Sw(config)#exit
    自動保存,不要考慮!
    ACL實驗
    壹:首先最重要的事情就是看清題目,弄清題目給妳的信息,是確定其他的路由器沒有問題,只有指定的壹台有問題?還是不知道問題在那裏,估計是所有的路由器都要檢查壹遍,這個很關鍵,
    看清了題目有事備功半的效果!可以避免做無謂的檢查!
    二:ACL實驗壹般沒有什麽錯誤,壹般都是給出要求,讓妳把它配出來,參考的題目是
    TK
    QUESTION N 54:
    Configure and apply an access list that will prevent telnet access to the TestKing1 router while allowing all other traffic to pass.
    禁止到router
    QUESTION N 307:
    Configure and apply an access list that will block telnet traffic to all networks attached to the TestKing3 router while allowing all other traffic to pass.
    禁止到路由器連接的網絡
    壹定要看清楚題目,到底是要配置的禁止登陸到路由器連接的網絡還是路由器本身。
    另外還要注意壹個原則:標准列表要靠近接收方,而擴展訪問列表要靠近發送方
    要注意 IN  OUT 的使用
    具體的步驟如下:
    壹:禁止訪問路由器本身
    tesking3>enable
    tesking3#show access-lists(要記得檢查)
    tesking3#config terminal
    TestKing3(config)#access-list 101 deny tcp any 192.168.177.1 0.0.0.0 eq 23
    TestKing3(config)#access-list 101 deny tcp any 192.168.133.2 0.0.0.0 eq 23
    TestKing3(config)#access-list 101 permit ip any any
    TestKing3(config)#int e0
    TestKing3(config-if)#ip access-group 101 in
    TestKing3(config-if)#exit
    TestKing3(config)#int s0
    TestKing3(config-if)#ip access-group 101 in
    TestKing3(config-if)#exit
    TestKing3(config)#exit
    Tesking3#copy running  startup
    二禁止訪問路由器所連的網絡
    tesking3>enable
    tesking3#show access-lists(要記得檢查)
    tesking3#config terminal
    TestKing3(config)#access-list 101 deny tcp any 192.168.177.0 0.0.0.255 eq 23
    TestKing3(config)#access-list 101 deny tcp any 192.168.133.0 0.0.0.255 eq 23
    TestKing3(config)#access-list 101 permit ip any any
    TestKing3(config)#int e0
    TestKing3(config-if)#ip access-group 101 out          注意是OUT
    TestKing3(config-if)#exit
    TestKing3(config)#int s1
    TestKing3(config-if)#ip access-group 101 in 
    TestKing3(config-if)#exit
    TestKing3(config)#exit
    Tesking3#copy running  startup
    其他的基本是大同小異!

    ISDN實驗
    根據戰報
    考試是要妳配置壹個基本ISDN的DDR撥號網絡
    會給妳網絡的拓撲,IP地址,網段,DIALER LIST ,號碼串,封裝,交換機的類型的
      所以要熟練記得ISDN DDR的所有配置
    具體的配制步驟如下:
    在全局模式下壹共有3步,
    都爲必須配:               靜態路由
                               ISDN交換機的類型
                               撥號訪問列表(含訪問列表自己)
                               (含認證的遠程USER NAME 和本地密碼)
    router>enable
    router#config terminal
    router(config)#isdn switch-type  basic-5ess
    router(config)#username routerb  password  Richard
    router(config)#ip route 192.168.3.0  255.255.255.0  192.168.1.2
    router(config)#dialer-list 1 protocol  ip permit access-list 100
    router(config)#access-list 100 permit tcp any any eq telnet
    在BRI接口模式下的配置共有6步,
    其中5步是必須配置:         NO SHUTDOWN
                                IP ADDRESS
                                ENCAPSULATION    PPP|HDLC(含認證)
                                激活   DIALER-GROUP   訪問列表號
                                映射   DIALER MAP 。。。
    有1步爲可選:               ISDN的SPID在BRI的兩個B道的配置
    router(config)#inter bri 0
    router(config-if)#no  shutdown
    router(config-if)#encapsulation  ppp
    router(config-if)#ppp authentication   chap
    router(config-if)#ip address 192.168.1.1  255.255.255.0
    router(config-if)#dialer-group  1
    router(config-if)#dialer  map ip 192.168.1.2 name routerb   7245584321
    router(config-if)#isdn spid1  spid1號碼   本地呼叫號碼
    router(config-if)#isdn spid2  spid2號碼   本地呼叫號碼
    具體說明如下:
    第壹:配置ISDN交換機的類型
    第二:配遠端的路由器的名稱和認證密碼
    第三:配靜態路由,去192.168.3.0網段要下壹跳到192.168.1.2上去
    第四:定義敏感流量的列表的列表號爲1,協議用IP  允許訪問列表  100
    如果不寫訪問列表,則表示允許所有的這個協議的流量通過
    第五:訪問列表100允許從任何地方到任何地方的TELNET流量,同時禁止其他流量
    訪問列表可以是標准和擴展
    第六:進入  接口BRI 0 配置模式
    第七:NO SHUTDOWN
    第八:封裝PPP
    第九:PPP認證用CHAP
    第十:給自己配地址,不然怎麽在廣域上和192.168.1.2通訊
    第十壹:用DIALER-GROUP 敏感流量的列表號     激活創建的撥號列表
    第十二:配置撥號映射,DIALER  MAP 協議名稱  遠端下壹跳地址(192.168.1.2) 
           NAME   遠端路由器名稱(ROUTERB)  自己本地呼叫號碼
    第十三:可選配置 ISDN的SPID配置,ISDN  SPID 1和SPID2  然後是給妳的SPID號碼    本地呼叫
    FR實驗
    FR基本沒有出過實驗,但是把FR的配置步驟寫出來,也好!
    具體配置步驟如下:
    FR    在接口的配置模式下有五個步驟,其中必須的有三個步驟
                IP   ADDRESS
                NO SHUTDOWN
                ENCAP
           可選的有兩個
                FRAME  LMI
                FRAME  MAP  協議   下壹跳地址   本地DLCI BROADCATS
    route>enable
    route#config terminal
    router(config)#interface serial 0
    router(config-if)#no shutdown                           打開端口
    router(config-if)#encapsulation  frame-delay  cisco|ietf     封裝指定
    router(config-if)#frame-delay  lmi-type ansi|q933a|cisco     LMI類型指定
    router(config-if)#ip address  192.168.10.1  255.255.255.0   配IP地址
    router(config-if)#frame-delay map 協議名稱 目標地址 本地DLCI  broadcast cisco|ietf                    映射遠端的IP和自己DLCI捆綁
    router(config-if)#exit
    router(config)#exit
    router#copy running startup
    上面是最原始的手動的PVC的配置全過程!
    在新版的CISCO  IOS中,是可以自動檢測本地LMI的類型的,同時如果使用
    逆向ARP功能的話,MAP的映射也是不需要的!
    所以最簡單的配置是如下
    route>enable
    route#config terminal
    router(config)#interface serial 0
    router(config-if)#no shutdown                            切記打開端口
    router(config-if)#encapsulation  frame-delay  cisco|ietf    
    router(config-if)#ip address  192.168.10.1  255.255.255.0
    router(config-if)#exit
    router(config)#exit
    router#copy running startup
    NAT(PAT)實驗
    interface s0/0
      ip address *****  *****
      ip nat outside
    interface fastEthnet 0/0
      ip address *****  *****
      ip nat inside
    access-list 1 permit 192.168.117.128  0.0.0.63
    ip nat pool internet 198.18.131.65  198.18.131.70  netmask  255.255.255.248
    ip nat inside source list 1  pool internet  overload
    ip route  0.0.0.0  0.0.0.0  輸出接口名/下壹跳接口IP
    copy run star

  • 學會理解掌握Cisco錯誤消息

    理解Cisco錯誤消息

      錯誤消息格式

      系統錯誤消息格式如下:
      %Facility – subfacility – Severity – Mnemonic : Message Text
      Facility 它指出錯誤消息涉及的設備名。該值可以是協議、硬件設備或者系統軟件模塊。
      Subfacility 它僅與通道接口處理器(CIP)卡有關。詳細的信息可以參見Cisco文檔的相關章節。
      Severity 它是壹個範圍在0到7之間的數字。數字的值越小,嚴重程度越高。
      Mnemonic 唯壹標識錯誤消息的單值代碼。該代碼通常可以暗示錯誤的類型。
      Message Text 它是錯誤消息的簡短描述,其中包括涉及的路由器硬件和軟件信息。

      下面是壹些錯誤消息的示例。用戶可以查閱CCO ISO文檔的系統錯誤消息壹節,以查找這些錯誤消息的說明。
          %DUAL-3-SIA:Route 171.155.148.192/26 stuck-in-active state in IP-EIGP 211. Cleaning up
      %LANCE-3-OWNERR: Unit 0, buffer ownership error

      需要注意的是,並不是所有的消息都涉及到故障或者問題的狀況。某些消息顯示的是狀態方面的信息。例如,以下消息僅表明ISDN BRI 0接口與特定的遠端數據連接。
          %ISDN-6-CONNECT: Interface BRI0 is now connected to 95551212

      Traceback Report
          某些與路由器內部錯誤相關的錯誤消息包含了traceback信息。在向Cisco TAC報告錯誤時,應在錯誤描述中加入這些信息。

    錯誤消息和事件信息的日志

      根據錯誤消息的重要性和有效性,Cisco錯誤消息可以被記錄到以下位置:

      & #61550;  ;; 控制台
      & #61550;  ;; 虛擬終端
      & #61550;  ;; Syslog服務器
      & #61550;  ;; 內部緩沖區

      logging on命令使日志消息的輸出到上述位置。對于Syslog服務器,必須使用下述全局配置命令指明服務器的IP地址:
        logging ip-address

      通過反複使用這壹命令,可以建立壹個服務器的列表。在管理大型網絡時,通常需要設置冗余服務器。

      logging buffered命令用于將日志信息發送到內部緩沖區。緩沖區的大小必須在4096字節以上。缺省值根據系統平台的不同而不同。用戶需要選擇適合環境的緩沖區大小。如果緩沖區太小,新的消息將會覆蓋舊的消息。這有可能會導致問題。但是,如果緩沖區大小過大將會浪費系統緩存。no logging buffered命令將禁止消息被寫入內部緩存。

      用戶可以使用show logging命令顯示內部緩沖區的內容。如果用戶需要某壹時間段的信息,首先使用NTP或者手工設置時鍾,具體操作爲:
      YH-Router#clock set 11:37:00 December 2000
      YH-Router#sh clock
      11:37:03.596 PST Fri Dec 11 2000

      日志消息的時間戳和調試信息可以使用以下全局配置命令:
      YH-Router (config)#service timestamps log datetime
      YH-Router (config)#service timestamps debug datetime

      terminal monitor命令將在當前終端上顯示調試時的日志信息。該命令不是壹個配置命令。相反,它可以通過telnet到路由器時在命令行方式下使用。

      在大多數情況下,用戶可能需要顯示某壹級別的日志信息。因此,日志信息被分爲八個不同的級別,按照重要程度由高到低排列如下:
      & #61550;  ;; Emergencies
      & #61550;  ;; Alerts
      & #61550;  ;; Critical
      & #61550;  ;; Errors
      & #61550;  ;; Warnings
      & #61550;  ;; Notifications
      & #61550;  ;; Informational
      & #61550;  ;; Debugging  

      例如,需要在控制台上顯示嚴重程度等于或者大于警告(Warning)的所有日志信息,可以使用下述全局配置命令:
      logging console warning

      類似的,將某種類型的日志信息發送到當前的終端時,使用
      logging monitor level

      或者將信息發送到Syslog服務器時使用
      logging trap level

      與terminal monitor命令不同,logging monitor命令是路由器配置的壹部分。前壹種命令不允許在不同的安全級別下執行。

      需要注意的是,將日志記錄到不同的位置時,系統開銷變化很大。將日志記錄到控制台的開銷比較大,然而將日志記錄到虛擬終端時開銷較小。使用Syslog服務器時開銷更小。系統開銷最小的日志寫入方式是寫入內部緩沖區。

    核心轉儲(Core Dump)

      爲了查找路由器崩潰的原因,我們可以使用許多命令來獲取有效的信息。其中我們已經講解了show stacks命令的用法。核心轉儲是系統內存映象的拷貝,它可以被寫入到TFTP服務器中。從這個二進制文件中,我們可以獲得與路由器崩潰或者嚴重誤操作相關的信息,通過這些信息可以排除可能的故障。

      下面的配置命令將核心轉儲寫入到命令中IP地址對應的TFTP服務器上:
      exception dump ip-address

      write core命令通常用于路由器發生嚴重的誤操作但是沒有完全崩潰時,保存核心映像。

      只有運行IOS v 9.0或更高版本的服務器才可以使用核心轉儲。但是,需要注意的是,在使用核心轉儲時,最好獲取有經驗的工程師或者Cisco TAC的支持。

    結束語

      要順利地診斷並排除網絡故障,網絡工程技術人員必須掌握兩種基本的技能。首先是對網絡技術和協議要有清楚的理解,它是診斷與排除網絡故障的基礎。沒有適當的知識和經驗,故障診斷與排除工具比如路由器診斷命令和網絡分析儀都不能發揮其作用。

      網絡工程技術人員必須掌握的第二種技能是將所掌握的知識以有條理的方式應用于診斷和排除網絡故障的過程中。本文雖然只闡述了壹些診斷的命令,但需要強調的是:故障診斷與排除是壹種結構化的方法。許多工程技術人員認爲故障診斷與排除計劃不如研究和應用技術本身重要。事實上,正確的計劃在故障診斷與排除過程中往往起決定性的作用。在故障排除過程中,壹個偶然的行爲可能使故障得以順利解決,但是它不能替代結構化的故障診斷與排除方法。

      網絡故障的排除是壹項系統工程,應該經過定義問題、搜集事實、基于事實考慮可能性、建立行動計劃、實施計劃、觀察結果和循環過程等步驟,這壹過程就如同軟件開發過程的瀑布模型,其重要性是不言而喻的。

     

  • Cisco路由器的安全配置簡易方案

     壹,路由器訪問控制的安全配置
    1,嚴格控制可以訪問路由器的管理員。任何壹次維護都需要記錄備案。
    2,建議不要遠程訪問路由器。即使需要遠程訪問路由器,建議使用訪問控制列表和高強度的密碼控制。
    3,嚴格控制CON端口的訪問。具體的措施有:
    A,如果可以開機箱的,則可以切斷與CON口互聯的物理線路。
    B,可以改變默認的連接屬性,例如修改波特率(默認是96000,可以改爲其他的)。
    C,配合使用訪問控制列表控制對CON口的訪問。
    如:Router(Config)#Access-list 1 permit 192.168.0.1
        Router(Config)#line con 0
        Router(Config-line)#Transport input none
        Router(Config-line)#Login local
        Router(Config-line)#Exec-timeoute 5 0
        Router(Config-line)#access-class 1 in
        Router(Config-line)#end
    D,給CON口設置高強度的密碼。
    4,如果不使用AUX端口,則禁止這個端口。默認是未被啓用。禁止如:
      Router(Config)#line aux 0
      Router(Config-line)#transport input none
      Router(Config-line)#no exec
    5,建議采用權限分級策略。如:
    Router(Config)#username BluShin privilege 10 G00dPa55w0rd
    Router(Config)#privilege EXEC level 10 telnet
    Router(Config)#privilege EXEC level 10 show ip access-list
    6,爲特權模式的進入設置強壯的密碼。不要采用enable password設置密碼。而要采用enable secret命令設置。並且要啓用Service password-encryption。
    7,控制對VTY的訪問。如果不需要遠程訪問則禁止它。如果需要則壹定要設置強壯的密碼。由于VTY在網絡的傳輸過程中爲加密,所以需要對其進行嚴格的控制。如:設置強壯的密碼;控制連接的並發數目;采用訪問列表嚴格控制訪問的地址;可以采用AAA設置用戶的訪問控制等。
    8,IOS的升級和備份,以及配置文件的備份建議使用FTP代替TFTP。如:
    Router(Config)#ip ftp username BluShin
    Router(Config)#ip ftp password 4tppa55w0rd
    Router#copy startup-config ftp:
    9,及時的升級和修補IOS軟件。
    [page]

    二,路由器網絡服務安全配置
    1,禁止CDP(Cisco Discovery Protocol)。如:
      Router(Config)#no cdp run
      Router(Config-if)# no cdp enable
    2,禁止其他的TCP、UDP Small服務。
      Router(Config)# no service tcp-small-servers
      Router(Config)# no service udp-samll-servers
    3,禁止Finger服務。
      Router(Config)# no ip finger
      Router(Config)# no service finger
    4,建議禁止HTTP服務。
      Router(Config)# no ip http server
    如果啓用了HTTP服務則需要對其進行安全配置:設置用戶名和密碼;采用訪問列表進行控制。如:
    Router(Config)# username BluShin privilege 10 G00dPa55w0rd
    Router(Config)# ip http auth local
    Router(Config)# no access-list 10
    Router(Config)# access-list 10 permit 192.168.0.1
    Router(Config)# access-list 10 deny any
    Router(Config)# ip http access-class 10
    Router(Config)# ip http server
    Router(Config)# exit
    5,禁止BOOTp服務。
      Router(Config)# no ip bootp server
    禁止從網絡啓動和自動從網絡下載初始配置文件。
      Router(Config)# no boot network
      Router(Config)# no servic config
    6,禁止IP Source Routing。
      Router(Config)# no ip source-route
    7,建議如果不需要ARP-Proxy服務則禁止它,路由器默認識開啓的。
      Router(Config)# no ip proxy-arp
      Router(Config-if)# no ip proxy-arp
    8,明確的禁止IP Directed Broadcast。
      Router(Config)# no ip directed-broadcast
    9,禁止IP Classless。
      Router(Config)# no ip classless
    10,禁止ICMP協議的IP Unreachables,Redirects,Mask Replies。
      Router(Config-if)# no ip unreacheables
      Router(Config-if)# no ip redirects
      Router(Config-if)# no ip mask-reply
    11,建議禁止SNMP協議服務。在禁止時必須刪除壹些SNMP服務的默認配置。或者需要訪問列表來過濾。如:
      Router(Config)# no snmp-server community public Ro
      Router(Config)# no snmp-server community admin RW
      Router(Config)# no access-list 70
      Router(Config)# access-list 70 deny any
      Router(Config)# snmp-server community MoreHardPublic Ro 70
      Router(Config)# no snmp-server enable traps
      Router(Config)# no snmp-server system-shutdown
      Router(Config)# no snmp-server trap-anth
      Router(Config)# no snmp-server
      Router(Config)# end
    12,如果沒必要則禁止WINS和DNS服務。
      Router(Config)# no ip domain-lookup
      如果需要則需要配置:
      Router(Config)# hostname Router
      Router(Config)# ip name-server 202.102.134.96
    13,明確禁止不使用的端口。
      Router(Config)# interface eth0/3
      Router(Config)# shutdown
    [page]

    三,路由器路由協議安全配置
    1,首先禁止默認啓用的ARP-Proxy,它容易引起路由表的混亂。
    Router(Config)# no ip proxy-arp 或者
    Router(Config-if)# no ip proxy-arp
    2,啓用OSPF路由協議的認證。默認的OSPF認證密碼是明文傳輸的,建議啓用MD5認證。並設置壹定強度密鑰(key,相對的路由器必須有相同的Key)。
      Router(Config)# router ospf 100
    Router(Config-router)# network 192.168.100.0 0.0.0.255 area 100
    ! 啓用MD5認證。
    ! area area-id authentication 啓用認證,是明文密碼認證。
    !area area-id authentication message-digest
    Router(Config-router)# area 100 authentication message-digest
    Router(Config)# exit
    Router(Config)# interface eth0/1
    !啓用MD5密鑰Key爲routerospfkey。
    !ip ospf authentication-key key 啓用認證密鑰,但會是明文傳輸。
    !ip ospf message-digest-key key-id(1-255) md5 key
    Router(Config-if)# ip ospf message-digest-key 1 md5 routerospfkey
    3,RIP協議的認證。只有RIP-V2支持,RIP-1不支持。建議啓用RIP-V2。並且采用MD5認證。普通認證同樣是明文傳輸的。
    Router(Config)# config terminal
    ! 啓用設置密鑰鏈
    Router(Config)# key chain mykeychainname
    Router(Config-keychain)# key 1
    !設置密鑰字串
    Router(Config-leychain-key)# key-string MyFirstKeyString
    Router(Config-keyschain)# key 2
    Router(Config-keychain-key)# key-string MySecondKeyString
    !啓用RIP-V2
    Router(Config)# router rip
    Router(Config-router)# version 2
    Router(Config-router)# network 192.168.100.0
    Router(Config)# interface eth0/1
    ! 采用MD5模式認證,並選擇已配置的密鑰鏈
    Router(Config-if)# ip rip authentication mode md5
    Router(Config-if)# ip rip anthentication key-chain mykeychainname
    4,啓用passive-interface命令可以禁用壹些不需要接收和轉發路由信息的端口。建議對于不需要路由的端口,啓用passive-interface。但是,在RIP協議是只是禁止轉發路由信息,並沒有禁止接收。在OSPF協議中是禁止轉發和接收路由信息。
    ! Rip中,禁止端口0/3轉發路由信息
    Router(Config)# router Rip
    Router(Config-router)# passive-interface eth0/3
    !OSPF中,禁止端口0/3接收和轉發路由信息
    Router(Config)# router ospf 100
    Router(Config-router)# passive-interface eth0/3
    5,啓用訪問列表過濾壹些垃圾和惡意路由信息,控制網絡的垃圾信息流。
    Router(Config)# access-list 10 deny 192.168.1.0 0.0.0.255
    Router(Config)# access-list 10 permit any
    ! 禁止路由器接收更新192.168.1.0網絡的路由信息
    Router(Config)# router ospf 100
    Router(Config-router)# distribute-list 10 in
    !禁止路由器轉發傳播192.168.1.0網絡的路由信息
    Router(Config)# router ospf 100
    Router(Config-router)# distribute-list 10 out
    6,建議啓用IP Unicast Reverse-Path Verification。它能夠檢查源IP地址的准確性,從而可以防止壹定的IP Spooling。但是它只能在啓用CEF(Cisco Express Forwarding)的路由器上使用。
    Router# config t
    ! 啓用CEF
    Router(Config)# ip cef
    !啓用Unicast Reverse-Path Verification
    Router(Config)# interface eth0/1
    Router(Config)# ip verify unicast reverse-path

    四,路由器其他安全配置
    1,及時的升級IOS軟件,並且要迅速的爲IOS安裝補丁。
    2,要嚴格認真的爲IOS作安全備份。
    3,要爲路由器的配置文件作安全備份。
    4,購買UPS設備,或者至少要有冗余電源。
    5,要有完備的路由器的安全訪問和維護記錄日志。
    6,要嚴格設置登錄Banner。必須包含非授權用戶禁止登錄的字樣。
    7,IP欺騙得簡單防護。如過濾非公有地址訪問內部網絡。過濾自己內部網絡地址;回環地址(127.0.0.0/8);RFC1918私有地址;DHCP自定義地址(169.254.0.0/16);科學文檔作者測試用地址(192.0.2.0/24);不用的組播地址(224.0.0.0/4);SUN公司的古老的測試地址(20.20.20.0/24;204.152.64.0/23);全網絡地址(0.0.0.0/8)。
    Router(Config)# access-list 100 deny ip 192.168.0.0 0.0.0.255 any log
    Router(Config)# access-list 100 deny ip 127.0.0.0 0.255.255.255 any log
    Router(Config)# access-list 100 deny ip 192.168.0.0 0.0.255.255 any log
    Router(Config)# access-list 100 deny ip 172.16.0.0 0.15.255.255 any log
    Router(Config)# access-list 100 deny ip 10.0.0.0 0.255.255.255 any log
    Router(Config)# access-list 100 deny ip 169.254.0.0 0.0.255.255 any log
    Router(Config)# access-list 100 deny ip 192.0.2.0 0.0.0.255 any log
    Router(Config)# access-list 100 deny ip 224.0.0.0 15.255.255.255 any
    Router(Config)# access-list 100 deny ip 20.20.20.0 0.0.0.255 any log
    Router(Config)# access-list 100 deny ip 204.152.64.0 0.0.2.255 any log
    Router(Config)# access-list 100 deny ip 0.0.0.0 0.255.255.255 any log
    8,建議采用訪問列表控制流出內部網絡的地址必須是屬于內部網絡的。如:
    Router(Config)# no access-list 101
    Router(Config)# access-list 101 permit ip 192.168.0.0 0.0.0.255 any
    Router(Config)# access-list 101 deny ip any any log
    Router(Config)# interface eth 0/1
    Router(Config-if)# description “internet Ethernet”
    Router(Config-if)# ip address 192.168.0.254 255.255.255.0
    Router(Config-if)# ip access-group 101 in
    9,TCP SYN的防範。如:
    A: 通過訪問列表防範。
    Router(Config)# no access-list 106
    Router(Config)# access-list 106 permit tcp any 192.168.0.0 0.0.0.255 established
    Router(Config)# access-list 106 deny ip any any log
    Router(Config)# interface eth 0/2
    Router(Config-if)# description “external Ethernet”
    Router(Config-if)# ip address 192.168.1.254 255.255.255.0
    Router(Config-if)# ip access-group 106 in
    B:通過TCP截獲防範。(這會給路由器産生壹定負載)
    Router(Config)# ip tcp intercept list 107
    Router(Config)# access-list 107 permit tcp any 192.168.0.0 0.0.0.255
    Router(Config)# access-list 107 deny ip any any log
    Router(Config)# interface eth0
    Router(Config)# ip access-group 107 in
    10,LAND.C 進攻的防範。
    Router(Config)# access-list 107 deny ip host 192.168.1.254 host 192.168.1.254 log
    Router(Config)# access-list permit ip any any
    Router(Config)# interface eth 0/2
    Router(Config-if)# ip address 192.168.1.254 255.255.255.0
    Router(Config-if)# ip access-group 107 in
    11,Smurf進攻的防範。
    Router(Config)# access-list 108 deny ip any host 192.168.1.255 log
    Router(Config)# access-list 108 deny ip any host 192.168.1.0 log
    12,ICMP協議的安全配置。對于進入ICMP流,我們要禁止ICMP協議的ECHO、Redirect、Mask request。也需要禁止TraceRoute命令的探測。對于流出的ICMP流,我們可以允許ECHO、Parameter Problem、Packet too big。還有TraceRoute命令的使用。
    ! outbound ICMP Control
    Router(Config)# access-list 110 deny icmp any any echo log
    Router(Config)# access-list 110 deny icmp any any redirect log
    Router(Config)# access-list 110 deny icmp any any mask-request log
    Router(Config)# access-list 110 permit icmp any any
    ! Inbound ICMP Control
    Router(Config)# access-list 111 permit icmp any any echo
    Router(Config)# access-list 111 permit icmp any any Parameter-problem
    Router(Config)# access-list 111 permit icmp any any packet-too-big
    Router(Config)# access-list 111 permit icmp any any source-quench
    Router(Config)# access-list 111 deny icmp any any log
    ! Outbound TraceRoute Control
    Router(Config)# access-list 112 deny udp any any range 33400 34400
    ! Inbound TraceRoute Control
    Router(Config)# access-list 112 permit udp any any range 33400 34400
    13,DDoS(Distributed Denial of Service)的防範。
    ! The TRINOO DDoS system
    Router(Config)# access-list 113 deny tcp any any eq 27665 log
    Router(Config)# access-list 113 deny udp any any eq 31335 log
    Router(Config)# access-list 113 deny udp any any eq 27444 log
    ! The Stacheldtraht DDoS system
    Router(Config)# access-list 113 deny tcp any any eq 16660 log
    Router(Config)# access-list 113 deny tcp any any eq 65000 log
    ! The TrinityV3 System
    Router(Config)# access-list 113 deny tcp any any eq 33270 log
    Router(Config)# access-list 113 deny tcp any any eq 39168 log
    ! The SubSeven DDoS system and some Variants
    Router(Config)# access-list 113 deny tcp any any range 6711 6712 log
    Router(Config)# access-list 113 deny tcp any any eq 6776 log
    Router(Config)# access-list 113 deny tcp any any eq 6669 log
    Router(Config)# access-list 113 deny tcp any any eq 2222 log
    Router(Config)# access-list 113 deny tcp any any eq 7000 log
    13,建議啓用SSH,廢棄掉Telnet。但只有支持並帶有IPSec特征集的IOS才支持SSH。並且IOS12.0-IOS12.2僅支持SSH-V1。如下配置SSH服務的例子:
    Router(Config)# config t
    Router(Config)# no access-list 22
    Router(Config)# access-list 22 permit 192.168.0.22
    Router(Config)# access-list deny any
    Router(Config)# username BluShin privilege 10 G00dPa55w0rd
    ! 設置SSH的超時間隔和嘗試登錄次數
    Router(Config)# ip ssh timeout 90
    Router(Config)# ip ssh anthentication-retries 2
    Router(Config)# line vty 0 4
    Router(Config-line)# access-class 22 in
    Router(Config-line)# transport input ssh
    Router(Config-line)# login local
    Router(Config-line)# exit
    !啓用SSH服務,生成RSA密鑰對。
    Router(Config)# crypto key generate rsa
    The name for the keys will be: router.blushin.org
    Choose the size of the key modulus in the range of 360 to 2048 for your General Purpose Keys .Choosing a key modulus greater than 512 may take a few minutes.
    How many bits in the modulus[512]: 2048
    Generating RSA Keys…
    [OK]
    Router(Config)#

  • Cisco路由器配置信息及口令的清除

    在網絡日常管理與維護的工作中,妳是否遇到過這種現象:由于忘記了口令,妳被原來親切的“朋友”——路由器或交換機強行拒于門外,無法進行參數的重新設置、信息統計。下面就針對幾種常見而重要的網絡設備的口令清除方法談談本人的壹點“小竅門”。 

      Cisco 路由器配置信息及口令的清除 

      適用範圍:所有IOS在10.0及以上版本的Cisco 2000、2500、3000、4000、7000系列路由器。 
      
      清除步驟如下: 
      
      1.用路由器所帶的串口線連接到Console口,以下通過Win95的超級終端進行; 
      
      2.路由器加電後60秒內,按下CTRL(如果不行按CTRL-BREAK)鍵,等待出現“〉”提示符; 
      
      3.鍵入“〉e/s 2000002”命令,並記錄下返回值,用在後面“Router(config)#config-register 0x2102”命令中;(通常返回值是2102) 
      
      4.在“〉”符號後鍵入“o/r 0x42”; 
      
      5.鍵入“i”, 路由器將重新初始化,對于出現的提示問題,回答No; 
      
      6.鍵入“Enable”(沒有口令,按回車即可); 
      
      7.改變口令(無論是否加密): 
      
      a. 輸入“config mem”或“copy startup-config mem”; 
      
      b. 輸入“write”; 
      
      c. 輸入“config term”並輸入“enable secret〈password〉”和“enable password〈password〉”,改變口令; 
      
      8.去掉用戶提示及口令: 
      
      a.進入虛擬行配置模式,輸入“line vty 0 4”; 
      
      b.輸入“password〈password〉”,改變口令; 
      
      c.輸入“login”(可以去掉用戶提示,原來是login local); 
      
      9.完成後按Ctrl-z結束; 
      
      10.輸入“write”保存所做的改變; 
      
      11.進入特權配置模式,鍵入“config-register 0x2102”(注意,必須完成此步); 
      
      12.Write保存配置信息; 
      
      13.退出配置模式,Reload完成重新啓動路由器即可。 
      
      說明:o/r 0x42是從Flash中引導路由器,如果不成功,可采用o/r 0x41從ROM中引導路由器,其余操作與o/r 0x42相同,但是最好只在Flash引導不成功或Flash內容被刪除、沒有Flash情況下才用。使用0x41只能查看或刪除配置信息而不能更改口令。 
      
      
      Cisco Catalyst 3000配置信息的清除 
      
      
      1.在交換機加電啓動時,按住交換機後面板上的Sys Req按鈕5秒鍾,然後松開; 
      
      2.進入配置選單,選擇“Clear Non-Volatile RAM”,即可清除交換機的所有配置信息(包括口令)。 
      
      3.根據需要,重新配置參數、口令等。 
      
      Intel Express交換機口令的清除 
      
      適用範圍:Intel Express 10 Switch/10 Switch+/100FX Switch交換機 
      
      方法壹: 
      
      1.進入交換機的維護模式(Maintenance Mode),輸入:run defparm,以重啓交換機,把原來的配置變成原始默認設置(原始默認沒有口令)。 
      
      2.進入維護模式: 
      
      a.關閉交換機後按下面板上的Maint按鈕,然後給交換機加電; 
      
      b.按下按鈕保持3秒鍾至System LED 綠色燈快速閃爍; 
      
      c.釋放Maint按鈕。 
      
      3.通過交換機的串口,用直連式串口線以9600/N/8/1,兼容VT100的終端模式進入交換機; 
      
      4.按Enter鍵,直到屏幕上出現命令行提示。 
      
      方法二:利用Intel交換機的後門 
      
      Telnet登錄到交換機上,提示輸入用戶名時,隨便輸入壹個,然後輸入通用的口令“debug”,即可進入交換機。 
      
      3COM NetServer遠程訪問服務器 
      
      口令的清除 
      
      查看NetServer Configuration DIP開關,它控制NetServer的硬件配置信息。其中DIP4控制“Erase/Reinitialize Flash Configuration”。 
      
      清除步驟如下: 
      
      1.把DIP4撥到ON狀態,當NETServer啓動時,保于Flash的配置信息將會被刪除; 
      
      2.關閉機器再把DIP4撥到OFF,加電啓動,然後就可以重新配置了。

  • 將Linux變成路由器

    Linux系統是一個強大的網絡操作系統,本身就是一個出色的路由器,只要經過非常少的幾步設置,就會使用LINUX系統本身成為一台出色的路由器。
    要想使LINUX系統達到這種目的,首先得查看Linux系統的內核中是否打開了IP轉發功能,可以通過下列命令來查看:
    # cat /proc/sys/net/ip_forward
    如果用此命令返回的結果是0,那麼就表明Linux內核沒有啟用IP轉發功能。就可以通過下示命令來啟用:
    # echo 1 > /proc/sys/net/ip_forward
    但這種方式只能保證當次有效,如果你不小心或應某種需要重啟了系統,那麼又得重新輸入上述這個命令一次。因此,為了保證每次系統都能自動設置,你就可以用VI編輯器打開/etc/sysctl.conf配置文件,在此配置文件中加如下容:
    ipv_ipforward=1
    保存退出後,這樣,每次重啟系統都不用重新設置內核IP轉發了。
    在打開內核IP轉發功能後,我們就該為我們所假設的網絡添加路由功能了。
    在LINUX系統下實現路由功能,兩種方法來實現,一種是通過IPTABLES工具的NAT轉發功能,一種是使用IPROUTER2工具集中的IP ROUTE命令子集來實現。這兩種方法各有優缺點,使用哪種方法,主要看你所在的網絡使用哪種方法連接互聯網。 IPTABLES工具適合動態IP地址以及固定公網IP地址方式,同時,還提供了網絡地址轉換功能,此功能不僅能使使用私有IP地址的內網PC連接上互聯網,而且還提供外網能過DNAT功能訪問處於內網中的各種網絡服務,以用隱藏內容IP網絡段,增加了安全性。 IP ROUTE工具同樣適應與IPTABELS相同的兩種上網方式,但不能提供NAT功能。
    不過,有許多特殊的網絡路由功能,是通過這兩個工具共同合作的才能實現的,例如,將要講到的策略路由、負載均衡、多WAN出口路由等。因此,筆者在此分別列出這個工具實現路由功能的命令內容,其後,在介紹如何通過這兩個工具合作,完成更加高級的功能。
    1、IPTABLES工具的NAT方式開啟LINUX路由功能,其通過動態拔號方式連接互聯網的命令如下所示:
    # iptables –t nat –A POSTROUTING –d 192.168.1.0/24 –s 0/0 –o ppp0 –j MASQUERD
    其中,ppp0是你拔號網絡接口別名,在此之前,你得先設置好與拔號相關的內容,這可以通過直接編輯/etc/sysconfig/network_scripts/ifcfg_ppp0配置文件來達到目的。
    通過固定公網IP地址方式連接互聯的實現方法如下:
    # iptables –t nat –A POSTROUTING –s 192.168.1.0/24 -j SNAT –to 202.103.224.58
    其中,這個固定公網IP地址是由當地ISP分配給你的,在這也是由筆者自行假設的,具體的IP地址得根據你所在ISP所在地來決定。
    2、通過IP ROUTE工具來實現LINUX系統的路由功能
    通過動態拔號上網方式連接互聯網的命令如下所示產:
    # ip route add via ppp0 dev eth0
    通過固定公網IP連接互聯網的命令如下所示:
    # ip route add via 202.103.224.58 dev eth0
    經過以上兩種方法中的任何一種的設置,我們的LINUX系統就具有路由功能了。這樣,所處在局域網內部的PC都能夠通過這台LINUX路由器共享上網了,便前題條件是要設置這些局域網中的PC的IP地址為此IP地址段中的任何一個,但不能相同,192.168.1.2-192.168.1.254,同時,設置它們的網關地址全部為192.168.1.1,這是LINUX路由器中連接局域網網卡的IP地址。因為,在這裡全部使用固定IP地址,沒有使用DHCP服務器,因此,這此IP地址都必需由用戶自行指定的。

  • Java基礎:關於Java編程語言中的內部類說明

    提起Java內部類(Inner Class)可能很多人不太熟悉,實際上類似的概念在C++裡也有,那就是嵌套類(Nested Class),關於這兩者的區別與聯繫,在下文中會有對比。內部類從表面上看,就是在類中又定義了一個類(下文會看到,內部類可以在很多地方定義),而實際上並沒有那麼簡單,乍看上去內部類似乎有些多餘,它的用處對於初學者來說可能並不是那麼顯著,但是隨著對它的深入了解,你會發現Java的設計者在內部類身上的確是用心良苦。學會使用內部類,是掌握Java高級編程的一部分,它可以讓你更優雅地設計你的程序結構。下面從以下幾個方面來介紹:

    第一次見面

    public interface Contents {

    int value();

    }

    public interface Destination {

    String readLabel();

    }

    public class Goods {

    private class Content implements Contents {

    private int i = 11;

    public int value() {

    return i;

    }

    }

    protected class GDestination implements Destination {

    private String label;

    private GDestination(String whereTo) {

    label = whereTo;

    }

    public String readLabel() {

    return label;

    }

    }

    public Destination dest(String s) {

    return new GDestination(s);

    }

    public Contents cont() {

    return new Content();

    }

    }

    class TestGoods {

    public static void main(String[] args) {

    Goods p = new Goods();

    Contents c = p.cont();

    Destination d = p.dest(“Beijing”);

    }

    }

    在這個例子裡類Content和GDestination被定義在了類Goods內部,並且分別有著protected和private修飾符來控制訪問級別。 Content代表著Goods的內容,而GDestination代表著Goods的目的地。它們分別實現了兩個接口Content和Destination。在後面的main方法裡,直接用Contents c和Destination d進行操作,你甚至連這兩個內部類的名字都沒有看見!這樣,內部類的第一個好處就體現出來了??隱藏你不想讓別人知道的操作,也即封裝性。

    同時,我們也發現了在外部類作用範圍之外得到內部類對象的第一個方法,那就是利用其外部類的方法創建並返回。上例中的cont()和dest()方法就是這麼做的。那麼還有沒有別的方法呢?當然有,其語法格式如下:

    outerObject=new outerClass(Constructor Parameters);

    outerClass.innerClass innerObject=outerObject.new InnerClass(Constructor Parameters);

    注意在創建非靜態內部類對象時,一定要先創建起相應的外部類對象。至於原因,也就引出了我們下一個話題??非靜態內部類對像有著指向其外部類對象的引用,對剛才的例子稍作修改:

    public class Goods {

    private valueRate=2;

    private class Content implements Contents {

    private int i = 11*valueRate;

    public int value() {

    return i;

    }

    }

    protected class GDestination implements Destination {

    private String label;

    private GDestination(String whereTo) {

    label = whereTo;

    }

    public String readLabel() {

    return label;

    }

    }

    public Destination dest(String s) {

    return new GDestination(s);

    }

    public Contents cont() {

    return new Content();

    }

    }

    修改的部分用藍色顯示了。在這裡我們給Goods類增加了一個private成員變量valueRate,意義是貨物的價值係數,在內部類Content的方法value()計算價值時把它乘上。我們發現,value()可以訪問valueRate,這也是內部類的第二個好處??一個內部類對象可以訪問創建它的外部類對象的內容,甚至包括私有變量!這是一個非常有用的特性,為我們在設計時提供了更多的思路和捷徑。要想實現這個功能,內部類對象就必須有指向外部類對象的引用。 Java編譯器在創建內部類對象時,隱式的把其外部類對象的引用也傳了進去並一直保存著。這樣就使得內部類對象始終可以訪問其外部類對象,同時這也是為什麼在外部類作用範圍之外向要創建內部類對象必須先創建其外部類對象的原因。

    有人會問,如果內部類裡的一個成員變量與外部類的一個成員變量同名,也即外部類的同名成員變量被屏蔽了,怎麼辦?沒事,Java裡用如下格式表達外部類的引用:

    outerClass.this

    有了它,我們就不怕這種屏蔽的情況了。

    靜態內部類

    和普通的類一樣,內部類也可以有靜態的。不過和非靜態內部類相比,區別就在於靜態內部類沒有了指向外部的引用。這實際上和C++中的嵌套類很相像了,Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用這一點上,當然從設計的角度以及以它一些細節來講還有區別。

    除此之外,在任何非靜態內部類中,都不能有靜態數據,靜態方法或者又一個靜態內部類(內部類的嵌套可以不止一層)。不過靜態內部類中卻可以擁有這一切。這也算是兩者的第二個區別吧。

    局部內部類

    是的,Java內部類也可以是局部的,它可以定義在一個方法甚至一個代碼塊之內。

    public class Goods1 {

    public Destination dest(String s) {

    class GDestination implements Destination {

    private String label;

    private GDestination(String whereTo) {

    label = whereTo;

    }

    public String readLabel() { return label; }

    }

    return new GDestination(s);

    }

    public static void main(String[] args) {

    Goods1 g= new Goods1();

    Destination d = g.dest(“Beijing”);

    }

    }

    上面就是這樣一個例子。在方法dest中我們定義了一個內部類,最後由這個方法返回這個內部類的對象。如果我們在用一個內部類的時候僅需要創建它的一個對象並創給外部,就可以這樣做。當然,定義在方法中的內部類可以使設計多樣化,用途絕不僅僅在這一點。

    下面有一個更怪的例子:

    public class Goods2{

    private void internalTracking(boolean b) {

    if(b) {

    class TrackingSlip {

    private String id;

    TrackingSlip(String s) {

    id = s;

    }

    String getSlip() { return id; }

    }

    TrackingSlip ts = new TrackingSlip(“slip”);

    String s = ts.getSlip();

    }

    }

    public void track() { internalTracking(true); }

    public static void main(String[] args) {

    Goods2 g= new Goods2();

    g.track();

    }

    }

    你不能在if之外創建這個內部類的對象,因為這已經超出了它的作用域。不過在編譯的時候,內部類TrackingSlip和其他類一樣同時被編譯,只不過它由它自己的作用域,超出了這個範圍就無效,除此之外它和其他內部類並沒有區別。

    匿名內部類

    java的匿名內部類的語法規則看上去有些古怪,不過如同匿名數組一樣,當你只需要創建一個類的對象而且用不上它的名字時,使用內部類可以使代碼看上去簡潔清楚。它的語法規則是這樣的:

    new interfacename(){……};或new superclassname(){……};

    下面接著前面繼續舉例子:

    public class Goods3 {

    public Contents cont(){

    return new Contents(){

    private int i = 11;

    public int value() {

    return i;

    }

    };

    }

    }

    這裡方法cont()使用匿名內部類直接返回了一個實現了接口Contents的類的對象,看上去的確十分簡潔。

    在java的事件處理的匿名適配器中,匿名內部類被大量的使用。例如在想關閉窗口時加上這樣一句代碼:

    frame.addWindowListener(new WindowAdapter(){

    public void windowClosing(WindowEvent e){

    System.exit(0);

    }

    });

    有一點需要注意的是,匿名內部類由於沒有名字,所以它沒有構造函數(但是如果這個匿名內部類繼承了一個只含有帶參數構造函數的父類,創建它的時候必須帶上這些參數,並在實現的過程中使用super關鍵字調用相應的內容)。如果你想要初始化它的成員變量,有下面幾種方法:

    如果是在一個方法的匿名內部類,可以利用這個方法傳進你想要的參數,不過記住,這些參數必須被聲明為final。

    將匿名內部類改造成有名字的局部內部類,這樣它就可以擁有構造函數了。

    在這個匿名內部類中使用初始化代碼塊。

    為什麼需要內部類?

    java內部類有什麼好處?為什麼需要內部類?

    首先舉一個簡單的例子,如果你想實現一個接口,但是這個接口中的一個方法和你構想的這個類中的一個方法的名稱,參數相同,你應該怎麼辦?這時候,你可以建一個內部類實現這個接口。由於內部類對外部類的所有內容都是可訪問的,所以這樣做可以完成所有你直接實現這個接口的功能。

    不過你可能要質疑,更改一下方法的不就行了嗎?

    的確,以此作為設計內部類的理由,實在沒有說服力。

    真正的原因是這樣的,java中的內部類和接口加在一起,可以的解決常被C++程序員抱怨java中存在的一個問題??沒有多繼承。實際上,C++的多繼承設計起來很複雜,而java通過內部類加上接口,可以很好的實現多繼承的效果。

  • 新手入門:介紹Java學習的一些主線思路

    Java發展到現在,按應用來分主要分為三大塊:J2SE,J2ME和J2EE。

    這三塊相互補充,應用範圍不同。

    J2SE就是Java2的標準版,主要用於桌面應用軟件的編程;

    J2ME主要應用於嵌入是系統開發,如手機和PDA的編程;

    J2EE是Java2的企業版,主要用於分佈式的網絡程序的開發,如電子商務網站和ERP系統。

    先學習j2se

    要學習j2ee就要先學習j2se,剛開始學習j2se先建議不要使用IDE,然後漸漸的過渡到使用IDE開發,畢竟用它方便嘛。學習j2se推薦兩本書,《java2核心技術一二卷》,《java編程思想》,《java模式》。其中《java編程思想》要研讀,精讀。這一段時間是基本功學習,時間會很長,也可能很短,這要看學習者自身水平而定。

    不要被IDE糾纏

    在學習java和j2ee過程中,你會遇到五花八門的IDE,不要被他們迷惑,學JAVA的時候,要學語言本身的東西,不要太在意IDE的附加功能,JAVA編程在不同IDE之間的轉換是很容易的,過於的在意IDE的功能反而容易耽誤對語言本身的理解。目前流行的IDE有jbuilder,eclipse和eclipse的加強版WSAD。用好其中一個就可以了,推薦從eclipse入手j2ee。因為Jbuilder更適合於寫j2se程序。

    選擇和學習服務器使用配置

    當你有了j2se和IDE的經驗時,可以開始j2ee的學習了,web服務器:tomcat,勿庸置疑,tomcat為學習web服務首選。而應用服務器目前主要有三個:jboss、weblogic、websphere。有很多項目開始採用jboss,並且有大量的公司開始做websphere或weblogic向jboss應用服務器的移植(節省成本),這裡要說的是,學習tomcat和jboss我認為是首選,也是最容易上手的。學習服務器使用配置最好去詢問有經驗的人(有條件的話),因為他們或許一句話就能解決問題,你自己上網摸索可能要一兩天(我就乾過這種傻事),我們應該把主要時間放在學習原理和理論上,一項特定技術的使用永遠代替不了一個人的知識和學問。

    學習web知識

    如果你是在做電子商務網站等時,你可能要充當幾個角色,這是你還要學習:

    html,可能要用到dreamwave等IDE。

    Javascript,學會簡單的數據校驗,數據聯動顯示等等。

    J2eeAPI學習

    學習j2eeAPI和學習服務器應該是一個迭代的過程。

    先學習jsp和servlet編程,這方面的書很多,我建立看oreilly公司的兩本《jsp設計》和《java servlet編程》,oreilly出的書總是那本優秀,不得不佩服。

    學習jdbc數據庫編程,j2ee項目大多都是MIS系統,訪問數據庫是核心。這本應屬於j2se學習中,這裡拿出來強調一下。

    學習jndi api,它和學習ejb可以結合起來。

    學習ejb api,推薦書《精通ejb》

    經過上面的這些的學習,大概可以對付一般的應用了。

    有人說跟著sun公司的《j2ee tutorial》一路學下來,當然也可以。

    學習ejb設計模式和看代碼(最重要)

    設計模式是練內功,其重要性可以這麼說吧,如果你不會用設計模式的話,你將寫出一堆使用了ejb的垃圾,有慢又是一堆bug,其結果不如不用ejb實現( ejb不等於j2ee)

    無論學習什麼語言,都應該看大量代碼,你看的代碼量不到一定數量,是學不好j2ee的。

    目前有很多開源的工程可以作為教材:

    jive論壇

    petstore sun公司

    dune sun公司

    等等,研讀一個,並把它用到自己的工程中來。

    J2ee其他學習

    當你漸漸對j2ee了解到一定深度時,你要開始關注當前領域中的一些技術變化,J2ee是一塊百家爭鳴的領域,大家都在這裡提出自己的解決方案,例如structs,hiberate,ofbiz等等,學習這些東西要你的項目和目標而定,預先補充一下未嘗不可,但不用涉及太深,畢竟學習原理和理論是最最重要的事。

    目前常見j2eeAPI

    JavaServer Pages(JSP)技術1.2

    Java Servlet技術2.3

    JDBC API 2.0

    Java XML處理API(JAXP)1.1

    Enterprise JavaBeans技術2.0

    Java消息服務(JMS)1.0

    Java命名目錄接口(JNDI)1.2

    Java事務API(JTA) 1.0

    JavaMail API 1.2

    JavaBeans激活架構(JAF)1.0

    J2EE連接器體系結構(JCA)1.0

    Java認證和授權服務(JAAS)1.0

    學習上面的某些API要以你的項目而定,了解所有他們總之是有好處的。

    上面印證了大家說的一句話,java語言本身不難學,但是技術太多,所以學java很費勁。回想一下,基本上每個初學者,在剛學習java的時候可能都會問別人這麼一句話,你怎麼知道的哪個方法(api)在哪個包裡的?呵呵,無他,唯手熟爾。

    1基礎是王道。我們的基礎要紮實紮實再紮實。

    以上面的整個流程來看java的技術分支很多,要想完全掌握是絕對不可能的。我們只有從中精通1到2個部分。但是java也是有通性的,所謂萬變不離其宗。 java的所有編程思路都是“面向對象”的編程。所以大家在往更高境界發展以前一定要打好基礎,這樣不管以後是jree還是j3d都有應刃而解的感覺。在這裡強烈推薦“java編程思想”.

    2所謂打好基礎並不是說要熟悉所有的java代碼。我說的意思是要了解java的結構。 class,methode,object,各種套用import,extend讓自己在結構上對java有個立體而且整體的了解即刻。其實java的學習不用固執於對代碼的熟悉,1來java本身帶有很多demo,java2d的所有問題幾乎都有demo的樣例。 2來java是開放代碼,即使沒有demo網絡上也有很多高手把自己的代碼分享。所以不要怕沒有參考,參考是到處都有的。

    3最後還有1點經驗和大家分享,對sun的api一定要學會活用,不論是學習還是作為參考api都有很大的幫助,在完全了解java的結構的基礎上,不論什麼方法都是可以通過api來找到的.所以不要怕找不到方法,了解結構,了解api就能找到方法。

  • linux文件系統基礎知識

    這兩天看了一本fedora 6的實踐教程,下面是有關linux文件系統知識的學習筆記:
    1、linux文件系統分配策略:
        塊分配( block allocation )和擴展分配( extent allocation )
        塊分配:磁盤上的文件塊根據需要分配給文件,避免了存儲空間的浪費。但當文件擴充時,會造成文件中文件塊的不連續,從而導致過多的磁盤尋道時間。
                每一次文件擴展時,塊分配算法就需要寫入文件塊的結構信息,也就是meta-dada 。 meta-data總是與文件一起寫入存儲設備,改變文件的操作要等到所有meta-data的操作都完成後才能進行,
                因此,meta-data的操作會明顯降低整個文件系統的性能。
        擴展分配:文件創建時,一次性分配一連串連續的塊,當文件擴展時,也一次分配很多塊。 meta-data在文件創建時寫入,當文件大小沒有超過所有已分配文件塊大小時,就不用寫入meta-data,直到需要再分配文件塊的時候。
                    擴展分配採用成組分配塊的方式,減少了SCSI設備寫數據的時間,在讀取順序文件時具有良好的性能,但隨機讀取文件時,就和塊分配類似了。
                    文件塊的組或塊簇( block cluster)的大小是在編譯時確定的。簇的大小對文件系統的性能有很大的影響。
        注: meta-data元信息:和文件有關的信息,比如權限、所有者以及創建、訪問或更改時間等。
    2、文件的記錄形式
         linux文家系統使用索引節點(inode)來記錄文件信息。索引節點是一種數據結構,它包含了一個文件的長度、創建及修改時間、權限、所屬關係、磁盤中的位置等信息。
    一個文件系統維護了一個索引節點的數組,每個文件或目錄都與索引節點數組中的唯一的元素對應。每個索引節點在數組中的索引號,稱為索引節點號。
         linux文件系統將文件索引節點號和文件名同時保存在目錄中,所以,目錄只是將文件的名稱和它的索引節點號結合在一起的一張表,目錄中每一對文件名稱和索引節點號稱為一個連接。
    對於一個文件來說,有一個索引節點號與之對應;而對於一個索引節點號,卻可以對應多個文件名。
        連接分為軟連接和硬連接,其中軟連接又叫符號連接。
        硬連接:原文件名和連接文件名都指向相同的物理地址。目錄不能有硬連接;硬連接不能跨文件系統(不能跨越不同的分區),文件在磁盤中只有一個拷貝。
                由於刪除文件要在同一個索引節點屬於唯一的連接時才能成功,因此硬連接可以防止不必要的誤刪除。
        軟連接:用ln -s命令建立文件的符號連接。符號連接是linux特殊文件的一種,作為一個文件,它的數據是它所連接的文件的路徑名。沒有防止誤刪除的功能。
    3、文件系統類型:
        
         ext2 :早期linux中常用的文件系統
         ext3 : ext2的升級版,帶日誌功能
         RAMFS :內存文件系統,速度很快
         NFS :網絡文件系統,由SUN發明,主要用於遠程文件共享
         MS-DOS : MS-DOS文件系統
         VFAT : Windows 95/98操作系統採用的文件系統
         FAT : Windows XP操作系統採用的文件系統
         NTFS : Windows NT/XP操作系統採用的文件系統
         HPFS : OS/2操作系統採用的文件系統
         PROC :虛擬的進程文件系統
         ISO9660 :大部分光盤所採用的文件系統
         ufsSun : OS所採用的文件系統
         NCPFS : Novell服務器所採用的文件系統
         SMBFS : Samba的共享文件系統
         XFS :由SGI開發的先進的日誌文件系統,支持超大容量文件
         JFS :IBM的AIX使用的日誌文件系統
         ReiserFS :基於平衡樹結構的文件系統
         udf:可擦寫的數據光盤文件系統
    4、虛擬文件系統VFS
        
         linux支持的所有文件系統稱為邏輯文件系統,而linux在傳統的邏輯文件系統的基礎上增加料一個蓄念文件系統( Vitual File System ,VFS)的接口層。
        虛擬文件系統(VFS)位於文件系統的最上層,管理各種邏輯文件系統,並可以屏蔽各種邏輯文件系統之間的差異,提供統一文件和設備的訪問接口。
    5、文件的邏輯結構
        文件的邏輯結構可分為兩大類:字節流式的無結構文件和記錄式的有結構文件。
        由字節流(字節序列)組成的文件是一種無結構文件或流式文件,不考慮文件內部的邏輯結構,只是簡單地看作是一系列字節的序列,便於在文件的任意位置添加內容。
        由記錄組成的文件稱為記錄式文件,記錄是這種文件類型的基本信息單位,記錄式文件通用於信息管理。
    6、文件類型
        
        普通文件:通常是流式文件
        目錄文件:用於表示和管理系統中的全部文件
        連接文件:用於不同目錄下文件的共享
        設備文件:包括塊設備文件和字符設備文件,塊設備文件表示磁盤文件、光盤等,字符設備文件按照字符操作終端、鍵盤等設備。
        管道(FIFO)文件:提供進程建通信的一種方式
        套接字(socket)文件:該文件類型與網絡通信有關
    7、文件結構:包括索引節點和數據
        索引節點:又稱I節點,在文件系統結構中,包含有關相應文件的信息的一個記錄,這些信息包括文件權限、文件名、文件大小、存放位置、建立日期等。文件系統中所有文件的索引節點保存在索引節點表中。
        數據:文件的實際內容。可以是空的,也可以非常大,並且擁有自己的結構。
    8、ext2文件系統
        
         ext2文件系統的數據塊大小一般為1024B、2048B或4096B
         ext2文件系統採用的索引節點(inode):
            索引節點採用了多重索引結構,主要體現在直接指針和3個間接指針。直接指針包含12個直接指針塊,它們直接指向包含文件數據的數據塊,緊接在後面的3個間接指針是為了適應文件的大小變化而設計的。
         eg:假設數據塊大小為1024B ,利用12個直接指針,可以保存最大為12KB的文件,當文件超過12KB時,則要利用單級間接指針,該指針指向的數據塊保存有一組數據塊指針,這些指針依次指向包含有實際數據的數據塊,
            假如每個指針佔用4B,則每個單級指針數據塊可保存1024/4=256個數據指針,因此利用直接指針和單級間接指針可保存1024*12+1024*256=268 KB的文件。當文件超過268KB時,再利用二級間接指針,直到使用三級間接指針。
            利用直接指針、單級間接指針、二級間接指針、三級間接指針可保存的最大文件大小為:
                 1024*12+1024*256+1024*256*256+1024*256*256*256=16843020 KB,約16GB
            若數據塊大小為2048B,指針佔4B,則最大文件大小為: 2048*12+2048*512+2048*512*512+2048*512*512*512=268,960,792 KB約268GB
            若數據塊大小為4096B,指針佔4B,則最大文件大小為: 4096*12+4096*1024+4096*1024*1024+4096*1024*1024*1024=4,299,165,744 KB ,約4TB
        注:命令tune2fs -l /dev/sda5可查看文件系統
         ext2文件系統最大文件名長度: 255個字符
        
         ext2文件系統的缺點:
                 ext2在寫入文件內容的同時並沒有同時寫入文件meta-data,其工作順序是先寫入文件的內容,然後等空閒時候才寫入文件的meta-data。若發生意外,則文件系統就會處於不一致狀態。
            在重新啟動系統的時候,linux會啟動fsk ( file system check)的程序,掃描整個文件系統並試圖修復,但不提供保證。
    9、ext3文件系統:
        
         ext3基於ext2的代碼,所以磁盤格式與ext2相同,使用相同的元數據。
         ext2文件系統無損轉化為ext3文件系統: tune2fs -j /dev/sda6
        
        日誌塊設備( Journaling block device layer,JBD)完成ext3文件系統日誌功能。 JBD不是ext3文件系統所特有的,它的設計目標是為了向一個塊設備添加日誌功能。
        當一個文件修改執行時,ext3文件系統代碼將通知JBD,稱為一個事務(transaction)。發生意外時,日誌功能具有的重放功能,能重新執行中斷的事務。
        
        日誌中的3種數據模式:
             1)、data=writeback :不處理任何形式的日誌數據,給用戶整體上的最高性能
             2)、data=odered :只記錄元數據日誌,但將元數據和數據組成一個單元稱為事務(transaction) 。此模式保持所句句的可靠性與文件系統的一致性,性能遠低於data=writeback模式,但比data=journal模式快
             3)、data=journal :提供完整的數據及元數據日誌,所有新數據首先被寫入日誌,然後才被定位。意外發生過後,日誌可以被重放,將數據與元數據帶回一致狀態。這種模式整體性能最慢,但數據需要從磁盤讀取和寫入磁盤時卻是3種模式中最快的。
         ext3文件系統最大文件名長度: 255個字符
         ext3文件系統的優點:可用性、數據完整性、速度、兼容性
    10、ReiserFS文件系統
        
         ReiserFS文件系統是由Hans Reiser和他領導的開發小組共同開發的,整個文件系統完全是從頭設計的,是一個非常優秀的文件系統。也是最早用於Linux的日誌文件系統之一。
         ReiserFS的特點
        先進的日誌機制
             ReiserFS有先進的日誌(Journaling/logging)功能機制。日誌機制保證了在每個實際數據修改之前,相應的日誌已經寫入硬盤。文件與數據的安全性有了很大提高。
        高效的磁盤空間利用
             Reiserfs對一些小文件不分配inode。而是將這些文件打包,存放在同一個磁盤分塊中。而其它文件系統則為每個小文件分別放置到一個磁盤分塊中。
        獨特的搜尋方式
             ReiserFS基於快速平衡樹(balanced tree)搜索,平衡樹在性能上非常卓越,這是一種非常高效的算法。 ReiserFS搜索大量文件時,搜索速度要比ext2快得多。 Reiserfs文件系統使用B*Tree存儲文件,而其它文件系統使用B+Tree樹。 B*Tree查詢速度比B+Tree要快很多。 Reiserfs在文件定位上速度非常快。
            在實際運用中,ReiserFS在處理小於4k的文件時,比ext2快5倍;帶尾文件壓縮功能(默認)的ReiserFS比ext2文件系統多存儲6%的數據。
        支持海量磁盤
             ReiserFS是一個非常優秀的文件系統,一直被用在高端UNIX系統上,可輕鬆管理上百G的文件系統,ReiserFS文件系統最大支持的文件系統尺寸為16TB。這非常適合企業級應用中。
        優異的性能
            由於它的高效存儲和快速小文件I/O特點,使用ReiserFs文件系統的PC,在啟動X窗口系統時,所花的時間要比在同一台機器上使用ext2文件系統少1/3。另外,ReiserFS文件系統支持單個文件尺寸為4G的文件,這為大型數據庫系統在linux上的應用提供了更好的選擇。