#
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数据,回广州慢慢研究。
在揭阳的三天三夜,紧张而痛苦。我真的遇到一个大难题......
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
在研究了思科的Trap以及朗讯的Trap后,总结出处理trap的思路:
摘要: JPCAP——JAVA中的数据链路层控制
一.JPCAP简介
众所周知,JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP扩展包弥补了这一点。
JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。...
阅读全文
码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是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不会有明显的提高。
产品功能介绍
一、 网络管理
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.blogjava.net/afunms/gallery/43080.html
用jar打包classes,老是会忘记
C:\java\jdk1.6.0_03\bin>jar cvf c:/nms.jar classes/*.*
ATM
网的拓扑发现,在网上根本找不到相关资料,经过自己长时间的研究,终于有了结果。经过实际验证,证明是正确的。
其实它比IP网的拓扑发现要简单得多。
获取PVC:
PSAX ATM中有4种PVC:
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) 找出所有active的pvc。
(2) pvc相同且pvc的服务类型(serviceType)相同的两个atm之间存在一条物理链路。这两表中sreviceType的代码所表示的serviceType不相同,比如在atmPvcVccTable中serviceType定义为
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
所以在台ATM中11-260这条PVC就是接在sideB(为什么取sideB而不是sideA?我现在还不明白)101001这个接口上。Interface的格式为SSPPCCC,以此得到物理接口0101。
有些链路找不到,可以肯定地说,是因为找不到gige2ATM pvc。
有了以上三张表,很容易把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]
可以看明白,是一个通道的带宽被改小了。
最后,用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的所有的基础数据都准备好了。
接着,用mibble把acmib中所有事件导入数据库:
/** *//**
* 导入事件
*/
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();
}
}
结果如下:
今天终于实现把朗讯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();
}
}
结果如下:
2009年10月 江西之行:
庐山--九江--南昌
到目前为止,我走过的地方:
吉林:长春
辽宁:沈阳
河北:秦皇岛、衡水
北京
山东:济南、淄博、潍坊、泰安
安徽:淮北
江苏:徐州
重庆
陕西:安康
江西:南昌、九江
福建:福州、厦门、泉州、漳州、龙岩、南平、三明
广东:广州、佛山、中山、韶关、惠州、云浮、河源、阳江、潮州、茂名
在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