歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> Linux下使用socktop來檢測socket的通訊狀況

Linux下使用socktop來檢測socket的通訊狀況

日期:2017/3/1 17:35:57   编辑:Linux技術

所有的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出來。

玩得開心!
Copyright © Linux教程網 All Rights Reserved