2010年5月20日星期四

How to avoid OutOfMemory (OOM) Exception using Bitmaps

Step 1. 
First thing I want you to think about is that do You really need to use Bitmaps?
If the answer is No, go to step 2. :) Otherwise, think again.
Ok, Let me explain it. I needed Bitmaps to get the width of the images, to create an ImageAdapter for my Gallery. As far as I know, there's no other way to do that. So I used Bitmaps, and even if I recycled them, once in a while it stopped with the message: DDMS: OutOfMemory .. Phone: Force Close..
Not to speak about how laggy your app will be if you are using Bitmaps..
I've spent 2 weeks to find a solution for this problem, but I couldn't find any usable of them. Then I thought, I try not using Bitmaps anymore. So I have to find another way to get the width of images. Unfortunately, it's just a workaround, but it works so who cares, right?
I can determine widths with a PHP script, store it in my existing database. After I did that, everything was working properly.
Again, You really have to think about whether you really need Bitmaps or not.


2010年5月19日星期三

SSL漏洞是个越来越大的风险

20091117 10:09:07

现在,有人可以可以利用这个SSL漏洞攻击Twitter了。请看这个文章:http://www.eweek.com/c/a/Security/Researcher-Demonstrates-SSL-Vulnerability-on-Twitter-291904/

TagsSSL漏洞   网络安全  

 

源文档 <http://yepeng.blog.ccidnet.com/blog-htm-do-showone-uid-324773-type-blog-itemid-6855536.html>

 



未来十年安全领域的发展趋势

未来一年和接下来十年中,安全领域将发生什么样的变化时,可能每个人都有不同的想法。由于互联网让我们的预测和保存变得非常容易,也就意味着预测很容易被验证。但我们仍然大胆的对未来安全的发展趋势,说出我们的观点。

 

1.云计算将无所不在

 

2010年底,更多企业会开始将他们的数据迁入云中,在未来十年中,这一进程将持续下去。从经济学的角度来看,云计算是非常有意义的,但对于IT 专业人士来说,它将在安全方面带来新挑战。

 

规模较小的公司将从云供应商的安全机制中获得好处,这看起来非常好,但将所有数据放到一个篮子中又构成了安全问题。只要出现一个安全漏洞,一台服务器被成功入侵,就可能会引发一场灾难。

 

我们的的建议:确保云供应商对你的数据进行备份和加密处理。此外,据我们了解,许多国家已经出台了相关的数据保护规定,比如欧洲数据保护法规定,欧洲公司持有的数据必须在一个欧洲数据中心中托管。

     【批注:这个文章比较系统的阐述了云安全的问题】

 

2.身份标识号码和访问管理

 

身份和访问管理将变得越来越重要。随着云计算的增长,给予雇员和合作伙伴访问业务系统的权限也将成为必须。许多公司已经意识到这一点,并发布了新产品,以解决使用中的问题。

 

3.公共部门开始网络化

 

公共部门将开始着手建立属于自己的私有云。这显然是必然趋势,比如现在在英国已经开始建立政府云(G-Cloud)。另一方面,就是通过对人们进行培训让网站变得更容易使用达到提高服务效果的作用。

 

另外公共部门还希望将公共数据统一在一种格式下,以方便内容聚合。一切看上去都很好,但这些策略同样会带来安全方面的问题。其实公共部门数据在保持安全方面的记录存在很多的问题。大家可以轻松的找到许多事件和例证。

 

公共部门数据的分享也将有利于数据流通,但也意味着它可以更容易受到影响——无论是攻击政府系统,或利用公务员的安全意识和对工作的态度等。公共部门现在才开始认识到数据的价值。更多的网站加入数据共享就意味着针对用户通过网络钓鱼等形式的攻击将进一步增加。弱加密的无线网络没有消失,让这种袭击变得更容易。

 

尽管如此,在未来的十年中,我们将可能看到第五或第六代网络标准的部署,并在提高安全性方面实现从无到有的改变。

4.物联网

 

随着越来越多的设备接入到互联网中,互联网将变成“物联网”。举例来说,你可以将冰箱连接到互联网上。冰箱中的传感器可让你实现自动在线购买食品。牛奶快喝完了?不用担心,冰箱将自动下达购买新牛奶的定单。

 

当然,这种发展需要非常严格的安全和隐私保护措施才能获得成功。从营销的角度来看,这种类型的数据将是非常宝贵的,因此,需要予以保护。从广义的范围来看,设备制造商也有可能对 网络设备的安全造成意想不到的后果。举例来说,你的冰箱不应该成为影响家庭网络数据业务的原因。与此同时,监测亦会带来无所不在的危险,因为数字相机和其它窃听装置变得这么小,以至于你用肉眼无法看到它们。

      【批注:参见这个关于物联网安全的文章】

 

5.网状网

 

网状网络中的设备是传输节点,这是一个非常奇妙的创意,不过目前并没有迅速流行起来。一些专家认为,网状网将越来越受到欢迎。但网格会给安全实施带来深远的影响。如果你有一系列正在传输互联网流量的节点的话,只有其中的一些会保持联系。

 

从隐私的角度来看,这一变化是个好消息,但它会导致追踪流量变得几乎是不可能了。安全专家们已经发现这样的问题出现,由于身份不明的人员控制了僵尸网络中的计算机就可以进行拒绝服务攻击了。网状网可以放大这个问题。

 

但人们也担心网状网络的发展可能消除互联网服务提供商和用户之间的差别。互联网服务供应商有保存整个网络上流量记录的法律义务,这将超出大多数人的承担能力。

 

6.移动僵尸网络

 

随着具备互联网功能的设备变得越来越普遍,它们将为网络犯罪分子带来更多的可乘之机。拥有大量被控制计算机的僵尸网络,可以用来进行拒绝服务攻击,发送垃圾邮件以及为声名狼藉的网站提供保护。随着iphonegoogle 手机的热销,智能手机之类的设备也不是没有可能成为犯罪分子的选择。

7.超高速宽带

 

随着网络 带宽的不断提升,显然光线入户,超宽带的性能已经之日可带。然而,正如下载速度提高将会给公司带来获得更大业务量的机会,它也将为网络犯罪分子提供同等的机会。

 

8.DNS全扩展

 

互联网寻址系统,即域名系统(DNS),已经象安全研究员丹?卡明斯基预计的一样开始出现缺陷了。域名服务器的缓存有可能中毒,这会导致一台 计算机请求查询一个合法网站时,返回一个恶意网站。【批注:就像百度被黑的事件,而工信部也发文要求加强域名服务的安全保障力度】

 

因此,称为DNSSEC的安全DNS协议就出现了。全球互联网根服务器之一的运营商,威瑞信公司最近宣布将部署DNSSEC。希望控制根服务器的其它机构也响应这一倡议,DNSSEC应该普及到整个互联网上,这样就可以完全消除DNS缓存中毒的漏洞。但这一主宰了互联网的完美发展的重要协议,在将来发生革命性的变化也不是不可能发生。

 

9.下一代互联网协议IPv6

 

IPv6IPv4的继任者。由于IPv4地址即将耗尽,实施IPv6标准是必要的,并且将显着地提高网络的安全性。IPv6可以支持IP层协议安全结构,每个数据包中的数据流都可以验证和加密,所有截获的数据都将被加密。

 

10.网络战

 

许多国家正在着手开发网络攻击和防御的技术。而且都已表示,将只会在最需要的情况下进行网络攻击,但我们可以却行,国家网络安全行动中心的人员将有能力入侵其他国家的网络,同样对保护自己国家网络有着重要的责任。【批注:更多关于网络战cyberwarface的文章参见这里。此外,我的博客中有大量相关博文。】

 

摘自:http://www.enet.com.cn/article/2010/0222/A20100222612502.shtml

Tags发展趋势   信息安全   网络安全  

 

源文档 <http://yepeng.blog.ccidnet.com/blog-htm-do-showone-uid-324773-type-blog-itemid-7504233.html>

 


手动编译安装SNMP5.5的过程

./configure --prefix=/usr/local --with-perl-modules --enable-embedded-perl --enable-shared

Make

Make test

Make install

 

 

mib2c TEST-MIB:test   MIB2C生成代码

 

 



snmpwalk 出�"Timeout: No Response

snmpwalk 出�"Timeout: No Response

十月 22nd, 2008 at 17:38

bash: snmpwalk: command not found 是因为snmpwalk需要安装额外的软件包 net-snmp-utils

排除net-snmp安装的问题.......

如果还出现Timeout: No Respons

Timeout: No Response 是因为以下4种原因:

1、安全映射名(还有别的叫法,反正默认的就是public)。

2、防火墙。

3、系统没有启动服务。

4、您自己写的搜集状态的脚本运行时间较长。第四种原因还没有证实,目前我碰到的情况应该就是第四种。

使用snmpwalk若跑了一些讯息后停下来Timeout: No Respons

可能是网路环境不好,可以适度调整一下

请加参数(-t),例如:snmpwalk -c public -v 1 -t 120 192.168.1.55

 

源文档 <http://www.ai77.org/archives/77>

 



snmp配置问题

�教snmpd的��~�是出�~~Timeout: No Response from localhost

(1/1)

owenchen:

小弟的系��FC6

 

安�的SNMP版本�

net-snmp-utils-5.3.1-14.fc6

net-snmp-devel-5.3.1-14.fc6

net-snmp-5.3.1-14.fc6

 

snmpd.conf�定��:

 

com2sec notConfigUser  default       public

com2sec local          localhost     mymrtg

com2sec mynetwork      192.168.1.0/24 mymrtg

 

group   notConfigGroup v1           notConfigUser

group   notConfigGroup v2c          notConfigUser

group   MyRWGroup      v1           local

group   MyROGroup      v1           mynetwork

group   MyRWGroup      v2c          local

 

view    systemview    included   .1.3.6.1.2.1.1

view    systemview    included   .1.3.6.1.2.1.2

view    systemview    included   .1.3.6.1.2.1.25.1.1

view    all           included   .1 80

 

access  notConfigGroup ""      any       noauth    exact  systemview none none

access  MyROGroup      ""      any       noauth    exact  all none none

access  MyRWGroup      ""      any       noauth    exact  all all none

 

syslocation Unknown (edit /etc/snmp/snmpd.conf)

syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)

 

pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat

 

�器Listsen的��如下:

[root@test snmp]# netstat -tulnp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name

tcp        0      0 0.0.0.0:20000               0.0.0.0:*                   LISTEN      2351/perl

tcp        0      0 0.0.0.0:832                 0.0.0.0:*                   LISTEN      1923/ypserv

tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN      1953/slapd

tcp        0      0 127.0.0.1:199               0.0.0.0:*                   LISTEN      7399/snmpd

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2071/mysqld

tcp        0      0 0.0.0.0:110                 0.0.0.0:*                   LISTEN      2106/dovecot

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1902/portmap

tcp        0      0 0.0.0.0:10000               0.0.0.0:*                   LISTEN      2357/perl

tcp        0      0 192.168.1.12:53             0.0.0.0:*                   LISTEN      1876/named

tcp        0      0 192.168.1.11:53             0.0.0.0:*                   LISTEN      1876/named

tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      1876/named

tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      5328/master

tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      1876/named

tcp        0      0 :::389                      :::*                        LISTEN      1953/slapd

tcp        0      0 :::80                       :::*                        LISTEN      2229/httpd

tcp        0      0 :::22                       :::*                        LISTEN      2002/sshd

tcp        0      0 :::443                      :::*                        LISTEN      2229/httpd

udp        0      0 0.0.0.0:32768               0.0.0.0:*                               1876/named

udp        0      0 0.0.0.0:10000               0.0.0.0:*                               2357/perl

udp        0      0 0.0.0.0:20000               0.0.0.0:*                               2351/perl

udp        0      0 0.0.0.0:161                 0.0.0.0:*                               7399/snmpd

udp        0      0 192.168.1.12:53             0.0.0.0:*                               1876/named

udp        0      0 192.168.1.11:53             0.0.0.0:*                               1876/named

udp        0      0 127.0.0.1:53                0.0.0.0:*                               1876/named

udp        0      0 0.0.0.0:829                 0.0.0.0:*                               1923/ypserv

udp        0      0 0.0.0.0:602                 0.0.0.0:*                               2121/rpc.yppasswdd

udp        0      0 0.0.0.0:111                 0.0.0.0:*                               1902/portmap

udp        0      0 :::32769                    :::*                                    1876/named

 

本���防火��置~~~~@@

�什�每次我下snmpwalk指令~~~都�有回�呢@@

[root@test snmp]# snmpwalk localhost -c mymrtg -v 1

Timeout: No Response from localhost

 

�教各位前�~~~真的不懂阿@@

��

[0] 文章列表

 

源文档 <http://phorum.study-area.org/index.php?topic=45287.0;wap2>

 



net-snmp中载入第三方mib库

 

Management Information Base(管理信息库,MIB)是一组对象,定义可对某个设备提出的查询。

我们所用的snmp监控主机如果要轮询一个支持snmp的设备的某项数据,它必须发出被查询设备所能理解的查询命令,这个就需要监控主机载入被查询设备对应的MIB,这个MIB将通知snmp监控主机有关由 MIB 模块化的数据的布局和组成。

Linux中所使用的net-snmp自带了一些标准的MIB,但是世界上支持snmp的设备有无数种,各厂家都有自己的定义,这些定义不可能都包含在net-snmp自带的MIB中,因此,想要正确轮询一个这样的设备,必须载入厂家自己的MIB文件。

一般我们下载回来的MIB文件可能后缀名为.mib,为了清晰起见,一般改成 MIB_NAME.txt 这样的形式,当然不改也可以,这个MIB文件叫什么名字无关紧要

 

系统要载入一个MIB文件,net-snmp必须知道从哪里载入。默认情况下是下边两个目录:

 

   1.  $HOME/.snmp/mibs

   2. /usr/local/share/snmp/mibs 

 

不过也有些发行版会改变这个默认路径,那么可以用下边两种方法之一获取它所使用的路径。

 

1.如果系统安装了net-snmp-config:   net-snmp-config --default-mibdirs

 

2.如果未安装net-snmp-config:   snmptranslate -Dinit_mib .1.3 2>&1 |grep MIBDIR

 

一般来说MIB文件是一个纯文本文件,我们打开这个文件查看,找到第一个包含 DEFINITIONS 的行

 

例如/usr/share/snmp/mibs/IP-MIB.txt 中包含如下一行

IP-MIB DEFINITIONS ::= BEGIN

这个DEFINITIONS关键字前边的 "IP-MIB" 就是系统在调用这个MIB文件时所使用的Module名称,这个很重要。

网上有一些文档说增加一个新的mib文件就是把mib文件复制到'/usr/share/snmp/mibs/'中就可以了,其实这是不对的!

首先,我们要将下载到的MIB文件复制到前边所说的两个默认路径中的一个里

但是光复制过去还不能生效,net-snmp是不会自动加载所有在/usr/share/snmp/mibs/目录中的mib文件的!

如果不能正确加载mib文件的话,就会出现 "Unknown Object Identifier" 这样的错误。 

如果要net-snmp自动加载我们下载的新MIB文件,有两种方法:

方法一: 放到snmp.conf中。

 

用 net-snmp-config --snmpconfpath可以确定snmp.conf文件的位置

 

[root@Kickstart-O ~]# net-snmp-config --snmpconfpath

/etc/snmp:/usr/share/snmp:/usr/lib/snmp:/root/.snmp:/var/net-snmp

 

将所要加载的MIB的Module名称加到snmp.conf中,如下例:

 

   mibs +CISCO-RHINO-MIB

   mibs +SOME-OTHER-SPIFFY-MIB

 

如果图省事也可以这样,当然我们不建议这样。

 

   mibs +ALL

 

因为这样有可能会提示如下错误

 

% snmpwalk -v2c public 192.168.1.100

 Warning: Module MAU-MIB was in /usr/share/snmp/mibs//DOT3-MAU-MIB.txt now is /usr/share/snmp/mibs//RFC2668-MIB.txt

 Warning: Module DISMAN-EVENT-MIB was in /usr/share/snmp/mibs//EVENT-MIB.txt now is /usr/share/snmp/mibs//DISMAN-EVENT-MIB.txt

 Warning: Module P-BRIDGE-MIB was in /usr/share/snmp/mibs//P-BRIDGE-MIB.txt now is /usr/share/snmp/mibs//P-BRIDGE.txt

 

可以将标准错误文件转向来屏蔽这些警告信息

 

% snmpwalk -v2c public 192.168.1.100 2>/dev/null

 SNMPv2-MIB::sysDescr.0 = STRING: Linux server1 2.4.34-pre2 #170 Fri Sep 15 20:10:21 CEST 2006 mips

 SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-TC::linux

 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (706980) 1:57:49.80

 

方法二: 使用系统变量

 

   MIBS=+CISCO-RHINO-MIB:SOME-OTHER-SPIFFY-MIB

   export MIBS

通过上述两种方法之一,net-snmp就可以正确加载我们的新MIB文件,使用snmpget也就可以轮询到新MIB文件中所定义的OID了。

# snmpget -v1 -c public 192.168.49.253 BREEZECOM-DOT11EXT-MIB::roamQuality.1

  BREEZECOM-DOT11EXT-MIB::roamQuality.1 = INTEGER: 3

或者这样也可以

# snmpget -v1 -c public 192.168.49.253 roamQuality.1

  BREEZECOM-DOT11EXT-MIB::roamQuality.1 = INTEGER: 3

一个不太常用,但是非常有用的命令是snmptranslate,使用'snmptranslate' 命令可以获得一个文本项对应的OID值

# snmptranslate -On BREEZECOM-DOT11EXT-MIB::roamQuality

   .1.3.6.1.4.1.710.7.1.5.1.23.1.7

也可以使用'snmptranslate' 命令查询一个指定的对象

# snmptranslate -IR roamQuality

   BREEZECOM-DOT11EXT-MIB::roamQuality

还可以用snmptranslate命令把OID转化成文字描述

# snmptranslate .1.2.840.10036.2.2.1.12

   IEEE802dot11-MIB::dot11FCSErrorCount

# snmptranslate -Of .1.2.840.10036.2.2.1.12

.iso.member-body.us.ieee802dot11.dot11mac.dot11CountersTable.dot11CountersEntry.dot11FCSErrorCount

也可用snmptranslate命令从mib文件获得某个对象的全部细节

# snmptranslate -Td BREEZECOM-DOT11EXT-MIB:roamQuality

   BREEZECOM-DOT11EXT-MIB::roamQuality

   roamQuality OBJECT-TYPE

     -- FROM       BREEZECOM-DOT11EXT-MIB

     SYNTAX        Integer32

     MAX-ACCESS    read-only

     STATUS        current

     DESCRIPTION   "An indicator for the quality of the BSS. The quality is

                    calculated over the received Beacons of the BSS and depends

                    on the selected quality indicator. The semantics of the

                    indicator is 'low is good quality' and 'high is bad quality'."

   ::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) breezeCOM(710) ds11Products(7)    dot11ExtMIB(1) dot11ExtWBUObjs(5) roam(1) roamTable

(23) roamEntry(1) 7 }

另一个有用的命令是snmpwalk

  # snmpwalk -v1 -c public 192.168.49.253 dot11CountersTable

  IEEE802dot11-MIB::dot11TransmittedFragmentCount.1 = INTEGER: 122172497

  IEEE802dot11-MIB::dot11MulticastTransmittedFrameCount.1 = INTEGER: 45242

  IEEE802dot11-MIB::dot11FailedCount.1 = INTEGER: 4009

  IEEE802dot11-MIB::dot11RetryCount.1 = INTEGER: 1601483

  IEEE802dot11-MIB::dot11MultipleRetryCount.1 = INTEGER: 885859

  IEEE802dot11-MIB::dot11FrameDuplicateCount.1 = INTEGER: 543281

  IEEE802dot11-MIB::dot11RTSSuccessCount.1 = INTEGER: 0

  IEEE802dot11-MIB::dot11RTSFailureCount.1 = INTEGER: 0

  IEEE802dot11-MIB::dot11ACKFailureCount.1 = INTEGER: 3971754

  IEEE802dot11-MIB::dot11ReceivedFragmentCount.1 = INTEGER: 108826417

  IEEE802dot11-MIB::dot11MulticastReceivedFrameCount.1 = INTEGER: 31359

  IEEE802dot11-MIB::dot11FCSErrorCount.1 = INTEGER: 831325

  IEEE802dot11-MIB::dot11TransmittedFrameCount.1 = INTEGER: 122156588

  IEEE802dot11-MIB::dot11WEPUndecryptableCount.1 = INTEGER: 0

需要注意的是,在使用snmpget命令的时候,需要在查询的OID尾部增加.0 或者 .1,不然会报错。

   # snmpget -v1 -c public 192.168.49.253 dot11ACKfailureCount

   Error in packet

   Reason: (noSuchName) There is no such variable name in this MIB.

   Failed object: IEEE802dot11-MIB::dot11ACKFailureCount

   # snmpget -v1 -c public 192.168.49.253 dot11ACKFailureCount.1

   IEEE802dot11-MIB::dot11ACKFailureCount.1 = INTEGER: 3971912

还有在unix系统中,系统是大小写敏感的,因此写OID的时候注意大小写不要写错。

参考文档:

http://www.nwsmith.net/HintsTips/net-snmp-tutorial.htm

http://www.net-snmp.org/wiki/index.php/TUT:Using_and_loading_MIBS

注: 因为有几个网友加我msn询问本文中的一些问题,让我觉得原来一些地方写的不够清晰明了,因此在2010年02月05日对这篇博文作了一些修改,希望大家能看得更明白一些,^^。

 

源文档 <http://polygun2000.spaces.live.com/blog/cns!182B490BAC7D9686!389.entry>

 

http://polygun2000.spaces.live.com/default.aspx



安装SNMP需要注意的问题

本说明仅针对于下面的开发环境:

UCD-SNMP 4.2.7.1

RedHat Ent AS 4

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

UCD-SNMP是个开源的SNMP实现项目。支持SNMPv1SNMPv2SNMPv3,支持基于IPv4IPv6SNMP应用程序开发。

 

UCD-SNMP包括以下内容:

完整的API用于SNMP应用程序开发(包括cperlAPI);

一个可扩展的SNMP代理程序(snmpd);开发者可开发动态模块扩展snmpdUCD-SNMP内置扩展子代理与主代理的通信协议;

提供众多命令行工具检查和使用SNMP协议;

一个trap接收进程,用于接收和显示trap。并可以将trap记录到日志文件里;一个图形化的MIB浏览工具(tkmib:基于Tk/Perl的);

UCD-SNMP被很多商业化linux包含,绝大部分公司使用UCD-SNMP的主代理实现LinuxSNMP支持。

 

 

安装ucd-snmp4.2.7之前需要注意的问题:

  1. 确认是否安装了libselinux libselinux-devel

/bin/sed: cant read /usr/lib/libbeecrypt.la: No such file or directory

libtool: link: `/usr/lib/libbeecrypt.la’ is not a valid libtool archive

make[1]: *** [libnetsnmpmibs.la] Error 1

解决:以为缺少libbeecrypt.la libbeecrypt.so等共享库,如:rpm ivh beecrypt-4.2.1

 

/usr/bin/ld: cannot find -lelf

解决:ln -s /usr/lib/libelf.so.1 /usr/lib/libelf.so linux系统有关

 

/usr/bin/ld:cant not find -lselinux

解决:缺少libselinux libselinux-devel包,如:rpm ivh selinux

 

  1. 确认是否安装了gcc编译器和Perl编译器
  2. 确认是否安装了libtool

 

 

安装ucd-snmp之前一定要注意,先配置好linux的运行环境,安装相应的包,凡是在敲入make命令编译的过程中,出现的错误提示,或是用make test命令编译出现的错误提示,均要首先考虑是否安装了软件包的devel版本。

如:libselinux-devel版本,beecrypt-devel版本,elf-devel版本等等。

 

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

 

 

UCD-SNMP安装完成以后:

  1. 可扩展代理snmpd位于:/usr/local/ snmp
  2. C语言开发库位于: /usr/local/ lib
  3. C语言开发头文件位于:/usr/local/ include
  4. UCD-SNMP提供的SNMP工具位于: /usr/local/ snmp
  5. UCD-SNMP依赖的MIB文件位于:/usr/local/ snmp/mibs
  6. UCD-SNMP依赖的配置文件: /usr/local/ snmp/conf/etc/snmp

 

UCD-SNMP命令说明:

  1. snmptranslate
  2. snmpget
  3. snmpgetnext
  4. snmpwalk
  5. snmptable
  6. snmpset
  7.  

FAQ

1.如何验证snmpd已经启动了?

ps –aef | grep snmpd

 

2. 是否可以从.1开始采集服务器数据?

snmpwalk -v 1 -c public localhost .1

 

  1. 如何使用自己的snmpd.conf文件?(尚未测试)

加入如下参数使snmpd使用指定配置文件启动:

snmpd -C -c /etc/snmp/snmpd.conf

//该方式,我们可以配置很多不同的配置文件,设置不同的运行环境,便于学习和开发。

 

  1. SNMP需要的包是什么?

libselinux-1.19.1-7.4

libselinux-devel-1.19.1-7.4

beecrypt-3.1.0-6

beecrypt-devel-3.1.0-6

 

[root@SAG ~]# rpm -ivh net-snmp-5.1.2-11.EL4.11.i386.rpm

warning: net-snmp-5.1.2-11.EL4.11.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e

error: Failed dependencies:

        libbeecrypt.so.6 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libbz2.so.1 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libcrypto.so.4 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libelf.so.1 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libnetsnmp.so.5 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libnetsnmpagent.so.5 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libnetsnmphelpers.so.5 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libnetsnmpmibs.so.5 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libnetsnmptrapd.so.5 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libpopt.so.0 is needed by net-snmp-5.1.2-11.EL4.11.i386

        librpm-4.3.so is needed by net-snmp-5.1.2-11.EL4.11.i386

        librpmdb-4.3.so is needed by net-snmp-5.1.2-11.EL4.11.i386

        librpmio-4.3.so is needed by net-snmp-5.1.2-11.EL4.11.i386

        libselinux.so.1 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libsensors.so.3 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libwrap.so.0 is needed by net-snmp-5.1.2-11.EL4.11.i386

        libz.so.1 is needed by net-snmp-5.1.2-11.EL4.11.i386

 

 

rpm -ivh beecrypt-devel-3.1.0-6.x86_64.rpm

rpm -ivh elfutils-libelf-devel-0.97.1-5.x86_64.rpm

rpm -ivh libselinux-devel-1.19.1-7.4.x86_64.rpm

rpm -ivh lm_sensors-2.8.7-2.40.5.x86_64.rpm 



GCC 编译动态库及引用库 收藏

1、把头文件及C文件编译成*.o的文件 一般的命令:

     gcc -c -fPIC x.c 

     x为你的C文件名

     -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

2、把编译好的*.o文件链接成库文件 一般的命令:

     gcc -shared -o libxxx.so *.o *.o  ... *.o

     libxxx.so其中xxx为要生成的库文件名,linux动态库,库文件名格式为libxxx.so。*.o为第一步中生成的*.o文件。

3、测试你的库 要自己编一个测试程序假定测试文件名为test.c :

     gcc -Wall -I./ -L./ -lxxx -o run test.c

     -L.:表示要连接的库在当前目录中

     -ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称

     LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。

     当然如果有root权限的话,可以修改/etc/ld.so.conf文件,然后调用 /sbin/ldconfig来达到同样的目的,不过如果没有root权限,那么只能采用        输出LD_LIBRARY_PATH的方法了。

     run为要生成的测试程序可执行文件名

4、$ldd run

     执行run,可以看到它是如何调用动态库中的函数的。也可以看哪里调用失败

5、注意:

     调用动态库的时候有几个问题会经常碰到,有时,明明已经将库的头文件所在目录 通过 “-I” include进来了,库所在文件通过 “-L”参数引导,并指定了“-l”的库名,但通过ldd命令察看时,就是死活找不到你指定链接的so文件,这时你要作的就是通过修改LD_LIBRARY_PATH或者/etc/ld.so.conf文件来指定动态库的目录。通常这样做就可以解决库无法链接的问题了。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qihuanfengyun/archive/2010/01/22/5223353.aspx

uCLinux上UCD-SNMP Agent的实现

[转载请注明出处,作者:张洪耿,patrick_zhg@hotmail.com]

讨论采用开放源码的UCD-SNMP 4.2.1软件包开发自己的SNMP Agent,不涉及SNMP协议包的组包、解析等问题。本文从以下部分进行介绍:
一:UCD-SNMP 4.2.1简介及SNMP Agent开发步骤
二:MIB库模块设计及代码转换
三:SNMP Agent功能扩展方式
四:uCLinux系统上SNMP Agent的实现
五:创建SNMP Agent配置文件snmpd.conf

一:UCD-SNMP 4.2.1简介及SNMP Agent开发步骤
UCD-SNMP 4.2.1开源软件包支持SNMPv1 (RFCs 1155-1157)、SNMPv2c(RFCs 1901-1908)、SNMPv3 (RFCs 2271-2275)三种SNMP协议版本,其由以下内容组成:
  可扩展的SNMP Agent程序(snmpd);
  SNMP Agent和管理程序开发库;
  用于检索或设置SNMP Agent端变量的工具程序(snmpget, snmpset, snmptable, snmpwalk等);
  用于生成或处理SNMP陷阱的工具程序(snmptrapd和snmptrap);
  基于Tk/perl的MIB浏览器(tkmib)

SNMP Agent的开发一般采用以下步骤:
  MIB库模块设计。
  MIB库模块转换为C语言代码。
  转换后的C语言代码添加到UCD-SNMP源码包,实现SNMP Agent的功能扩展。

二:MIB库模块设计及代码转换
 在SNMPAgent开发中,首先要定义出MIB库模块,这样,SNMP管理端软件才能通过该MIB库模块实现对相应设备的管理。MIB库模块定义的语法,可以参照SNMP 协议中的SMI描述部分,本文使用MG-SOFT公司的“Visual MIBBuilder”可视化设计软件完成MIB库模块的定义。MIB库模块定义后,需要在代理程序中增加与所定义的MIB库模块相对应的源代码,这里就要使用MIB2C工具程序把MIB库模块文件转换成C源代码。
 MIB2C是UCD-SNMP 4.2.1软件包中的工具程序,该工具程序需要SNMPperl扩展模块支持。按以下步骤进行转换,首先将设计好的MIB库模块定义文件拷贝到UCD-SNMP源代码的mibs目录(如/usr/local/share/snmp/mibs),然后运行MIB2C命令(假定MIB库模块为modulename)。
/usr/local/bin/mib2c modulename
     此时,MIB2C会在当前目录下生成两个C源文件:modulename.h 和modulename.c,这两个文件是根据所设计的MIB库模块转换而成的,也是需要加入到UCD-SNMP软件包实现SNMP Agent功能扩展的源代码。

三:SNMP Agent功能扩展方式
    SNMP Agent功能扩展即snmpd功能扩展,假定UCD-SNMP源代码存放在/usr/local/src/目录下,下面是实现snmpd功能扩展的两种方式:

静态链接方式
 先将生成的两个文件, modulename.h和modulename.c,拷贝到UCD-SNMP源代码的/usr/local/src/ucd-snmp-4.2.1/agent/mibgroup目录,然后,在ucd-snmp 4.2.1目录下(/usr/local/src/ucd-snmp-4.2.1)执行以下命令生成snmpd。

# ./configure -with-mib-modules="modulename" 
# make 
# make install

共享链接库方式
    首先, 在任一目录(如/usr/local/temp)编译生成共享链接库。将两个源文件, modulename.h和modulename.c拷贝到此目录下,执行如下命令生成共享链接库:

gcc -g -I/usr/local/include -c -o modulename.o modulename.c
gcc -g -fPIC -shared -o modulename.so modulename.o 

然后,通过以下任意一种方式动态加载共享链接库。

如果代理程序(snmpd)已运行,执行如下命令:
   #snmpset localhost rwnode UCD-DLMOD-MIB::dlmodStatus.1 i create 
     #snmpset localhost rwnode UCD-DLMOD-MIB::dlmodName.1 s " modulename" 
     #snmpset localhost rwnode UCD-DLMOD-MIB::dlmodPath.1 s "/usr/local/temp/ modulename.so" 
    #snmpset localhost rwnode UCD-DLMOD-MIB::dlmodStatus.1 i load 
    这样即可加载刚才生成的共享连接库,装载后,可以用工具程序检索或设置相应的变量。 

如果代理程序(snmpd)未运行,在snmpd.conf配置文件中增加一行:
   dlmod modulename /usr/local/temp/modulename.so
     然后重新启动snmpd代理程序, 程序会自动装载共享库。

四:uCLinux系统上SNMP Agent的实现
    考虑到嵌入式设备应用程序自动启动的特点,一般采用静态链接方式开发SNMP Agent。由于uCLinux交叉编译环境的特殊性,在uCLinux系统上实现SNMP Agent需要按以下步骤。

增加新文件及修改Makefile文件: 
  复制modulename.c和modulename.h到agent/mibgroup/目录下。
修改agent/Makefile文件:
  增加"mibgroup/modulename.lo"到LMIBOBJS符号下。
  增加"mibgroup/modulename.o"到MIBOBJS符号下。
修改agent/mibgroup/Makefile文件:
  增加"modulename.o"到OBJS符号下。
  增加"modulename.lo"到LOBJS符号下。
  增加"modulename.c"到SRCS符号下。
修改agent/mibgroup/mib_module_includes.h文件:
  增加 #include "mibgroup/modulename.h"一行。
修改agent/mibgroup/mib_module_inits.h文件:
  增加“if (should_init("modulename")) init_ modulename ();”一行。

重新配置内核
   要生成SNMP Agent程序snmpd,需要重新配置应用程序。
   切换到uClinux-dist目录,开始重新配置应用程序:
cd ../uClinux-dist
make menuconfig
     进行如下选择:
Kernel/Library/Defaults Selection:
(Linux-2.4.x) Kernel Version
[X] Customize Vendor/User Settings (NEW)
按Esc后保存。随后自动进入 uClinux v3.1.0 Configurationm,选中“Network Application---->”并进入下一级选项菜单,在这里可以配置arp、ifconfig、ping、route和snmpd等应用程序,选中ucd-snmpsnmpd一项。
[X] ucd-snmp snmpd
保存后退出,然后在终端提示符下执行命令“make user_only”生成SNMP Agent程序snmpd。

五:创建SNMP Agent配置文件snmpd.conf
     snmpd启动时需要读取snmpd.conf配置文件,通过该配置文件,可以控制SNMP管理端对变量的读写属性,下面是该配置文件的一个示例:

syslocation Shanghai 
syscontact localhost
sysservices 72 
com2sec public default public 
com2sec private default private 
group public v1 public 
group private v1 private 
group public v2c public 
group private v2c private 
group public usm public 
group private usm private 
view all included .1 80 
view system included .1.3.6.1.2.1.1 fe 
access public "" any noauth exact all none all 
access private "" any noauth exact none all all 
trapsink 200.162.162.27

Linux服务器整体性能监控攻略

网管实战:Linux服务器整体性能监控攻略

Linux服务器性能监测是很重要的工作,服务器运行应该提供最有效的系统性能。当服务器系统性能突然低于平均应有的情况,问题可能来自在执行的进程、内存的使用率、磁盘的性能、网络流量和CPU 的压力。在预算短缺的今天,理解如何优化系统性能比以往任何时候都重要。要实现它的前提是,你必须充分了解自己的计算机和网络,从而找到真正的瓶颈所在。本文提供一些基础的工具来辨别和处理一些性能问题。使用的Linux 发行版本是Red Hat Enterprise Linux 4,工作过程是:首先查看整个系统的状态,然后是检查特定的子系统。    Linux服务器进行性能监控有几种方法,每种方法都各有其优缺点。

 使用SNMP等标准工具

    标准及非标准工具能执行一个或多个收集、合并及传输阶段,如rstatd或SNMP工具,然而标准的rstat后台程序提供的信息是有限的,速度慢而且效率低。

 内核模块

    几个系统监控工程利用内核模块来存取监控数据。一般情况下,这是很有效的收集系统数据的方法。然而这种方法存在的问题是,当主内核源内有其它改变时,必须保持代码一致性。一个内核模块可能与用户想使用的其它内核模块相冲突。此外,在使用监控系统之前,用户必须获得或申请模块。

 /proc虚拟文件系统

    /proc虚拟文件系统是一个较快的、高效率执行系统监控的方法。使用/proc的主要缺点是必须保持代码分析与/proc 文件格式改变的同步。事实表明,Linux内核的改变比/proc 文件格式的改变要更频繁,所以,用/proc虚拟文件系统比用内核模块存在的问题要少。本文介绍的方法即基于/proc虚拟文件系统。
一、 /proc文件系统特点
    Linux 系统向管理员提供了非常好的方法,使他们可以在系统运行时更改内核,而不需要重新引导内核系统。这是通过 /proc 虚拟文件系统实现的。/proc 文件虚拟系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。不用重新启动而去看 CMOS ,就可以知道系统信息。这就是 /proc 的妙处之一。/proc 目录里主要文件内容,见表-1:
表-1

   小提示: 每个Linux系统根据软硬件不同/proc 虚拟文件系统的内容也有些差异。/proc 虚拟文件系统有三个很重要的目录:net,scsi和sys。Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。

二、 系统负载监测

    1 使用uptime命令

    使用uptime命令可以查看系统负载,系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数目。如果一个进程满足以下条件则其就会位于运行队列中:没有在等待I/O操作的结果、它没有主动进入等待状态(也就是没有被调用、没有被停止。

    # uptime

    9:51pm up 3 days, 4:43, 4 users, load average:6.02, 5.90, 3.94
    上面命令显示示最近1 分钟内系统的平均负载是6.02,在最近5分钟内系统的平均负载是5.90,在最近的15 分钟内系统的平均负载是3.94。一共四个用户。对于上面的例子来说,由于笔者系统使用是双CPU,那幺其每个CPU的当前任务数为:6.02/2=3.01。另外可以使用cron命令进行定时监测系统负载:
    # crontab -e
    此时打开一个vi编辑器:输入以下内容:
    #30 * * * * * uptime
    存盘退出,这样每隔30分钟就记载其平均负载,这样累计一天,我们就可以得到最近一天的平均负载。

    2 使用cat /proc/loadavg命令

    #cat /proc/loadavg
     0.40 0.79 0.70 2/245 4101
     Cat /proc/loadavg提供以下数据:
    1秒钟平均负载;5秒钟平均负载;15秒钟平均负载;总作业数;正在运行的作业总数。

    3 使用cat /proc/stat命令

    # cat /proc/stat
    cpu  16015 1353 28840 101677 3602 664 4323
    cpu0 16015 1353 28840 101677 3602 664 4323
    intr 1605646 1565008 52 0 4 4 0 6 0 1 8664 296 16675 1418 0 0 13518
    ctxt 617320
    btime 1178342189
     processes 4236
    procs_running 2
    procs_blocked 0
    cat /proc/stat命令是包含内核统计量,提供以下数据:
    CPU 以及CPU0、每行的每个参数意思(以第一行为例)为: 
    user (432661) 从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1 jiffies=0.01秒 
    nice (13295) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies) 
    system (86656) 从系统启动开始累计到当前时刻,核心时间(单位:jiffies) 
    idle (422145968) 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies) 
    iowait (171474) 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) , 
irq (233) 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies) 
    softirq (5346) 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies) 
     CPU时间=user+system+nice+idle+iowait+irq+softirq 
    "intr"这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。 
    "ctxt"给出了自系统启动以来CPU发生的上下文交换的次数。 
    "btime"给出了从系统启动到现在为止的时间,单位为秒。 
     "processes (total_forks) 自系统启动以来所创建的任务的个数目。 
    "procs_running":当前运行队列的任务的数目。 
    "procs_blocked":当前被阻塞的任务的数目。 

    4 使用xload图形显示系统负载

    如果安装了KDE环境,可以使用xload 显示系统平均负载的柱状图 ,它会定期地更新。xload是Linux一个系统命令,使用方法:
 

     应用实例:

    #xload -scale 1 -update 1 -fg red -hl400 
    上面命令表示使用xload查看系统的负载。每秒更新一次,其尺寸大小为400,前景颜色为红色,背景颜色为蓝。见图-1。

图1 用xload图形显示系统负载

三、 通过phpsysinfo 调用浏览器监控
    由于/proc文件系统非常大,而且系统是动态变化的,所以使用Linux命令比较麻烦,这里我们使用一个工具:phpsysinfo,它是一个支持PHP网页服务器用于侦测主机一些资料的PHP 脚本工具软件,可以提取/proc文件系统中的信息,以图形方式显示出来。另外phpsysinfo支持包括中文在内的20多种语言和许多风格的模板。
    1.系统要求:
    除了要搭建一个基于LAMP(Linux+PHP+APACHE+MYSQL)的网络构架,其它系统要求:软件:它要求内核(Kenerl)至少在2.2以上。KDE 2.0,桌面颜色至少16位增强色。硬件:中央处理器:奔腾II 450 以上 ,内存 64 兆 ,硬盘空间 60兆。安装前的准备工作: phpsysinfo 是用PHP语言写成的。 
    2.软件下载
    #wget http://jaist.dl.sourceforge.net/sourc ... nfo/phpsysinfo-2.3.tar.gz 
    3. 软件安装: 将下载的软件拷贝到/var/www/html/目录下,执行:
    #mv phpsysinfo-2.3.tar.gz /var/www/html/sysinfo
    #tar -zxvf phpsysinfo-2.3.tar.gz 
    #cd sysinfo 
    #cp config.php.new config.php
    4.运行软件:
    启动apache服务 
    #/usr/local/apache2/bin/apachectl start 
    测试http://localhost/sysinfo (见图2)


图2 phpsysinfo的中文工作界面

    phpsysinfo检测分成五个部分:
    (1)主机系统资源:主机名称、IP地址、内核版本、已开机时间、登入人数、系统负载。
    (2)硬件信息:CPU型号、工作频率、快取大小、逻辑操作数、PCI接口、IDE接口、SCSI接口。
    (3)网络负载:网络数据包接收、传送、错误/遗失。
    (4)内存资源情况,包括物理内存、虚拟内存等。
    (5)已挂载分区:硬盘分区名称,使用比例。
     你也可以用它来测试你所租用的虚拟主机的设备及网络状况的品质。