• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Linux下使用socktop来检测socket的通讯状况

    所有的socket通讯都是通过socket接口来的,任何family的通讯包括unix域套接都要走的,所以只要截获了socket 读写的几个syscall 就可以了解unix域套接字的发送和接受情况。
     
    systemtap发行版本提供了个工具socktop, 位于 /usr/share/doc/systemtap/examples/network/socktop, 是个非常方便的工具, 干这个事情最合适了。

    安装


    为了部署 SystemTap,需要安装以下两个 RPM 包:

    复制代码
    代码如下:

    systemtap
    systemtap-runtime

    以 root 权限,运行以下命令安装:

    复制代码
    代码如下:

    yum install systemtap systemtap-runtime

    注:在使用 SystemTap 前,需要安装内核信息包,可以运行以下命令安装:

    复制代码
    代码如下:

    stap-prep

    如果安装失败,请手动安装,手动安装步骤请见手动安装内核信息包。

    注:我在我的主机上运行 stap-prep 的报错信息如下

    复制代码
    代码如下:

    [root@test ~]# stap-prep

    Need to install the following packages:
    kernel-devel-2.6.18-308.el5.x86_64
    kernel-debuginfo-2.6.18-308.el5.x86_64
    Traceback (most recent call last):
      File "/usr/bin/yumdownloader", line 19, in module>
        import yum
    ImportError: No module named yum
    problem downloading rpm(s) kernel-devel-2.6.18-308.el5.x86_64 kernel-debuginfo-2.6.18-308.el5.x86_64
    手动安装必需的内核信息包

    需要的内核信息包包含你内核中匹配以下字段 -devel, -debuginfo, 和 -debuginfo-common 的包。如下:

    复制代码
    代码如下:

    kernel-debuginfo
    kernel-debuginfo-common
    kernel-devel

    需要安装和你内核对应版本的包,运行命令

    复制代码
    代码如下:

    uname -r
    2.6.18-308.el5

    可以指定你的内核是 2.6.18-308.el5,因此你需要的包如下:

    复制代码
    代码如下:

    kernel-debuginfo-2.6.18-308.el5.x86_64.rpm
    kernel-devel-2.6.18-308.el5.x86_64.rpm
    kernel-debuginfo-common-2.6.18-308.el5.x86_64.rpm

    重要!!!!注意:这三个包必须与你的内核版本匹配,不能你懂的。
    下载这三个 rpm 包,到 http://rpm.pbone.net 这个网站去下载。或者最简单的在 google 搜索包名。

    下载 kernel-debuginfo-2.6.18-308.el5.x86_64.rpm:

    wget ftp://ftp.pbone.net/mirror/ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/x86_64/Debuginfo/kernel-debuginfo-2.6.18-308.el5.x86_64.rpm
    下载 kernel-devel-2.6.18-308.el5.x86_64.rpm:

    wget ftp://ftp.pbone.net/mirror/ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/x86_64/Debuginfo/kernel-devel-2.6.18-308.el5.x86_64.rpm
    下载 kernel-debuginfo-common-2.6.18-308.el5.x86_64.rpm:

    wget ftp://ftp.pbone.net/mirror/ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/x86_64/Debuginfo/kernel-debuginfo-common-2.6.18-308.el5.x86_64.rpm
    分别安装这三个包:

    复制代码
    代码如下:

    rpm -ivh kernel-debuginfo-common-2.6.18-308.el5.x86_64.rpm
    rpm -ivh kernel-debuginfo-2.6.18-308.el5.x86_64.rpm
    rmp -ivh kernel-devel-2.6.18-308.el5.x86_64.rpm

    初始化测试

    为了测试 stap 是否安装正确,需要运行以下命令测试:

    复制代码
    代码如下:

    stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'

    socket读写查看器socktop

    socktop源码里面的版权和简单的功能介绍:

    使用帮助

    复制代码
    代码如下:

    $ /usr/share/doc/systemtap/examples/network/socktop -h

    USAGE: socktop [-d] [-i interval] [-N num] [-P protocol]... [-f family]...

     [-t stype]... [-n pname]... [-p pid]... [-u username]... [-h]

      -d           # print network device traffic (default: off)

     -i interval  # interval in seconds between printing (default: 5)

     -N num       # number of top processes and devices to print (default: 10)

     -f family    # this protocol family only (default: all)

    -P protocol  # this protocol only (default: all)

    -t stype     # this socket type only (default: all)

    -n pname     # this process name only (default: all)

    -p pid       # this process ID only (default: all)

    -u username  # this user only (default: all)

    -c count     # number of iteration

    -m mod_name  # generate instrumentation (but do not run)

     -h           # print this help text

    Protocol Families:

        LOCAL, INET, INET6, IPX, NETLINK, X25, AX25, ATMPVC, APPLETALK, PACKET

    Protocols:

        TCP, UDP, SCTP, IP, FC, ... (see /etc/protocols for complete list)

    Socket Types:

        STREAM, DGRAM, RAW, RDM, SEQPACKET, DCCP, PACKET

     
    上面的使用写的很明白了,我们要过滤的是unix套接字, 每5秒报告下情况, 还顺手把网络设备的流量打出来。
     
    复制代码
    代码如下:

    $sudo /usr/share/doc/systemtap/examples/network/socktop -f LOCAL -i 5 -d


    ======================= Thu Mar 31 21:23:03 2011 ========================

    ------------------------------- PROCESSES -------------------------------

    PID   UID     #SEND   #RECV SEND_KB RECV_KB PROT FAMILY   COMMAND      


    24821 50453       1       0       0       0 IP   LOCAL    crond        

    3840  0           0       2       0       0 IP   LOCAL    syslog-ng    


    -------------------------------- DEVICES --------------------------------

    DEV             #XMIT         #RECV         XMIT_KB         RECV_KB

    eth0              457           250             102              38

    bond0             457             0             102               0

    lo                 24            24               2               2

    eth1                0            10               0               0

    =========================================================================

     
    我们很清楚的看到了,crond在发,syslog-ng在收。
     
    如果你想知道报文的内容的话,可以改改脚本把报文也dump出来。
     
    玩得开心!
    上一篇:六款常见的Linux操作系统推荐
    下一篇:Linux系统的dd命令使用教程
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Linux下使用socktop来检测socket的通讯状况 Linux,下,使用,socktop,来,检测,