afunms

          My Software,My Dream—Forge a more perfect NMS product.

          #

          在揭陽的三天三夜

          04-07
          1. 測試了現有的代碼,僅找到很少的幾條鏈路,而且結果還不正確。
          2. 最奇怪的是,bridge.mib里的fdb表都沒有數據,我的發現算法是基于fdb來作的,
             fdb表沒數據,肯定找不到鏈路。
          3. 突然想起北京同事說的NDP,于是想用華為的NDP試試,加載huawei-hgmp.mib,
             結果發現H3C的設備里根本沒有數據,太失望了。


          04-08
          1. 想起三年前在安徽恒源的痛苦經歷,但最終是用STP得到正確的結果。于是,我又試了
             基于STP的發現,還是沒結果。為什么?因為STP里的數據不滿足算法的要求。
          2. 看來這次真的遇到挑戰了。路由表里全是OSPF,我又想起曾經看過一篇文章,寫的是基本
             OSPF的拓撲發現。在網上搜索了半天,只有萬方的論文里有相關文章,無奈之下,只好用
             手機短信花了3塊錢下了一篇論文。按論文里的算法,改了程序,經測試后,雖然有點進步,
             但仍有多臺設備處于孤立狀態,找不到鏈路,太郁悶了。
          3. 用SolarWinds下載了所有h3c上的mib,回賓館研究。發現SolarWinds在win7下的一個bug,
             導出功能完全不能用,我只好把結果存成txt。


          04-09
          1. 從下載的mib數據中驚奇地發現,h3c使用了Q-bridge而不是bridge,這就難怪bridge里的fdb
             表沒有數據。這又讓我心中燃起了希望。但Q-bridge里的address這一字段沒數據,所以要用
             walk(而不是table)才能取到數據。
          2. 專門寫了一個取Q-bridge fdb表數據的類。核心交換h3c7510中的fdb表項巨大,大約有800條
             之多,snmp4j沒取完就超時了,用SolarWinds也會出現超時的現象。
          3. 再次測試了發現程序,由于有了fdb表的數據,多找出好多鏈路,但仍不完整。
          4. 收集了所有設備的mib數據,回廣州慢慢研究。


          在揭陽的三天三夜
          ,緊張而痛苦。我真的遇到一個大難題......

          posted @ 2010-04-10 11:05 afunms 閱讀(595) | 評論 (1)編輯 收藏

          MySQL存儲過程和任務

          stored procedure
          創建
          create procedure sp_name()
          begin
          ………
          end

          調用
          call sp_name()
          注意:存儲過程名稱后面必須加括號,哪怕該存儲過程沒有參數傳遞

          刪除
          drop procedure sp_name

          其他
          1.show procedure status
          顯示數據庫中所有存儲的存儲過程基本信息,包括所屬數據庫,存儲過程名稱,創建時間等
          2.show create procedure sp_name
          顯示某一個存儲過程的詳細信息

          例子:
          CREATE PROCEDURE `bag_app_flow`()
          insert into bag_app_flow
          select pid,avg(in_speed),avg(out_speed),max(log_time) log_time
          from bag_app_flow_raw
          where hour(now()) - hour(log_time) = 1
          group by pid,date_format(log_time,'%Y-%m-%d %H');

          --------------
          event
          使用下列的任意一句開啟計劃任務:
                     SET GLOBAL event_scheduler = ON;
                     SET @@global.event_scheduler = ON;
                     SET GLOBAL event_scheduler = 1;
                     SET @@global.event_scheduler = 1;
          Event Scheduler創建的基本語法是:
                    CREATE EVENT      
                    [IF NOT EXISTS]    
                    event_name        
                    ON SCHEDULE schedule  
                    [ON COMPLETION [NOT] PRESERVE]
                    [ENABLE | DISABLE]      
                    [COMMENT 'comment']     
                    DO sql_statement 

          如果要調用procedure
              call sp_name() ,如
          create event flow_job
          on schedule every 1 hour
          starts '2009-12-26 18:06:00'
          do
          call bag_ip_flow();

          如果有多個procedures,則要加begin...end,如
          create event flow_job
          on schedule every 1 hour
          starts '2009-12-26 18:06:00'
          do
          begin
          call  bag_app_flow();
          call bag_ip_flow();
          call bag_ip_group_flow();
          end

          posted @ 2009-12-26 18:59 afunms 閱讀(242) | 評論 (0)編輯 收藏

          snmp trap處理

          在研究了思科的Trap以及朗訊的Trap后,總結出處理trap的思路:

          posted @ 2009-12-16 12:12 afunms 閱讀(239) | 評論 (0)編輯 收藏

          JPCAP——JAVA中的數據鏈路層控制

               摘要: JPCAP——JAVA中的數據鏈路層控制   一.JPCAP簡介 眾所周知,JAVA語言雖然在TCP/UDP傳輸方面給予了良好的定義,但對于網絡層以下的控制,卻是無能為力的。JPCAP擴展包彌補了這一點。 JPCAP實際上并非一個真正去實現對數據鏈路層的控制,而是一個中間件,JPCAP調用wincap/libpcap,而給JAVA語言提供一個公共的接口,從而實現了平臺無關性。...  閱讀全文

          posted @ 2009-12-09 10:22 afunms 閱讀(291) | 評論 (0)編輯 收藏

          kbps

                  碼率就是數據傳輸時單位時間傳送的數據位數,一般我們用的單位是kbps即千位每秒。
            通俗一點的理解就是取樣率,單位時間內取樣率越大,精度就越高,處理出來的文件就越接近原始文件,但是文件體積與取樣率是成正比的,所以幾乎所有的編碼格式重視的都是如何用最低的碼率達到最少的失真,圍繞這個核心衍生出來的cbr(固定碼率)與vbr(可變碼率),都是在這方面做的文章,不過事情總不是絕對的,從音頻方面來說,碼率越高,被壓縮的比例越小,音質損失越小,與音源的音質越接近。
            計算機中的信息都是二進制的0和1來表示,其中每一個0或1被稱作一個位,用小寫b表示,即bit(位);大寫B表示byte,即字節,一個字節=八個位,即1B=8b;前面的大寫K表示千的意思,即千個位(Kb)或千個字節(KB)。表示文件的大小單位,一般都使用字節(KB)來表示文件的大小。
            Kbps:首先要了解的是,ps指的是/s,即每秒。Kbps又稱比特率,指的是數字信號的傳輸速率,也就是每秒鐘傳送多少個千位的信息(K表示千位,Kb表示的是多少千個位);Kbps也可以表示網絡的傳輸速度,為了在直觀上顯得網絡的傳輸速度較快,一般公司都使用kb(千位)來表示,如果是KBps,則表示每秒傳送多少千字節。1KByte/s=8Kbps(一般簡寫為1KBps=8Kbps)。ADSL上網時的網速是512Kbps,如果轉換成字節,就是512/8=64KBps(即64千字節每秒)
            在這里需要說明的問題是在單位換算上有一點是極其重要的即:1Mb=1024kb=1024000b 而1MB=1024KB=1024*1024B=1024*1024*8b=8388608b這在數量上差的很多
            值得注意的是:
            1KB=1024B=1024*8b 1kB=1000B=8000b
            1Kb=1kb=1000b
            在單位換算上一定要注意 正常是以KBps來表示帶寬
            KBps與kBps的區別
            小k代表kilo,千的意思,也就是1000,而B就是字節的意思,ps就是每秒的意思,那么連起來Bps就是字節每秒的意思。
            那么kBps就是1000Bps也就是一千字節每秒的意思。
            而大家都知道在電腦里,KB和B是不同的單位,他們之間換算是1KB=1024B的。
            而KBps(K為大寫字母)就等于1024Bps。而kBps(k為小寫字母)的意思是千字節每秒。
            千字節每秒(KBps)與一千字節每秒(kBps)是不同的。
            KBps=1024Bps,kBps=1000Bps
            也就是說KBps>kBps [1]
            人們常用Kbps形容音樂的聽覺效果。
            在WINDOWS 中它被稱為“位速”,在一些播放器中被形容為“比特率”。
            質量是指將數字聲音由模擬格式轉化成數字格式的采樣率,采樣率越高,還原后的音質就越好。
            ●Kbps值與現實音頻對照:
            16Kbps=電話音質
            24Kbps=增加電話音質、短波廣播、長波廣播、歐洲制式中波廣播
            40Kbps=美國制式中波廣播
            56Kbps=話音
            64Kbps=增加話音(手機鈴聲最佳比特率設定值、手機單聲道MP3播放器最佳設定值)
            112Kbps=FM調頻立體聲廣播
            128Kbps=磁帶(手機立體聲MP3播放器最佳設定值、低檔MP3播放器最佳設定值)
            160Kbps=HIFI高保真(中高檔MP3播放器最佳設定值)
            192Kbps=CD(高檔MP3播放器最佳設定值)
            256Kbps=Studio音樂工作室(音樂發燒友適用)
            實際上隨著技術的進步,音樂質量也越來越高,MP3的最高質量為320Kbps,但一些格式可以達到更高的質量和更高的音質。
            比如正逐漸興起的APE音頻格式,能夠提供真正發燒級的無損音質和相對于WAV格式更小的體積,其質量通常為550kbps-----950kbps。
            其他: 常見編碼模式:
            VBR(Variable Bitrate)動態比特率 也就是沒有固定的比特率,壓縮軟件在壓縮時根據音頻數據即時確定使用什么比特率,這是以質量為前提兼顧文件大小的方式,推薦編碼模式;
            ABR(Average Bitrate)平均比特率 是VBR的一種插值參數。LAME針對CBR不佳的文件體積比和VBR生成文件大小不定的特點獨創了這種編碼模式。ABR在指定的文件大小內,以每50幀(30幀約1秒)為一段,低頻和不敏感頻率使用相對低的流量,高頻和大動態表現時使用高流量,可以做為VBR和CBR的一種折衷選擇。
            CBR(Constant Bitrate),常數比特率 指文件從頭到尾都是一種位速率。相對于VBR和ABR來講,它壓縮出來的文件體積很大,而且音質相對于VBR和ABR不會有明顯的提高。

          posted @ 2009-12-01 10:40 afunms 閱讀(279) | 評論 (0)編輯 收藏

          產品功能介紹

           

          產品功能介紹

          一、       網絡管理

          1.    網絡拓撲自動發現。輸入核心設備的IP地址或核心子網的網絡地址,系統自動發現設備以及鏈路,完成后畫出全網物理拓撲圖。

          2.    拓撲圖展現。

          ① 將網絡自動發現結果的以拓撲圖的形式進行展示,提供設備、鏈路的實時信息。用戶也可對該圖進行自定義的布局。

          ② 不同設備類型以不同的圖標進行展示,而且隨著設備運行狀態(CPU使用率、內存使用率和鏈路連通狀態等)變化其圖標顏色(藍>黃>紅)亦相應變化。

          ③ 可按IP或機器名搜索,快速定位到設備。

          ④ 可將拓撲圖另存為JPG圖片。

          ⑤ 鷹眼視圖為全網絡的縮略圖,點擊其中任一個點可定位到視圖上的設備。

          3.設備基本性能數據。CPU、內存、接口表、路由表、ARP表等。同時,可下載設備配置文件,以作備份。

          二、       服務器管理

          1.基本性能信息:CPU、內存、硬盤/文件系統利用率。

          2.端口使用情況、進程存活、安裝軟件、裸文件(Aix)。

          3.可采集服務器日志作統計分析。

          三、       數據庫管理

          1. Oracle

          基本信息:所處的服務器名、數據庫版本、大小。

          響應時間、用戶連接數、用戶權限角色。

          數據庫狀態、表空間利用率、數據庫鎖。

          SGA擊中率、用戶會話、SQL執行情況。

          2. MS-SQL

          基本信息:數據庫所在的主機名、數據庫版本、數據庫文件路徑。

          響應時間、緩存擊中率、內存使用信息、查詢頁信息。

          事務鎖等待時間、數據文件大小、活動用戶數。

          3. My-SQL

          基本信息:數據庫所在操作系統的類型、數據庫版本、數據庫安裝路徑、數據文件路徑。

          響應時間、每分鐘請求數、每秒發送/接收字節數、連接信息、線程信息。

          表詳細信息、用戶會話。

          四、       中間件管理

          1. Weblogic

          基本信息:操作系統類型、版本、使用JAVA版本、提供者。

          響應時間、JVM使用率、JDBC連接池。

          線程池、web應用會話。

          2. Websphere

          響應時間、JVM使用率。

          JDBC連接池、線程池、servlet會話。

          3. Tomcat

          基本信息:Tomcat版本、操作系統類型、版本、JAVA版本、提供者。

          響應時間、鏈接器線程、JVM堆棧使用情況、服務器請求。

          數據庫連接池、web會話。

          五、Web服務器

          1. HTTP URL

          頁面大小。

          響應時間。

          2. IIS

          響應時間。

          IIS里各網站的性能參數。

          六、IP地址管理

          1. 基于子網的IP地址分布圖。

          2. 基于子網的IP地址使用情況統計。

          3. IP-MAC地址綁定,或者IP-MAC-交換機端口綁定。

          4. IP定位:確定IP地址上聯交換機的端口。

          七、事件及告警管理

          1. 可接收設備Syslog數據,按關鍵字匹配把Syslog轉成系統告警。

          2. 可接收設備SNMP Trap數據,可處理通用Trap數據。同時,可按產商私有MIB來翻譯產商特殊的Trap數據,并轉換成系統告警(需定制開發)。

          曾經成功完成對朗讀ATM交換機Trap數據的完全解析。

          3. 告警設置不僅限于閥值越界告警,還有屬性匹配告警、屬性變化告警以及實體增加或刪除告警。

          4. 告警分析實現告警壓縮、告警合并(告警根源分析)、告警升級以及告警恢復通知。

          5. 告警通知方式:Email、聲音、彈出窗口和手機短信。

          6. 控制告警通知方式:連續式(每產生一次告警都發通知)、跳躍式(每隔3次告警才發通知)和一次式(僅發一次通知)。

          八、報表管理

          1. 網絡設備整體性能報表。

          2. 服務器整體性能報表。

          3.網絡設備接口性能報表。

          4.服務器接口性能報表。

          九、流量管理

          1. 支持Netflow V5和V9。

          2. 對于較小的網絡(設備數在100內),可以用交換機端口鏡像(span)。系統用JPCAP采集原始數據。

          十、可定制開發其它功能,比如實現對防火墻、防病毒系統和IDS的日志采集和分析。

          系統截圖

          http://www.aygfsteel.com/afunms/gallery/43080.html

          posted @ 2009-11-30 20:33 afunms 閱讀(285) | 評論 (0)編輯 收藏

          jar命令

          用jar打包classes,老是會忘記

          C:\java\jdk1.6.0_03\bin>jar cvf c:/nms.jar classes/*.*

          posted @ 2009-11-27 17:19 afunms 閱讀(168) | 評論 (0)編輯 收藏

          ATM網的拓撲發現

                 ATM網的拓撲發現,在網上根本找不到相關資料,經過自己長時間的研究,終于有了結果。經過實際驗證,證明是正確的。

          其實它比IP網的拓撲發現要簡單得多。

          獲取PVC

          PSAX ATM中有4PVC

          ATM2ATM PVC

          cirEm2ATM PVC

          bridge2ATM PVC

          gige2ATM PVC

          由于在acmib中沒有定義gige2ATM PVC,所以只能找到其他三種PVC

          三種PVC的獲取方法:

          PVC

          Table

          OID

          ATM2ATM

          atmPvcVccTable

          1.3.6.1.4.1.1751.2.18.6.1.1

          cirEm2ATM

          cirEmAtmPvcVccTable

          1.3.6.1.4.1.1751.2.18.6.6.1

          bridge2ATM

          bridgeAtmPvcVccTable

          1.3.6.1.4.1.1751.2.18.6.13.1

          算法:

          (1)    找出所有activepvc

          (2)    pvc相同且pvc的服務類型(serviceType)相同的兩個atm之間存在一條物理鏈路。這兩表中sreviceType的代碼所表示的serviceType不相同,比如在atmPvcVccTableserviceType定義為

                SYNTAX INTEGER {

                                          ubr(1),

                                          vbr-nrt2(2),

                                          vbr-nrt1(3),

                                          vbr-rt2(4),

                                          vbr-rt1(5),

                                          vbr-express(6),

                                          cbr4(7),

                                          cbr3(8),

                                          cbr2(9),

                                          cbr1(10),

                                          gfr2(11)

                                          }

          而在cirEmAtmPvcVccTable中為

          SYNTAX INTEGER {

                                          cbr-1(1),

                                          cbr-2(2),

                                          cbr-3(3),

                                          cbr-4(4)

                                         }

          所以不能比較數字,而應該比較字符串。

          (3)    要得到pvc及其所在的接口,就必須得到三個表中的index,以bridgePvcVccTable為例:


           

          以第一行來說明 1305001.101001.11.260

          1305001 interface sideA

          101001 interface sideB

          11.260 PVC

          所以在臺ATM11-260這條PVC就是接在sideB(為什么取sideB而不是sideA?我現在還不明白)101001這個接口上。Interface的格式為SSPPCCC,以此得到物理接口0101

              有些鏈路找不到,可以肯定地說,是因為找不到gige2ATM pvc

          posted @ 2009-10-29 21:55 afunms 閱讀(268) | 評論 (0)編輯 收藏

          PSAX Trap 翻譯(4)

          有了以上三張表,很容易把PSAX Trap翻譯過來:
          /**
               * 翻譯snmp trap
               
          */

              
          private String translatePsaxTrap(Connection conn,SnmptrapDto dto) throws Exception{
                  StringBuffer trap 
          = new StringBuffer(200
          );
                  Statement stat 
          =
           conn.createStatement();
                  String oid 
          = dto.getOid() + "." +
           dto.getSpecifics();
                  ResultSet rs 
          = stat.executeQuery("select b.description from acmib_oid a,acmib_event b where a.oid='" + oid + "' and a.symbol=b.symbol"
          );
                  
          if
          (rs.next())
                      trap.append(rs.getString(
          1
          ));
                  
                  String[] msgs 
          = dto.getMessage().split(","
          );
                  
          /**
                   * 過濾掉最后一行1.3.6.1.4.1.1751.2.18.1.146.
                   
          */

                  
          for(int i=0;i < msgs.length - 1;i++){
                      String[] _msgs 
          = msgs[i].split("="
          );
                      String _oid 
          = _msgs[0].substring(0,_msgs[0].length() - 3); //去掉最后.0

                      String _value = _msgs[1].trim();            
                      rs 
          = stat.executeQuery("select * from acmib_oid where oid='" + _oid + "'"
          );
                      
          if(rs.next())
          {
                          trap.append(rs.getString(
          "symbol")).append("=").append(_msgs[1
          ]);
                          
          if(rs.getString("symbol").endsWith("Code"))
          {
                              ResultSet _rs 
          = stat.executeQuery("select * from acmib_code where symbol='" + rs.getString("symbol"+ "' and code=" +
           _value);
                              
          if
          (_rs.next())
                                  trap.append(
          "[").append(_rs.getString("description")).append("]"
          );
                          }

                          trap.append(
          ",");
                      }
                      
                  }

                  
          return trap.toString();
              }
          (這里省略了接受SNMP Trap的代碼)

          舉例1:
          Trap原包內容:
          oid=
          1.3.6.1.4.1.1751.2.18.8.4
          specifics=67
          message=
          1.3.6.1.4.1.1751.2.18.6.31.1.1.0 = 1309001,
          1.3.6.1.4.1.1751.2.18.6.33.1.1.0 = 14,
          1.3.6.1.4.1.1751.2.18.6.33.1.2.0 = 153,
          1.3.6.1.4.1.1751.2.18.6.33.1.3.0 = 45:86:20:02:00:88:01:00:0f:00:00:00:00:00:00:06:00:90:01:77,
          1.3.6.1.4.1.1751.2.18.6.33.1.4.0 = 301001,
          1.3.6.1.4.1.1751.2.18.6.33.1.5.0 = 0,
          1.3.6.1.4.1.1751.2.18.6.33.1.6.0 = 669,
          1.3.6.1.4.1.1751.2.18.1.146.1.1.0 = 100286

          翻譯后:
          Notification that a SPVC connection between ATM and ATM endpoints has been deleted. spvcAddrIfA= 1309001,
          atmAtmSpvcVccVpiA= 14,
          atmAtmSpvcVccVciA= 153,
          atmAtmSpvcVccRemoteAtmPortAddr= 45:86:20:02:00:88:01:00:0f:00:00:00:00:00:00:06:00:90:01:77,
          atmAtmSpvcVccIfB= 301001,
          atmAtmSpvcVccVpiB= 0,
          atmAtmSpvcVccVciB= 669,
          (這個atmAtmSpvcVccRemoteAtmPortAddr應該能轉成一個IP或Interface,暫時沒搞明白)
          很明顯,可以明白是一條ATM2ATM的SPVC被刪除。

          舉例2:
          Trap原包內容:
          oid=
          1.3.6.1.4.1.1751.2.18.8.3
          specifics=104
          message=
          1.3.6.1.4.1.1751.2.18.15.2.0 = 1309001,
          1.3.6.1.4.1.1751.2.18.15.4.0 = 67,
          1.3.6.1.4.1.1751.2.18.1.146.1.1.0 = 100374,
          翻譯后:
          Notification that a interface has undergone reduction in bandwidth. Critical depending on  Failure Reason Code.interfaceIndex= 1309001,interfaceFailureReasonCode= 67[newBWBelowCurrentAllocated]
          可以看明白,是一個通道的帶寬被改小了。

          posted @ 2009-10-24 01:16 afunms 閱讀(123) | 評論 (0)編輯 收藏

          PSAX Trap 翻譯(3)

          最后,用mibble把acmib所有代碼和它相應的描述導入數據庫。
              /**
               * 導入acmib中所有類型代碼與描述的對映
               
          */

              
          public void importCode(){
                  MibBrowser mb 
          = new
           MibBrowser();
                  Mib mib 
          = mb.getMib("e:/ACMIB.mib"
          );
                  List mvss 
          =
           (List)mib.getAllSymbols();
                  Connection conn 
          =
           ConnectionManager.getConnection();
                  
          int id = 1
          ;            
                  
          try
          {
                      Statement stat 
          =
           conn.createStatement();
                      
          for(int i=0,n=mvss.size();i<n;i++)

                          
          if(mvss.get(i) instanceof
           MibValueSymbol
                                  
          && ((MibValueSymbol)mvss.get(i)).getType() instanceof SnmpObjectType)    
          {                
                              MibValueSymbol mvs 
          =
           (MibValueSymbol)mvss.get(i);                
                              SnmpObjectType soType 
          =
           (SnmpObjectType)mvs.getType();                
                              
          if(soType.getSyntax() instanceof IntegerType)
          {
                                  IntegerType intType 
          =
           (IntegerType)soType.getSyntax();
                                  MibValueSymbol[] itss 
          =
           intType.getAllSymbols();
                                  
          if(itss.length > 0
          )
                                      
          for(int j=0;j < itss.length;j++)
          {
                                          stat.addBatch(
          "insert into acmib_code(id,symbol,code,description)values("
           
                                          
          + id + ",'" + mvs.getName() + "'," + itss[j].getValue() + ",'" + itss[j].getName() + "')"
          );
                                          id
          ++
          ;
                                      }

                              }

                          }

                          
          if( id % 100 == 0)
                              stat.executeBatch();
                      }

                      stat.executeBatch();
                  }
          catch(Exception e){
                      e.printStackTrace();
                  }
                           
              }
              
          結果如下:

          這樣,為翻譯psax trap的所有的基礎數據都準備好了。

          posted @ 2009-10-23 13:59 afunms 閱讀(135) | 評論 (0)編輯 收藏

          PSAX Trap 翻譯(2)

           接著,用mibbleacmib中所有事件導入數據庫:
          /**
               * 導入事件
               
          */

              
          public void importEvent(){
                  MibBrowser mb 
          = new
           MibBrowser();
                  Mib mib 
          = mb.getMib("e:/ACMIB.mib"
          );
                  List mvss 
          =
           (List)mib.getAllSymbols();
                  Connection conn 
          =
           ConnectionManager.getConnection();
                  
          int id = 1
          ;            
                  
          try
          {
                      Statement stat 
          =
           conn.createStatement();            
                      
          for(int i=0,n=mvss.size();i<n;i++)

                          
          if(mvss.get(i) instanceof
           MibValueSymbol
                              
          && ((MibValueSymbol)mvss.get(i)).getType() instanceof SnmpNotificationType)    
          {
                              MibValueSymbol mvs 
          =
           (MibValueSymbol)mvss.get(i);
                              SnmpNotificationType snt 
          =
           (SnmpNotificationType)mvs.getType();
                              String descr 
          = null
          ;
                              String originDescr 
          = null
          ;
                              
          if(snt.getDescription().indexOf(":"> 0
          )
                                  descr 
          = snt.getDescription().substring(snt.getDescription().indexOf(":"+ 2
          );    
                              
          else

                                  descr 
          = snt.getDescription();
                              
          if(descr.indexOf("Return value"> 0
          )
                                  descr 
          = descr.substring(0,descr.indexOf("Return value"
          ));    
                              
          if(descr.indexOf("Data send with the trap"> 0
          )
                                  descr 
          = descr.substring(0,descr.indexOf("Data send with the trap"
          ));
                              descr 
          = descr.replaceAll("\n"" "
          );
                              descr 
          = descr.replaceAll("'""''"
          );
                              originDescr 
          = snt.getDescription().replaceAll("'""''"
          );
                              stat.addBatch(
          "insert into acmib_event(id,symbol,description,origin_description)values(" + id + ",'" + mvs.getName() + "','" + descr + "','" + originDescr + "')"
          );    
                              id
          ++
          ;      
                              
          if( id % 100 == 0
          )
                                  stat.executeBatch();
                          }

                      }

                      stat.executeBatch();
                  }
          catch(Exception e){
                      e.printStackTrace();
                  }

              }

          結果如下:
           

          posted @ 2009-10-22 10:52 afunms 閱讀(104) | 評論 (0)編輯 收藏

          PSAX Trap 翻譯(1)

               今天終于實現把朗訊PSAX ATM交換機的SNMP Trap翻譯成明文的功能。前后花了四天的時間。

               開始,我想用mibble把acmib完全解析出來,但折騰了一整天,都沒有結果,至少最重要的OID是終始出不來,可能是我不會用mibble吧。

               接著換種思路,用SolarWinds(一個很好用的mib browser)把acmib copy成純文本。

                 文本如下:
           

          acMIB     1.3.6.1.4.1.1751.2.18

          connectionConfig   1.3.6.1.4.1.1751.2.18.6

          atmAtmSpvcVccTable   1.3.6.1.4.1.1751.2.18.6.33

          atmAtmSpvcVccEntry   1.3.6.1.4.1.1751.2.18.6.33.1

          atmAtmSpvcVccStatsInOdometerCellCountHiB   1.3.6.1.4.1.1751.2.18.6.33.1.50

          atmAtmSpvcVccStatsInOdometerCellCountLoA 1.3.6.1.4.1.1751.2.18.6.33.1.47

          atmAtmSpvcVccStatsInOdometerCellCountLoB 1.3.6.1.4.1.1751.2.18.6.33.1.51

          atmAtmSpvcVccStatsOdometerReset   1.3.6.1.4.1.1751.2.18.6.33.1.55

          atmAtmSpvcVccStatsOdometerTimer 1.3.6.1.4.1.1751.2.18.6.33.1.54

          atmAtmSpvcVccStatsOutCellCountHiA1.3.6.1.4.1.1751.2.18.6.33.1.37

          atmAtmSpvcVccStatsOutCellCountHiB1.3.6.1.4.1.1751.2.18.6.33.1.41

          atmAtmSpvcVccStatsOutCellCountLoA       1.3.6.1.4.1.1751.2.18.6.33.1.38

          atmAtmSpvcVccStatsOutCellCountLoB       1.3.6.1.4.1.1751.2.18.6.33.1.42

          atmAtmSpvcVccStatsOutOdometerCellCountHiA1.3.6.1.4.1.1751.2.18.6.33.1.48

          atmAtmSpvcVccStatsOutOdometerCellCountHiB1.3.6.1.4.1.1751.2.18.6.33.1.52

          atmAtmSpvcVccStatsOutOdometerCellCountLoA       1.3.6.1.4.1.1751.2.18.6.33.1.49

          atmAtmSpvcVccStatsOutOdometerCellCountLoB       1.3.6.1.4.1.1751.2.18.6.33.1.53

          atmAtmSpvcVccStatsTimer 1.3.6.1.4.1.1751.2.18.6.33.1.43

          atmAtmSpvcVccSusCellRateA2B 1.3.6.1.4.1.1751.2.18.6.33.1.10

          atmAtmSpvcVccSusCellRateB2A 1.3.6.1.4.1.1751.2.18.6.33.1.16

          atmAtmSpvcVccTfcDescModify 1.3.6.1.4.1.1751.2.18.6.33.1.70

          atmAtmSpvcVccTrafficShapingA2B     1.3.6.1.4.1.1751.2.18.6.33.1.64

          atmAtmSpvcVccTrafficShapingB2A     1.3.6.1.4.1.1751.2.18.6.33.1.65

          atmAtmSpvcVccType    1.3.6.1.4.1.1751.2.18.6.33.1.20

          atmAtmSpvcVccVciA    1.3.6.1.4.1.1751.2.18.6.33.1.2

          atmAtmSpvcVccVciB    1.3.6.1.4.1.1751.2.18.6.33.1.6

          atmAtmSpvcVccViA      1.3.6.1.4.1.1751.2.18.6.33.1.56

          ……
           

          把這個文本導入數據庫:

          /**
               * acmib.mib有兩個版本,此方法把兩個版本中數據都導入數據庫.
               * 但保證不會有重復的oid
               
          */

              
          public void importOid(){
                  Connection conn 
          =
           ConnectionManager.getConnection();
                  
          try
          {            
                      Statement stat 
          =
           conn.createStatement();
                      BufferedReader in1 
          = new BufferedReader(new FileReader("e:/acmib.txt"
          ));
                      String row 
          = null
          ;
                      
          int id = 1
          ;
                      
          while((row=in1.readLine())!=null)
          {
                          
          int loc = row.indexOf("1.3.6."
          );
                          String symbol 
          = row.substring(0, loc - 1
          ).trim();
                          String oid 
          =
           row.substring(loc).trim();
                          stat.addBatch(
          "insert into acmib_oid(id,oid,symbol)values(" + id + ",'" + oid + "','" + symbol + "')"
          );
                          id
          ++
          ;
                          
          if( id % 100 == 0
          )
                              stat.executeBatch();
                      }

                      stat.executeBatch();
                      
                      ResultSet rs 
          = stat.executeQuery("select oid from acmib_oid order by oid");
                      List
          <String> oids = new ArrayList<String>
          ();
                      
          while
          (rs.next())
                          oids.add(rs.getString(
          1
          ));
                      
                      BufferedReader in2 
          = new BufferedReader(new FileReader("e:/acmib2.txt"
          ));
                      
          while((row=in2.readLine())!=null)
          {
                          String[] rowCols 
          = row.split(" "
          );
                          
          if(oids.contains(rowCols[2])) continue
          ;

                          stat.addBatch(
          "insert into acmib_oid(id,oid,symbol)values(" + id + ",'" + rowCols[2+ "','" + rowCols[1+ "')"
          );
                          id
          ++
          ;
                          
          if( id % 100 == 0
          )
                              stat.executeBatch();
                      }

                      stat.executeBatch();            
                  }
          catch(Exception e){
                      e.printStackTrace();
                  }

              }
          結果如下:


          posted @ 2009-10-21 10:47 afunms 閱讀(247) | 評論 (0)編輯 收藏

          國慶江西之行

          2009年10月 江西之行:
          廬山--九江--南昌

          到目前為止,我走過的地方:
          吉林:長春
          遼寧:沈陽
          河北:秦皇島、衡水
          北京
          山東:濟南、淄博、濰坊、泰安
          安徽:淮北
          江蘇:徐州
          重慶
          陜西:安康
          江西:南昌、九江
          福建:福州、廈門、泉州、漳州、龍巖、南平、三明
          廣東:廣州、佛山、中山、韶關、惠州、云浮、河源、陽江、潮州、茂名

          posted @ 2009-10-08 11:32 afunms 閱讀(165) | 評論 (0)編輯 收藏

          我們的新產品


           

          posted @ 2009-09-25 15:08 afunms 閱讀(221) | 評論 (2)編輯 收藏

          接口性能各指標的計算公式

          在rfc1213.mib,接口組中:
          if InOctets --接口發送的字節數
          ifOutOctets --接口接收到的字節數
          if InUcastPkts --輸入的單播包數
          ifOutUcastPkts --輸出的單播包數
          if InNUcastPkts --輸入的非單播包數
          ifOutNUcastPkts --輸出的非單播包數
          if InDiscards --接口丟棄的輸入包數
          ifOutDiscards --接口丟棄的輸出包數
          if InErrors --包含錯誤的輸入包數
          ifOutErrors --包含錯誤的輸出包數
          ifinUnkownProtos --由于定向到一個未知或
                     不支持的協議而被丟棄的包數
          ifOutQlen --輸出隊列中的所有包數
          portName --端口的名稱

          性能管理應用一般要觀察接口的利用率、錯誤
          率、丟包率等。這些性能參數都分為輸入和輸出兩
          種情況。下面給出計算公式:
          輸入利用率= (Δif InOctets * 8) / (ifSpeed * T) * 100 %
          輸出利用率= (ΔifOutOctets * 8) / (ifSpeed * T) * 100 %
          輸入差錯率= Δif InErrors/ (Δif InUcastPks + Δif InNucastPks) * 100 %
          輸出差錯率= ΔifOutErrors/ (ΔifOutUcastPks + ΔifOutNucastPks) * 100 %
          輸入丟包率=Δif InDiscards/ T
          輸出丟包率=ΔifOutDiscards/ T

          posted @ 2009-07-31 08:38 afunms 閱讀(1881) | 評論 (0)編輯 收藏

          僅列出標題
          共25頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 

          My Links

          News

          留言簿(18)

          隨筆檔案

          相冊

          搜索

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 利辛县| 沐川县| 连平县| 江山市| 长海县| 吐鲁番市| 栾川县| 博野县| 克山县| 麻栗坡县| 金塔县| 兴隆县| 克什克腾旗| 旅游| 四子王旗| 定州市| 阿城市| 绍兴市| 长泰县| 明溪县| 福安市| 禄劝| 称多县| 达州市| 梁平县| 浏阳市| 乐清市| 岫岩| 盐源县| 柳林县| 阆中市| 富川| 贵溪市| 大埔县| 图们市| 贵定县| 离岛区| 修武县| 新源县| 自治县| 呼和浩特市|