首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>网络管理>网络安全>正文

Linux系统Perl精简版netstat

http://www.oklinux.cn  2008-11-22  CSDN    会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

写作意图:

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;
}


上一篇:Linux下C连接MySQL出现错误解决一例   下一篇:Linux服务器的架设 (DHCP,NIS,SAMBA,FTP,DNS)

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·7个极具危险性的Linux命令
·Linux Kernel VDSO本地权限提升漏洞
·Linux系统用户安全设置
·Linux命令之网络安全基础知识
·Linux服务器安全之网络服务器配置基础知识
·Linux系统管理员网络安全经验之说
·Linux用户高枕无忧 Windows今日谨防焦点间谍病毒
·中国“芯”:信息安全守护神
·CentOS 4.4及Linux下最常用最有效的安全设置
·Linux禁止单用户模式(single)来增强系统安全
·利用Linux打造安全的管理型网关
·Linux NFS服务固定端口与防火墙配置
·Linux下取消Root命令历史记录
·警惕“黑屏”背后三重门 重要单位尽可能使用红旗Linux
·Adobe发布八漏洞补丁 称暂无攻击报告
·安全技巧 利用Linux系统IP伪装防黑
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·7个极具危险性的Linux命令
·Linux Kernel VDSO本地权限提升漏洞
·Linux系统用户安全设置
·Linux命令之网络安全基础知识
·Linux服务器安全之网络服务器配置基础
·Linux系统管理员网络安全经验之说
·Linux用户高枕无忧 Windows今日谨防焦
·中国“芯”:信息安全守护神
·CentOS 4.4及Linux下最常用最有效的安
·Linux禁止单用户模式(single)来增强系
·利用Linux打造安全的管理型网关
·Linux NFS服务固定端口与防火墙配置
  阅读排行
·为Linux服务器部署高效防毒软件
·Ubuntu里安装配置防火墙
·Ubuntu中UFW防火墙的安装及使用
·Ubuntu下轻松安装小红伞杀毒软件
·通过Linux工具来全面保障无线网络安全
·从Linux内核的漏洞角度考虑系统安全
·Linux安全之网上惊现傻瓜型病毒制作工
·linux安全:Linux ACL 体验
·玩转Ubuntu Linux之加密文件系统篇
·用Apache Proxy的指令改进LAMP安全性
·使用SSL 保护VNC应用程序
·操作系统安全防护技巧介绍之Linux篇
·SUSE Linux 默认的iptables防火墙配置
·MPPE加密VPN服务器详解
·通过Linux系统伪装方法加固系统安全
网摘收藏: