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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |