2010年5月26日星期三
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.
Step 2.
I already told you what the solution is, but let see a working example. Let say we have an image Gallery, and in the ImageAdapter, what I'd like to do is:
- this.list = list;
- mContext = c;
- for (Device device : list) {
- ImageView tmp = new ImageView(mContext.getApplicationContext());
- tmp.setImageURI(device.getFrontUri());
- tmp.setLayoutParams(new Gallery.LayoutParams( (int)(device.getFrontWidth()), 345));
- tmp.setScaleType(ImageView.ScaleType.FIT_XY);
- tmp.setBackgroundResource(mGalleryItemBackground);
- imageList.add(tmp);
- }
- }
Of course this is just code snippet, but the point is that we didn't use any Bitmaps, just an ImageView, with URI.
2010年5月19日星期三
SSL漏洞是个越来越大的风险
补2009年11月17日 10:09:07
现在,有人可以可以利用这个SSL漏洞攻击Twitter了。请看这个文章:http://www.eweek.com/c/a/Security/Researcher-Demonstrates-SSL-Vulnerability-on-Twitter-291904/
源文档 <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.移动僵尸网络
随着具备互联网功能的设备变得越来越普遍,它们将为网络犯罪分子带来更多的可乘之机。拥有大量被控制计算机的僵尸网络,可以用来进行拒绝服务攻击,发送垃圾邮件以及为声名狼藉的网站提供保护。随着iphone,google 手机的热销,智能手机之类的设备也不是没有可能成为犯罪分子的选择。
7.超高速宽带
随着网络 带宽的不断提升,显然光线入户,超宽带的性能已经之日可带。然而,正如下载速度提高将会给公司带来获得更大业务量的机会,它也将为网络犯罪分子提供同等的机会。
8.DNS全扩展
互联网寻址系统,即域名系统(DNS),已经象安全研究员丹?卡明斯基预计的一样开始出现缺陷了。域名服务器的缓存有可能中毒,这会导致一台 计算机请求查询一个合法网站时,返回一个恶意网站。【批注:就像百度被黑的事件,而工信部也发文要求加强域名服务的安全保障力度】
因此,称为DNSSEC的安全DNS协议就出现了。全球互联网根服务器之一的运营商,威瑞信公司最近宣布将部署DNSSEC。希望控制根服务器的其它机构也响应这一倡议,DNSSEC应该普及到整个互联网上,这样就可以完全消除DNS缓存中毒的漏洞。但这一主宰了互联网的完美发展的重要协议,在将来发生革命性的变化也不是不可能发生。
9.下一代互联网协议IPv6
IPv6是IPv4的继任者。由于IPv4地址即将耗尽,实施IPv6标准是必要的,并且将显着地提高网络的安全性。IPv6可以支持IP层协议安全结构,每个数据包中的数据流都可以验证和加密,所有截获的数据都将被加密。
10.网络战
许多国家正在着手开发网络攻击和防御的技术。而且都已表示,将只会在最需要的情况下进行网络攻击,但我们可以却行,国家网络安全行动中心的人员将有能力入侵其他国家的网络,同样对保护自己国家网络有着重要的责任。【批注:更多关于网络战cyberwarface的文章参见这里。此外,我的博客中有大量相关博文。】
摘自:http://www.enet.com.cn/article/2010/0222/A20100222612502.shtml
源文档 <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实现项目。支持SNMPv1、SNMPv2、SNMPv3,支持基于IPv4和IPv6的SNMP应用程序开发。
UCD-SNMP包括以下内容:
完整的API用于SNMP应用程序开发(包括c和perl的API);
一个可扩展的SNMP代理程序(snmpd);开发者可开发动态模块扩展snmpd,UCD-SNMP内置扩展子代理与主代理的通信协议;
提供众多命令行工具检查和使用SNMP协议;
一个trap接收进程,用于接收和显示trap。并可以将trap记录到日志文件里;一个图形化的MIB浏览工具(tkmib:基于Tk/Perl的);
UCD-SNMP被很多商业化linux包含,绝大部分公司使用UCD-SNMP的主代理实现Linux的SNMP支持。
安装ucd-snmp4.2.7之前需要注意的问题:
- 确认是否安装了libselinux 和 libselinux-devel包
/bin/sed: can’t 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:can’t not find -lselinux
解决:缺少libselinux 和 libselinux-devel包,如:rpm –ivh selinux
- 确认是否安装了gcc编译器和Perl编译器
- 确认是否安装了libtool
安装ucd-snmp之前一定要注意,先配置好linux的运行环境,安装相应的包,凡是在敲入make命令编译的过程中,出现的错误提示,或是用make test命令编译出现的错误提示,均要首先考虑是否安装了软件包的devel版本。
如:libselinux-devel版本,beecrypt-devel版本,elf-devel版本等等。
----------------------------------------------------------------------------------------------------------------
当UCD-SNMP安装完成以后:
- 可扩展代理snmpd位于:/usr/local/ snmp
- C语言开发库位于: /usr/local/ lib
- C语言开发头文件位于:/usr/local/ include
- UCD-SNMP提供的SNMP工具位于: /usr/local/ snmp
- UCD-SNMP依赖的MIB文件位于:/usr/local/ snmp/mibs
- UCD-SNMP依赖的配置文件: /usr/local/ snmp/conf/etc/snmp
UCD-SNMP命令说明:
- snmptranslate
- snmpget
- snmpgetnext
- snmpwalk
- snmptable
- snmpset
FAQ:
1.如何验证snmpd已经启动了?
ps –aef | grep snmpd
2. 是否可以从.1开始采集服务器数据?
snmpwalk -v 1 -c public localhost .1
- 如何使用自己的snmpd.conf文件?(尚未测试)
加入如下参数使snmpd使用指定配置文件启动:
snmpd -C -c /etc/snmp/snmpd.conf
//该方式,我们可以配置很多不同的配置文件,设置不同的运行环境,便于学习和开发。
- 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 编译动态库及引用库 收藏
uCLinux上UCD-SNMP Agent的实现
讨论采用开放源码的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服务器整体性能监控攻略
使用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图形显示系统负载 |
由于/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)已挂载分区:硬盘分区名称,使用比例。
你也可以用它来测试你所租用的虚拟主机的设备及网络状况的品质。