加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl Netstat脚本

发布时间:2020-12-16 00:02:03 所属栏目:大数据 来源:网络整理
导读:在CU上看到这个脚本,感觉挺好。具体没细的测试。 回头自己可以试着修改,之前就想写个类似的,但是没有时间。 # !/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

在CU上看到这个脚本,感觉挺好。具体没细的测试。

回头自己可以试着修改,之前就想写个类似的,但是没有时间。

#!/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 %-10sn"; 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,$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 Genmaskn"; printf("%s",$header); my $format = "%-5s %-15s %-15s %-5s %-15sn"; 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,$routeType[$flags],$mask ); } close(ROUTE); } ############################# # Show help information ############################
sub usage { printf("%snn%-30sn%-30sn%-30sn%-30sn%-30sn%-30sn","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; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读