本篇内容主要讲解“Linux下怎么使用socktop来检测socket的通讯状况”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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 
    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 包,到 /tupian/20230522/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
eth2                0            10               0               0
=========================================================================
 
我们很清楚的看到了,crond在发,syslog-ng在收。
 
如果你想知道报文的内容的话,可以改改脚本把报文也dump出来。
到此,相信大家对“Linux下怎么使用socktop来检测socket的通讯状况”有了更深的了解,不妨来实际操作一番吧!这里是创新互联建站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
网页标题:Linux下怎么使用socktop来检测socket的通讯状况-创新互联
分享URL:http://www.scyingshan.cn/article/dehgso.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 