Linux系统Perl精简版netstat(perl linux)

admin3年前网络知识124

写作意图:

Linux系统自带的netstat在很多时候抓信息会发现耗CPU很高,特别是在做一些监控系统的时候,发现如果使用了netstat,监控系统本身会造成系统负载比较高,因此试着用perl写下,time测试比自带的netstat更快更节省资源,欢迎批评,呵呵。

#!/usr/bin/perl
# Written by FinalBSD at 2008-11-20.
# The netstat original written by C
# is expensive to me, so this born.
# As long as you retain this notice you
# can do whatever you want with this stuff.
# If we meet some day, and you think
# this stuff is worth it, you can
# buy me a beer in return.
use strict;
use warnings;
use Getopt::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);
###################### FUNCTION DEFINITION ###########################
#############################
# Get statistics Information
############################
sub tcp_info($) {
my $file = shift;
open(FH, $file) or die("$!");
my $format = "%-30s  %-30s %-10s\n";
printf($format,"      Local Address","      Foreign Address","State");
while(<FH>) {
next if /local_address/;
my @data = split;
my $state = $tcpState[hex($data[3])];
# Show listening Sockets.
if($opts{l}){
printf($format, &hextoint($data[1]), &hextoint($data[2]), $state) if $state =~ /LIST/;
} else {
printf($format, &hextoint($data[1]), &hextoint($data[2]), $state);
}
}
close(FH);
}
#############################
# Convert hex to int
############################
sub hextoint($) {
my $tmp     = shift;
my @data;
my @ip;
my $int;
# if have ':', then it's  addr:port,else just port.
if( $tmp =~ /:/ ) {
if( $tmp =~ /FFFF/ ) {
@data = split /:/, $tmp;
# break it and do convert later.
@ip   = $data[0] =~ /\w{2}/g;
foreach my $index (12..15){
$ip[$index] = hex($ip[$index]);
}
$int  = sprintf("%-5s %d.%d.%d.%d:%d", "tcp6",$ip[15], $ip[14], $ip[13], $ip[12], hex($data[1]));
} else {
@data = split /:/, $tmp;
@ip   = $data[0] =~ /\w{2}/g;
foreach my $index (0..3){
$ip[$index] = hex($ip[$index]);
}
$int  = sprintf("%-s %d.%d.%d.%d:%d", "     ",$ip[3], $ip[2], $ip[1], $ip[0], hex($data[1]));
}
} else {
@ip   = $tmp =~ /\w{2}/g;
foreach my $index (0..3){
$ip[$index] = hex($ip[$index]);
}
$int  = sprintf("%d.%d.%d.%d", hex($ip[3]), hex($ip[2]), hex($ip[1]), hex($ip[0]));
}
return $int;
}
#############################
# Show Kernel route table
############################
sub route_info($) {
my $routefile = shift;美国云服务器
open(ROUTE, $routefile) or die ("Can't open route file!\n");
my $header = "Iface  Destination     Gateway      Flags   Genmask\n";
printf("%s", $header);
my $format = "%-5s %-15s %-15s %-5s %-15s\n";
while(<ROUTE>) {
next if /Iface/;
my @line = split;
my ($iface, $dest, $gw, $flags, $mask ) = ($line[0], &hextoint($line[1]), &hextoint($line[2]), hex($line[3]), &hextoint($line[7]));
printf($format, $iface, $dest, $gw, $routeType[$flags], $mask );
}
close(ROUTE);
}
#############################
# Show help information
############################
sub usage {
printf("%s\n\n%-30s\n%-30s\n%-30s\n%-30s\n%-30s\n%-30s\n",
"netstat written in Perl by FinalBSD.Copyright(c) 2008.",
"-n Show numeric ip and port address.",
"-r Display the kernel routing table.",
"-a Show both listening and non-listening socktes.",
"-t Show only TCP statistics.",
"-l Show only listening sockets.",
"-h Show help.",
);
exit;
}

本文从互联网转载,来源地址:www.inhv.cn/shell/17246.html,原作者保留一切权利,若侵权或引用不当,请联系测速网(inhv.cn)删除。【测速网,优质云服务器提供商】

《Linux系统Perl精简版netstat(perl linux)》来自互联网同行内容,若有侵权,请联系我们删除!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

如何删除自己发的抖音

删除自己发布的抖音视频的步骤是:1、首先打开【抖音短视频】APP,然后点击右下角【我】。 2、接着点击【动态】。 3、再选择要删除的视频,点击右下角的图标。 4、最后点击【删除】即可。 抖音(Tik...

xp系统任务栏消失了

xp系统任务栏消失了的解决方法:1、首先在电脑桌面,鼠标移到任务栏上,右键单击,选择“属性”。2、然后把“自动隐藏任务栏”前面的复选框去掉。3、鼠标点住任务栏,拖动到桌面下方,然后右键单击,选择“锁定...

香港服务器哪个快(香港服务器哪家比较好)

文章目录:1、哪里有速度快稳定性好的香港服务器2、香港服务器哪个比较好?3、有没有性能较高的香港服务器,求介绍几个4、香港哪个线路的服务器好?急用5、香港服务器与日本服务器哪个快?6、性能稳定速度快的...

天猫精灵支持四川话吗

天猫精灵暂时不支持四川话唤醒,但是天猫精灵四川话版配音工作已正式启动。天猫精灵将从四川方言开始,逐步进行全国方言的语音优化工作,最终实现全国方言覆盖。在2019年3月20日,天猫精灵的研发部门阿里AI...

AMD预告RX 7000显卡 升级RDNA3架构首次使用小芯片设计

NVIDIA昨晚发布了RTX 4090/4080系列显卡,新卡的性能很好很强大,号称2倍RTX 3090 Ti性能,不过显卡的散热设计也很夸张,接近4插槽的厚度,而且重量不低,厂商非公版的能达到5斤重...

笔记本电脑不插电源开不了机怎么回事

笔记本电脑不插电源开不了机的原因有:1、首先查看是否是因为没有电源的问题,笔记本有内部储存电源,所以即使不插电源也可以使用一段时间,但是使用时间久了,内部电源耗光也会开不了机,所以可以插上电源查看是否...