飘灵儿 发表于 2015-1-16 13:58:16

来讲讲:Linux体系Perl精简版netstat

linux系统的文件布置,etc/,opt/目录的内容等;
写作企图:
Linux体系自带的netstat在良多时分抓信息会发明耗CPU很高,出格是在做一些监控体系的时分,发明假如利用了netstat,监控体系自己会形成体系负载对照高,因而试着用perl写下,time测试比自带的netstat更快更节俭资本,接待品评,呵呵。
#!/usr/bin/perl
#WrittenbyFinalBSDat2008-11-20.
#ThenetstatoriginalwrittenbyC
#isexpensivetome,sothisborn.
#Aslongasyouretainthisnoticeyou
#candowhateveryouwantwiththisstuff.
#Ifwemeetsomeday,andyouthink
#thisstuffisworthit,youcan
#buymeabeerinreturn.
usestrict;
usewarnings;
useGetopt::Std;
my$tcp="/proc/net/tcp";
my$tcp6="/proc/net/tcp6";
my$route="/proc/net/route";
my@tcpState=(
"NULL",
"ESTABLISHED",
"SYN_SENT",
"SYN_RECV",
"FIN_WAIT1",
"FIN_WAIT2",
"TIME_WAIT",
"CLOSE",
"CLOSE_WAIT",
"LAST_ACK",
"LISTEN",
"CLOSING"
);
my@routeType=(
"NULL",
"U",#UP
"G",#Gateway
"UG"#UP&Gateway
);
my%opts;
getopts(nhatsrl,\%opts);
if($opts{h}){
&usage();
}
if($opts{r}){
&route_info($route);
exit;
}
&tcp_info($tcp);
&tcp_info($tcp6);
######################FUNCTIONDEFINITION###########################
#############################
#GetstatisticsInformation
############################
subtcp_info($){
my$file=shift;
open(FH,$file)ordie("$!");
my$format="%-30s%-30s%-10s
";
printf($format,"LocalAddress","ForeignAddress","State");
while(<FH>){
nextif/local_address/;
my@data=split;
my$state=$tcpState)];
#ShowlisteningSockets.
if($opts{l}){
printf($format,&hextoint($data),&hextoint($data),$state)if$state=~/LIST/;
}else{
printf($format,&hextoint($data),&hextoint($data),$state);
}
}
close(FH);
}
#############################
#Converthextoint
############################
subhextoint($){
my$tmp=shift;
my@data;
my@ip;
my$int;
#ifhave:,thenitsaddr:port,elsejustport.
if($tmp=~/:/){
if($tmp=~/FFFF/){
@data=split/:/,$tmp;
#breakitanddoconvertlater.
@ip=$data=~/w{2}/g;
foreachmy$index(12..15){
$ip[$index]=hex($ip[$index]);
}
$int=sprintf("%-5s%d.%d.%d.%d:%d","tcp6",$ip,$ip,$ip,$ip,hex($data));
}else{
@data=split/:/,$tmp;
@ip=$data=~/w{2}/g;
foreachmy$index(0..3){
$ip[$index]=hex($ip[$index]);
}
$int=sprintf("%-s%d.%d.%d.%d:%d","",$ip,$ip,$ip,$ip,hex($data));
}
}else{
@ip=$tmp=~/w{2}/g;
foreachmy$index(0..3){
$ip[$index]=hex($ip[$index]);
}
$int=sprintf("%d.%d.%d.%d",hex($ip),hex($ip),hex($ip),hex($ip));
}
return$int;
}
#############################
#ShowKernelroutetable
############################
subroute_info($){
my$routefile=shift;
open(ROUTE,$routefile)ordie("Cantopenroutefile!
");
my$header="IfaceDestinationGatewayFlagsGenmask
";
printf("%s",$header);
my$format="%-5s%-15s%-15s%-5s%-15s
";
while(<ROUTE>){
nextif/Iface/;
my@line=split;
my($iface,$dest,$gw,$flags,$mask)=($line,&hextoint($line),&hextoint($line),hex($line),&hextoint($line));
printf($format,$iface,$dest,$gw,$routeType[$flags],$mask);
}
close(ROUTE);
}
#############################
#Showhelpinformation
############################
subusage{
printf("%s

%-30s
%-30s
%-30s
%-30s
%-30s
%-30s
",
"netstatwritteninPerlbyFinalBSD.Copyright(c)2008.",
"-nShownumericipandportaddress.",
"-rDisplaythekernelroutingtable.",
"-aShowbothlisteningandnon-listeningsocktes.",
"-tShowonlyTCPstatistics.",
"-lShowonlylisteningsockets.",
"-hShowhelp.",
);
exit;
}

</p>
不同版本的Linux命令数量不一样,这里笔者把它们中比较重要的和使用频率最多的命令。

精灵巫婆 发表于 2015-1-17 18:15:24

在系统检测不到与Linux兼容的显卡,那么此次安装就可能不支持图形化界面安装,而只能用文本模式安装等等。

爱飞 发表于 2015-1-21 09:08:12

发问的时候一定要注意到某些礼节。因为Linux社区是一个松散的组织、也不承担回复每个帖子的义务。它不是技术支持。

简单生活 发表于 2015-1-30 13:03:58

目前全球有超过一百多个Linux发行版本,在国内也能找到十几个常见版本。如何选择请根据你的需求和能力,RedhatLinux和DebianLinux是网络管理员的理想选择。

柔情似水 发表于 2015-2-6 12:45:47

如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。可能你会遇到这种情况,对于一个问题会出现不同内容回答,这时你需要通过实践来验证。

乐观 发表于 2015-3-5 00:08:51

永中office 2004增强版安装只需要默认安装即可使用并操作大多与win系统雷同,打印机的配置和管理,记录光盘等。

冷月葬花魂 发表于 2015-3-11 21:52:23

Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。

再见西城 发表于 2015-3-19 14:41:14

学习Linux系统在服务中的配置方法及使用方法。Linux在服务器中应用相当广,应对常用的apache,samba,ftp等服务器基本配置清楚了解。[重点,应巩固学习]

老尸 发表于 2015-3-28 19:33:19

Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。
页: [1]
查看完整版本: 来讲讲:Linux体系Perl精简版netstat