热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux系统Perl精简版netstat

文章标题:Linux系统Perl精简版netstat。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

    写作意图:

    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() {
    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() {
    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;
    }


推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • 有关phpfgetss()函数的文章推荐10篇
    有关phpfgetss()函数的文章推荐10篇:了解如何使用PHP的各种文件函数。查看诸如fopen、fclose和feof之类的基本文件函数;了解诸如fgets、fgetss和f ... [详细]
author-avatar
ZJ1314520俊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有