10.6 监控io性能
iotop命令是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看。
iotop使用Python语言编写而成,要求Python2.5(及以上版本)和Linux kernel2.6.20(及以上版本)。iotop提供有源代码及rpm包,可从其官方主页下载。
安装
Ubuntu
apt-get install iotop
CentOS
yum install iotop
编译安装
wget http://guichaz.free.fr/iotop/files/iotop-0.4.4.tar.gz
tar zxf iotop-0.4.4.tar.gz
python setup.py build
python setup.py install
语法
iotop(选项)
选项
-o:只显示有io操作的进程
-b:批量显示,无交互,主要用作记录到文件。
-n NUM:显示NUM次,主要用于非交互式模式。
-d SEC:间隔SEC秒显示一次。
-p PID:监控的进程pid。
-u USER:监控的进程用户。
iotop常用快捷键:
- 左右箭头:改变排序方式,默认是按IO排序。
- r:改变排序顺序。
- o:只显示有IO输出的进程。
- p:进程/线程的显示方式的切换。
- a:显示累积使用量。
- q:退出。
实例
直接执行iotop就可以看到效果了:Total DISK read: 0.00 B/s | Total DISK write: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> command 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init [3] 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] 4 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] 5 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0] 6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1] 7 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1] 8 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1] 9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/0] 10 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/1] 11 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khelper] 2572 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [bluetooth]
10.7 free命令
free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
语法
free(选项)
选项
-b:以Byte为单位显示内存使用情况;
-k:以KB为单位显示内存使用情况;
-m:以MB为单位显示内存使用情况;
-o:不显示缓冲区调节列;
-s<间隔秒数>:持续观察内存使用状况;
-t:显示内存总和列;
-V:显示版本信息。
实例free -m total used free shared buffers cached Mem: 2016 1973 42 0 163 1497 -/+ buffers/cache: 312 1703 Swap: 4094 0 4094
第一部分Mem行解释:
total:内存总数;
used:已经使用的内存数;
free:空闲的内存数;
shared:当前已经废弃不用;
buffers Buffer:磁盘中的数据调入到内存给cpu处理,需要缓冲;
cached Page:CPU处理后的数据从内存写入到磁盘,需要缓存
关系:total = used + free
第二部分(-/+ buffers/cache)解释:
(-buffers/cache) used内存数:第一部分Mem行中的 used – buffers – cached
(+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
第三部分是指交换分区。10.8 ps命令
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
ps(选项)
选项
-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
a:显示现行终端机下的所有程序,包括其他用户的程序。
-A:显示所有程序。
-c:显示CLS和PRI栏位。
c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。
-C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。
-d:显示所有程序,但不包括阶段作业领导者的程序。
-e:此选项的效果和指定"A"选项相同。
e:列出程序时,显示每个程序所使用的环境变量。
-f:显示UID,PPIP,C与STIME栏位。
f:用ASCII字符显示树状结构,表达程序间的相互关系。
-g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。
g:显示现行终端机下的所有程序,包括群组领导者的程序。
-G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。
h:不显示标题列。
-H:显示树状结构,表示程序间的相互关系。
-j或j:采用工作控制的格式显示程序状况。
-l或l:采用详细的格式来显示程序状况。
L:列出栏位的相关信息。
-m或m:显示所有的执行绪。
n:以数字来表示USER和WCHAN栏位。
-N:显示所有的程序,除了执行ps指令终端机下的程序之外。
-p<程序识别码>:指定程序识别码,并列出该程序的状况。
p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。
r:只列出现行终端机正在执行中的程序。
-s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。
s:采用程序信号的格式显示程序状况。
S:列出程序时,包括已中断的子程序资料。
-t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。
t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。
-T:显示现行终端机下的所有程序。
-u<用户识别码>:此选项的效果和指定"-U"选项相同。
u:以用户为主的格式来显示程序状况。
-U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。
U<用户名称>:列出属于该用户的程序的状况。
v:采用虚拟内存的格式显示程序状况。
-V或V:显示版本信息。
-w或w:采用宽阔的格式来显示程序状况。
x:显示所有程序,不以终端机来区分。
X:采用旧式的Linux i386登陆格式显示程序状况。
-y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。
-<程序识别码>:此选项的效果和指定"p"选项相同。
--cols<每列字符数>:设置每列的最大字符数。
--columns<每列字符数>:此选项的效果和指定"--cols"选项相同。
--cumulative:此选项的效果和指定"S"选项相同。
--deselect:此选项的效果和指定"-N"选项相同。
--forest:此选项的效果和指定"f"选项相同。
--headers:重复显示标题列。
--help:在线帮助。
--info:显示排错信息。
--lines<显示列数>:设置显示画面的列数。
--no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。
--group<群组名称>:此选项的效果和指定"-G"选项相同。
--Group<群组识别码>:此选项的效果和指定"-G"选项相同。
--pid<程序识别码>:此选项的效果和指定"-p"选项相同。
--rows<显示列数>:此选项的效果和指定"--lines"选项相同。
--sid<阶段作业>:此选项的效果和指定"-s"选项相同。
--tty<终端机编号>:此选项的效果和指定"-t"选项相同。
--user<用户名称>:此选项的效果和指定"-U"选项相同。
--User<用户识别码>:此选项的效果和指定"-U"选项相同。
--version:此选项的效果和指定"-V"选项相同。
--widty<每列字符数>:此选项的效果和指定"-cols"选项相同。
• ps 查看系统进程
• 用法:ps aux、ps -elf
• STAT部分说明
• D 不能中断的进程
• R run状态的进程
• S sleep状态的进程
• T 暂停的进程
• Z 僵尸进程
• < 高优先级进程
• N 低优先级进程
• L 内存中被锁了内存分页
• s 主进程
• l 多线程进程
• + 前台进程
#ps -A 显示进程信息
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 events/0
7 ? 00:00:00 cpuset
8 ? 00:00:00 khelper
9 ? 00:00:00 netns
10 ? 00:00:00 async/mgr
11 ? 00:00:00 pm
12 ? 00:00:00 sync_supers
13 ? 00:00:00 bdi-default
14 ? 00:00:00 kintegrityd/0
15 ? 00:00:02 kblockd/0
16 ? 00:00:00 kacpid
17 ? 00:00:00 kacpi_notify
18 ? 00:00:00 kacpi_hotplug
19 ? 00:00:27 ata/0
……省略部分结果
30749 pts/0 00:00:15 gedit
30886 ? 00:01:10 qtcreator.bin
30894 ? 00:00:00 qtcreator.bin
31160 ? 00:00:00 dhclient
31211 ? 00:00:00 aptd
31302 ? 00:00:00 sshd
31374 pts/2 00:00:00 bash
31396 pts/2 00:00:00 ps
显示指定用户信息
#ps -u root //显示root进程用户信息
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 events/0
7 ? 00:00:00 cpuset
8 ? 00:00:00 khelper
9 ? 00:00:00 netns
10 ? 00:00:00 async/mgr
11 ? 00:00:00 pm
12 ? 00:00:00 sync_supers
13 ? 00:00:00 bdi-default
14 ? 00:00:00 kintegrityd/0
15 ? 00:00:02 kblockd/0
16 ? 00:00:00 kacpid
……省略部分结果
30487 ? 00:00:06 gnome-terminal
30488 ? 00:00:00 gnome-pty-helpe
30489 pts/0 00:00:00 bash
30670 ? 00:00:00 debconf-communi
30749 pts/0 00:00:15 gedit
30886 ? 00:01:10 qtcreator.bin
30894 ? 00:00:00 qtcreator.bin
31160 ? 00:00:00 dhclient
31211 ? 00:00:00 aptd
31302 ? 00:00:00 sshd
31374 pts/2 00:00:00 bash
31397 pts/2 00:00:00 ps
显示所有进程信息,连同命令行
#ps -ef //显示所有命令,连带命令行
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:22 ? 00:00:02 /sbin/init
root 2 0 0 10:22 ? 00:00:00 [kthreadd]
root 3 2 0 10:22 ? 00:00:00 [migration/0]
root 4 2 0 10:22 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 10:22 ? 00:00:00 [watchdog/0]
root 6 2 0 10:22 ? /usr/lib/NetworkManager
……省略部分结果
root 31302 2095 0 17:42 ? 00:00:00 sshd: root@pts/2
root 31374 31302 0 17:42 pts/2 00:00:00 -bash
root 31400 1 0 17:46 ? 00:00:00 /usr/bin/python /usr/sbin/aptd
root 31407 31374 0 17:48 pts/2 00:00:00 ps -ef
10.9 查看网络状态
netstat
用于显示网络状态。
利用netstat指令可让你得知整个Linux系统的网络情况。
语法
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
参数说明:
-a或--all 显示所有连线中的Socket。
-A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。
-c或--continuous 持续列出网络状态。
-C或--cache 显示路由器配置的快取信息。
-e或--extend 显示网络其他相关信息。
-F或--fib 显示FIB。
-g或--groups 显示多重广播功能群组组员名单。
-h或--help 在线帮助。
-i或--interfaces 显示网络界面信息表单。
-l或--listening 显示监控中的服务器的Socket。
-M或--masquerade 显示伪装的网络连线。
-n或--numeric 直接使用IP地址,而不通过域名服务器。
-N或--netlink或--symbolic 显示网络硬件外围设备的符号连接名称。
-o或--timers 显示计时器。
-p或--programs 显示正在使用Socket的程序识别码和程序名称。
-r或--route 显示Routing Table。
-s或--statistice 显示网络工作信息统计表。
-t或--tcp 显示TCP传输协议的连线状况。
-u或--udp 显示UDP传输协议的连线状况。
-v或--verbose 显示指令执行过程。
-V或--version 显示版本信息。
-w或--raw 显示RAW传输协议的连线状况。
-x或--unix 此参数的效果和指定"-A unix"参数相同。
--ip或--inet 此参数的效果和指定"-A inet"参数相同。
实例
显示详细的网络状况
# netstat -a
显示当前户籍UDP连接状况
# netstat -nu
显示UDP端口号的使用情况
# netstat -apu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 *:32768 *:* -
udp 0 0 *:nfs *:* -
udp 0 0 *:641 *:* 3006/rpc.statd
udp 0 0 192.168.0.3:netbios-ns *:* 3537/nmbd
udp 0 0 *:netbios-ns *:* 3537/nmbd
udp 0 0 192.168.0.3:netbios-dgm *:* 3537/nmbd
udp 0 0 *:netbios-dgm *:* 3537/nmbd
udp 0 0 *:tftp *:* 3346/xinetd
udp 0 0 *:999 *:* 3366/rpc.rquotad
udp 0 0 *:sunrpc *:* 2986/portmap
udp 0 0 *:ipp *:* 6938/cupsd
udp 0 0 *:1022 *:* 3392/rpc.mountd
udp 0 0 *:638 *:* 3006/rpc.statd
显示网卡列表
# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 181864 0 0 0 141278 0 0 0 BMRU
lo 16436 0 3362 0 0 0 3362 0 0 0 LRU
显示组播组的关系
# netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 ALL-SYSTEMS.MCAST.NET
eth0 1 ALL-SYSTEMS.MCAST.NET
lo 1 ff02::1
eth0 1 ff02::1:ff0a:b0c
eth0 1 ff02::1
显示网络统计信息
# netstat -s
Ip:
184695 total packets received
0 forwarded
0 incoming packets discarded
184687 incoming packets delivered
143917 requests sent out
32 outgoing packets dropped
30 dropped because of missing route
Icmp:
676 ICMP messages received
5 input ICMP message failed.
ICMP input histogram:
destination unreachable: 44
echo requests: 287
echo replies: 345
304 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 17
echo replies: 287
Tcp:
473 active connections openings
28 passive connection openings
4 failed connection attempts
11 connection resets received
1 connections established
178253 segments received
137936 segments send out
29 segments retransmited
0 bad segments received.
336 resets sent
Udp:
5714 packets received
8 packets to unknown port received.
0 packet receive errors
5419 packets sent
TcpExt:
1 resets received for embryonic SYN_RECV sockets
ArpFilter: 0
12 TCP sockets finished time wait in fast timer
572 delayed acks sent
3 delayed acks further delayed because of locked socket
13766 packets directly queued to recvmsg prequeue.
1101482 packets directly received from backlog
19599861 packets directly received from prequeue
46860 packets header predicted
14541 packets header predicted and directly queued to user
TCPPureAcks: 12259
TCPHPAcks: 9119
TCPRenoRecovery: 0
TCPSackRecovery: 0
TCPSACKReneging: 0
TCPFACKReorder: 0
TCPSACKReorder: 0
TCPRenoReorder: 0
TCPTSReorder: 0
TCPFullUndo: 0
TCPPartialUndo: 0
TCPDSACKUndo: 0
TCPLossUndo: 0
TCPLoss: 0
TCPLostRetransmit: 0
TCPRenoFailures: 0
TCPSackFailures: 0
TCPLossFailures: 0
TCPFastRetrans: 0
TCPForwardRetrans: 0
TCPSlowStartRetrans: 0
TCPTimeouts: 29
TCPRenoRecoveryFail: 0
TCPSackRecoveryFail: 0
TCPSchedulerFailed: 0
TCPRcvCollapsed: 0
TCPDSACKOldSent: 0
TCPDSACKOfoSent: 0
TCPDSACKRecv: 0
TCPDSACKOfoRecv: 0
TCPAbortOnSyn: 0
TCPAbortOnData: 1
TCPAbortOnClose: 0
TCPAbortOnMemory: 0
TCPAbortOnTimeout: 3
TCPAbortOnLinger: 0
TCPAbortFailed: 3
TCPMemoryPressures: 0
显示监听的套接口
# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:32769 *:* LISTEN
tcp 0 0 *:nfs *:* LISTEN
tcp 0 0 *:644 *:* LISTEN
tcp 0 0 *:1002 *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 vm-dev:ipp *:* LISTEN
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 *:601 *:* LISTEN
tcp 0 0 *:microsoft-ds *:* LISTEN
tcp 0 0 *:http *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:https *:* LISTEN
udp 0 0 *:32768 *:*
udp 0 0 *:nfs *:*
udp 0 0 *:641 *:*
udp 0 0 192.168.0.3:netbios-ns *:*
udp 0 0 *:netbios-ns *:*
udp 0 0 192.168.0.3:netbios-dgm *:*
udp 0 0 *:netbios-dgm *:*
udp 0 0 *:tftp *:*
udp 0 0 *:999 *:*
udp 0 0 *:sunrpc *:*
udp 0 0 *:ipp *:*
udp 0 0 *:1022 *:*
udp 0 0 *:638 *:*
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 10621 @/tmp/fam-root-
unix 2 [ ACC ] STREAM LISTENING 7096 /var/run/acpid.socket
unix 2 [ ACC ] STREAM LISTENING 9792 /tmp/.gdm_socket
unix 2 [ ACC ] STREAM LISTENING 9927 /tmp/.X11-unix/X0
unix 2 [ ACC ] STREAM LISTENING 10489 /tmp/ssh-lbUnUf4552/agent.4552
unix 2 [ ACC ] STREAM LISTENING 10558 /tmp/ksocket-root/kdeinit__0
unix 2 [ ACC ] STREAM LISTENING 10560 /tmp/ksocket-root/kdeinit-:0
unix 2 [ ACC ] STREAM LISTENING 10570 /tmp/.ICE-unix/dcop4664-1270815442
unix 2 [ ACC ] STREAM LISTENING 10843 /tmp/.ICE-unix/4735
unix 2 [ ACC ] STREAM LISTENING 10591 /tmp/ksocket-root/klauncherah3arc.slave-socket
unix 2 [ ACC ] STREAM LISTENING 7763 /var/run/iiim/.iiimp-unix/9010
unix 2 [ ACC ] STREAM LISTENING 11047 /tmp/orbit-root/linc-1291-0-1e92c8082411
unix 2 [ ACC ] STREAM LISTENING 11053 /tmp/orbit-root/linc-128e-0-dc070659cbb3
unix 2 [ ACC ] STREAM LISTENING 8020 /var/run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 58927 /tmp/mcop-root/vm-dev-2c28-4beba75f
unix 2 [ ACC ] STREAM LISTENING 7860 /tmp/.font-unix/fs7100
unix 2 [ ACC ] STREAM LISTENING 7658 /dev/gpmctl
unix 2 [ ACC ] STREAM LISTENING 10498 @/tmp/dbus-s2MLJGO5Ci
分享一个小技巧:
netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
[root@aiker02 ~]# netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
LISTEN 10
ESTABLISHED 11
TIME_WAIT 6
ss
ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。
天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。
语法
ss(选项)
选项
-h:显示帮助信息;
-V:显示指令版本信息;
-n:不解析服务名称,以数字方式显示;
-a:显示所有的套接字;
-l:显示处于监听状态的套接字;
-o:显示计时器信息;
-m:显示套接字的内存使用情况;
-p:显示使用套接字的进程信息;
-i:显示内部的TCP信息;
-4:只显示ipv4的套接字;
-6:只显示ipv6的套接字;
-t:只显示tcp套接字;
-u:只显示udp套接字;
-d:只显示DCCP套接字;
-w:仅显示RAW套接字;
-x:仅显示UNIX域套接字。
实例
显示ICP连接
[root@localhost ~]# ss -t -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 0 *:3306 *:*
LISTEN 0 0 *:http *:*
LISTEN 0 0 *:ssh *:*
LISTEN 0 0 127.0.0.1:smtp *:*
ESTAB 0 0 112.124.15.130:42071 42.156.166.25:http
ESTAB 0 0 112.124.15.130:ssh 121.229.196.235:33398
显示 Sockets 摘要
[root@localhost ~]# ss -s
Total: 172 (kernel 189)
TCP: 10 (estab 2, closed 4, orphaned 0, synrecv 0, timewait 0/0), ports 5
Transport Total ip IPv6
* 189 - -
RAW 0 0 0
UDP 5 5 0
TCP 6 6 0
INET 11 11 0
FRAG 0 0 0
列出当前的established, closed, orphaned and waiting TCP sockets
列出所有打开的网络连接端口
root@localhost ~]# ss -l
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 *:3306 *:*
0 0 *:http *:*
0 0 *:ssh *:*
0 0 127.0.0.1:smtp *:*
查看进程使用的socket
[root@localhost ~]# ss -pl
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 *:3306 *:* users:(("mysqld",1718,10))
0 0 *:http *:* users:(("nginx",13312,5),("nginx",13333,5))
0 0 *:ssh *:* users:(("sshd",1379,3))
0 0 127.0.0.1:smtp *:* us
找出打开套接字/端口应用程序
[root@localhost ~]# ss -pl | grep 3306
0 0 *:3306 *:* users:(("mysqld",1718,10))
显示所有UDP Sockets
[root@localhost ~]# ss -u -a
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:syslog *:*
UNCONN 0 0 112.124.15.130:ntp *:*
UNCONN 0 0 10.160.7.81:ntp *:*
UNCONN 0 0 127.0.0.1:ntp *:*
UNCONN 0 0 *:ntp *:*
10.10 linux下抓包
Linux tcpdump命令用于倾倒网络传输数据。
执行tcpdump指令可列出经过指定网络界面的数据包文件头,在Linux操作系统中,你必须是系统管理员
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
参数说明:
-a 尝试将网络和广播地址转换成名称。
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
-e 在每列倾倒资料上显示连接层级的文件头。
-f 用数字显示网际网络地址。
-F<表达文件> 指定内含表达方式的文件。
-i<网络界面> 使用指定的网络截面送出数据包。
-l 使用标准输出列的缓冲区。
-n 不把主机的网络地址转换成名字。
-N 不列出域名。
-O 不将数据包编码最佳化。
-p 不让网络界面进入混杂模式。
-q 快速输出,仅列出少数的传输协议信息。
-r<数据包文件> 从指定的文件读取数据包数据。
-s<数据包大小> 设置每个数据包的大小。
-S 用绝对而非相对数值列出TCP关联数。
-t 在每列倾倒资料上不显示时间戳记。
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-v 详细显示指令执行过程。
-vv 更详细显示指令执行过程。
-x 用十六进制字码列出数据包资料。
-w<数据包文件> 把数据包数据写入指定的文件。
显示TCP包信息
[root@aiker02 ~]# tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:26:23.225041 IP aiker02.ssh > 113.87.160.89.59150: Flags [P.], seq 3156686562:31
56686802, ack 4219132626, win 296, length 240
21:26:23.225375 IP aiker02.59474 > 100.100.2.136.domain: 29645+ PTR? 89.160.87.113.
in-addr.arpa. (44)
21:26:23.235956 IP 113.87.160.89.59150 > aiker02.ssh: Flags [.], ack 240, win 257,
length 0
用法:tcpdump -nn
[root@aiker02 ~]# tcpdump -nn | more ##
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:21:44.256458 IP 172.18.111.154.22 > 113.87.160.89.59150: Flags [P.], seq 3156677
602:3156677842, ack 4219130514, win 296, length 240
21:21:44.267239 IP 113.87.160.89.59150 > 172.18.111.154.22: Flags [.], ack 240, win
253, length 0
21:21:44.428156 IP 172.18.111.154.58734 > 106.11.68.13.80: Flags [P.], seq 21705513
28:2170551946, ack 1131120783, win 65296, length 618
21:21:44.458544 IP 106.11.68.13.80 > 172.18.111.154.58734: Flags [.], ack 618, win
65535, length 0
显示指定数量包
[root@aiker02 ~]# tcpdump -c 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:28:24.763895 IP aiker02.58734 > 106.11.68.13.http: Flags [P.], seq 2170580156:2170581658, ack 1131122559, win 65296, length 1502
21:28:24.764157 IP aiker02.ssh > 113.87.160.89.59150: Flags [P.], seq 3156691858:3156692098, ack 4219133970, win 296, length 240
21:28:24.764500 IP aiker02.50738 > 100.100.2.136.domain: 45228+ PTR? 13.68.11.106.in-addr.arpa. (43)
21:28:24.764908 IP 100.100.2.136.domain > aiker02.50738: 45228 NXDomain 0/1/0 (114)
21:28:24.765720 IP aiker02.50159 > 100.100.2.138.domain: 32905+ PTR? 154.111.18.172.in-addr.arpa. (45)
21:28:24.765891 IP 100.100.2.138.domain > aiker02.50159: 32905 NXDomain* 0/1/0 (99)
21:28:24.766001 IP aiker02.43812 > 100.100.2.136.domain: 33870+ PTR? 89.160.87.113.in-addr.arpa. (44)
21:28:24.766051 IP aiker02.ssh > 113.87.160.89.59150: Flags [P.], seq 240:464, ack 1, win 296, length 224
21:28:24.766145 IP 100.100.2.136.domain > aiker02.43812: 33870 NXDomain 0/1/0 (133)
21:28:24.766308 IP aiker02.51700 > 100.100.2.138.domain: 39631+ PTR? 136.2.100.100.in-addr.arpa. (44)
10 packets captured
14 packets received by filter
0 packets dropped by kernel
精简显示
[root@aiker02 ~]# tcpdump -c 10 -q
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:29:06.198749 IP aiker02.ssh > 113.87.160.89.59150: tcp 240
21:29:06.199045 IP aiker02.47044 > 100.100.2.136.domain: UDP, length 44
21:29:06.199153 IP 100.100.2.136.domain > aiker02.47044: UDP, length 133
21:29:06.199867 IP aiker02.58807 > 100.100.2.138.domain: UDP, length 45
21:29:06.200022 IP 100.100.2.138.domain > aiker02.58807: UDP, length 99
21:29:06.200107 IP aiker02.38179 > 100.100.2.136.domain: UDP, length 44
21:29:06.200153 IP aiker02.ssh > 113.87.160.89.59150: tcp 160
21:29:06.200250 IP 100.100.2.136.domain > aiker02.38179: UDP, length 99
21:29:06.200388 IP aiker02.46348 > 100.100.2.138.domain: UDP, length 44
21:29:06.200420 IP aiker02.ssh > 113.87.160.89.59150: tcp 240
10 packets captured
11 packets received by filter
0 packets dropped by kernel
转换克阅读格式
# tcpdump -d
(000) ret #96
转换成十进制格式
# tcpdump -ddd
1
6 0 0 96
tcpdump -nn -i eth0抓取指定网卡的包
21:31:42.083901 IP 113.87.160.89.59150 > 172.18.111.154.22: Flags [.], ack 285520, win 258, length 0
21:31:42.083915 IP 172.18.111.154.22 > 113.87.160.89.59150: Flags [P.], seq 286160:287104, ack 289, win 296, length 944
21:31:42.085025 IP 72.224.57.91.45940 > 172.18.111.154.22: Flags [P.], seq 1:42, ack 1, win 229, options [nop,nop,TS val 31494495 ecr 1323297742], length 41
21:31:42.085037 IP 172.18.111.154.22 > 72.224.57.91.45940: Flags [R], seq 3953515596, win 0, length 0
tcpdump -nn port 80抓取http包
`[root@aiker02 ~]# tcpdump -nn port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:33:29.456129 IP 172.18.111.154.58734 > 106.11.68.13.80: Flags [P.], seq 2170600702:2170602088, ack 1131122629, win 65296, length 1386
21:33:29.486657 IP 106.11.68.13.80 > 172.18.111.154.58734: Flags [.], ack 1340, win 65535, length 0
21:33:29.486661 IP 106.11.68.13.80 > 172.18.111.154.58734: Flags [.], ack 1386, win 65535, length 0
21:33:48.986686 IP 106.11.68.13.80 > 172.18.111.154.58734: Flags [P.], seq 1:11, ack 1386, win 65535, length 10
21:33:49.026286 IP 172.18.111.154.58734 > 106.11.68.13.80: Flags [.], ack 11, win 65296, length 0
21:33:49.084523 IP 172.18.111.154.58734 > 106.11.68.13.80: Flags [P.], seq 1386:1392, ack 11, win 65296, length 6
21:33:49.114984 IP 106.11.68.13.80 > 172.18.111.154.58734: Flags [.], ack 1392, win 65535, length 0
21:33:59.999613 IP 172.18.111.154.58734 > 106.11.68.13.80: Flags [P.], seq 1392:1866, ack 11, win 65296, length 474
21:34:00.030013 IP 106.11.68.13.80 > 172.18.111.154.58734: Flags [.], ack 1866, win 65535, length 0
21:34:00.030048 IP 172.18.111.154.58734 > 106.11.68.13.80: Flags [P.], seq 1866:2340, ack 11, win 65296, length 474`
tcpdump -nn not port 22 and host 172.16.20.221抓取非ssh,且主机为172.16.20.221的包
21:40:55.280469 IP 172.16.20.221 > 172.18.111.154: ICMP echo request, id 46006, seq 1, length 64<br/>21:40:55.280492 IP 172.18.111.154 > 172.16.20.221: ICMP echo reply, id 46006, seq 1, length 64<br/>21:40:56.282339 IP 172.16.20.221 > 172.18.111.154: ICMP echo request, id 46006, seq 2, length 64<br/>21:40:56.282374 IP 172.18.111.154 > 172.16.20.221: ICMP echo reply, id 46006, seq 2, length 64<br/>21:40:57.284003 IP 172.16.20.221 > 172.18.111.154: ICMP echo request, id 46006, seq 3, length 64
tcpdump -nn -c 100 -w 1.cap抓取100个包保存到本地
[root@aiker02 ~]# tcpdump -nn -c 100 -w 1.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
100 packets captured
100 packets received by filter
0 packets dropped by kernel
[root@aiker02 ~]# file 1.cap ##查看文件类型
1.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 65535)
[root@aiker02 ~]# tcpdump -r 1.cap | more ##查看包,不能直接眼红cat
reading from file 1.cap, link-type EN10MB (Ethernet)
21:46:10.868588 IP aiker02.ssh > 113.87.160.89.59150: Flags [P.], seq 3157001826:3157002002, ack 4219143394, win
307, length 176
21:46:10.879236 IP 113.87.160.89.59150 > aiker02.ssh: Flags [.], ack 176, win 256, length 0
21:46:15.627657 IP reverse.gdsz.cncnet.net.60108 > aiker02.ssh: Flags [P.], seq 2470955638:2470955706, ack 30283
95133, win 342, options [nop,nop,TS val 2985083467 ecr 1324156523], length 68
21:46:15.628119 IP reverse.gdsz.cncnet.net.60108 > aiker02.ssh: Flags [F.], seq 68, ack 1, win 342, options [nop
,nop,TS val 2985083468 ecr 1324156523], length 0
21:46:15.630427 IP aiker02.ssh > reverse.gdsz.cncnet.net.60108: Flags [F.], seq 1, ack 69, win 317, options [nop
,nop,TS val 1324171541 ecr 2985083467], length 0
21:46:15.630546 IP aiker02.ssh > 183.238.237.156.61224: Flags [P.], seq 3176389391:3176389427, ack 694266937, wi
n 303, options [nop,nop,TS val 1324171541 ecr 2465049784], length 36
21:46:15.639297 IP reverse.gdsz.cncnet.net.61844 > aiker02.ssh: Flags [S], seq 2289524520, win 29200, options [m
ss 1460,sackOK,TS val 2985083479 ecr 0,nop,wscale 7], length 0
21:46:15.639333 IP aiker02.ssh > reverse.gdsz.cncnet.net.61844: Flags [S.], seq 4061188495, ack 2289524521, win
28960, options [mss 1460,sackOK,TS val 1324171550 ecr 2985083479,nop,wscale 7], length 0
21:46:15.639380 IP reverse.gdsz.cncnet.net.60108 > aiker02.ssh: Flags [.], ack 2, win 342, options [nop,nop,TS v
al 2985083479 ecr 1324171541], length 0
21:46:15.646671 IP reverse.gdsz.cncnet.net.61844 > aiker02.ssh: Flags [.], ack 1, win 229, options [nop,nop,TS v
al 2985083486 ecr 1324171550], length 0
yum install -y wireshark ##安装wireshark,默认系统不带
tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
[root@lnmp ~]# tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
tshark: -R without -2 is deprecated. For single-pass filtering use -Y.
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth0'
"Apr 26, 2018 21:55:52.189474891 CST" 192.168.1.11 itks.oceanwing.com GET /
"Apr 26, 2018 21:55:55.206433578 CST" 192.168.1.11 itks.oceanwing.com GET /s/aa930d4c36adaba78d934013ca763201-CDN/zh_CN/7401/e170a3915839da2821803843481d4419ff03b453/0df730a42ee8d76c63c1eb518c3c2174/_/download/contextbatch/css/_super/batch.css
"Apr 26, 2018 21:55:55.206750875 CST" 192.168.1.11 itks.oceanwing.com GET /s/318e1b0631e552960ac3b9bcb853eaf8-CDN/zh_CN/7401/e170a3915839da2821803843481d4419ff03b453/59c602be4454e616e744008b87ddc849/_/download/contextbatch/css/atl.confluence.plugins.pagetree-desktop,main,viewcontent,page,atl.general,atl.comments,-_super/batch.css?analytics-enabled=true&anonymous-access-enabled=true&confluence.table.resizable=true&confluence.view.edit.transition=true&healthcheck-resources=true&highlightactions=true&hostenabled=true&is-server-instance=true&isSystemAdministrator=true&nps-acknowledged=true
"Apr 26, 2018 21:55:55.207339852 CST" 192.168.1.11 itks.oceanwing.com GET /s/ace86e1e15546e9ca01f8ffc7760e2b0-CDN/zh_CN/7401/e170a3915839da2821803843481d4419ff03b453/3.0.15/_/download/batch/confluence.extra.livesearch:livesearch-macro-web-resources/confluence.extra.livesearch:livesearch-macro-web-resources.css
"Apr 26, 2018 21:55:55.207486804 CST" 192.168.1.11 itks.oceanwing.com GET /s/7de5f41f5bef3bfca9827328bdbdc7f3-CDN/zh_CN/7401/e170a3915839da2821803843481d4419ff03b453/3.10.0/_/download/batch/confluence.macros.advanced:listlabels-resources/confluence.macros.advanced:listlabels-resources.css
"Apr 26, 2018 21:55:55.234588588 CST" 192.168.1.11 itks.oceanwing.com GET /s/zh_CN/7401/e170a3915839da2821803843481d4419ff03b453/8/_/styles/colors.css
扩展tcp三次握手四次挥手
一、Linux服务器上11种网络连接状态:
图:TCP的状态机
通常情况下:一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手
注:以下说明最好能结合”图:TCP的状态机”来理解。
SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。
ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。
FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。
1)、LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN. / The socket is listening for incoming connections. 侦听来自远方TCP端口的连接请求 /
2)、SYN_SENT:客户端通过应用程序调用connect进行active open.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT. /The socket is actively attempting to establish a connection. 在发送连接请求后等待匹配的连接请求 /
3)、SYN_RECV:服务端应发出ACK确认客户端的SYN,同时自己向客户端发送一个SYN. 之后状态置为SYN_RECV / A connection request has been received from the network. 在收到和发送一个连接请求后等待对连接请求的确认 /
4)、ESTABLISHED: 代表一个打开的连接,双方可以进行或已经在数据交互了。/ The socket has an established connection. 代表一个打开的连接,数据可以传送给用户 /
5)、FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态./ The socket is closed, and the connection is shutting down. 等待远程TCP的连接中断请求,或先前的连接中断请求的确认 /
6)、CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT. / The remote end has shut down, waiting for the socket to close. 等待从本地用户发来的连接中断请求 /
7)、FIN_WAIT2:主动关闭端接到ACK后,就进入了FIN-WAIT-2 ./ Connection is closed, and the socket is waiting for a shutdown from the remote end. 从远程TCP等待连接中断请求 /
8)、LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK . / The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 等待原来发向远程TCP的连接中断请求的确认 /
9)、TIME_WAIT:在主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态。/ The socket is waiting after close to handle packets still in the network.等待足够的时间以确保远程TCP接收到连接中断请求的确认 /
10)、CLOSING: 比较少见./ Both sockets are shut down but we still don’t have all our data sent. 等待远程TCP对连接中断的确认 /
11)、CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束./ The socket is not being used. 没有任何连接状态 /
TIME_WAIT状态的形成只发生在主动关闭连接的一方。
主动关闭方在接收到被动关闭方的FIN请求后,发送成功给对方一个ACK后,将自己的状态由FIN_WAIT2修改为TIME_WAIT,而必须再等2倍 的MSL(Maximum Segment Lifetime,MSL是一个数据报在internetwork中能存在的时间)时间之后双方才能把状态 都改为CLOSED以关闭连接。目前RHEL里保持TIME_WAIT状态的时间为60秒。
当然上述很多TCP状态在系统里都有对应的解释或设置,可见man tcp
二、关于长连接和短连接:
通俗点讲:短连接就是一次TCP请求得到结果后,连接马上结束.而长连接并不马上断开,而一直保持着,直到长连接TIMEOUT(具体程序都有相关参数说明).长连接可以避免不断的进行TCP三次握手和四次挥手.
长连接(keepalive)是需要靠双方不断的发送探测包来维持的,keepalive期间服务端和客户端的TCP连接状态是ESTABLISHED.目前http 1.1版本里默认都是keepalive(1.0版本默认是不keepalive的),ie6/7/8和firefox都默认用的是http 1.1版本了(如何查看当前浏览器用的是哪个版本,这里不再赘述)。Apache,java
一个应用至于到底是该使用短连接还是长连接,应该视具体情况而定。一般的应用应该使用长连接。
1、Linux的相关keepalive参数
a、 tcp_keepalive_time – INTEGER
How often TCP sends out keepalive messages when keepalive is enabled.
Default: 2hours.
b、 tcp_keepalive_probes – INTEGER
How many keepalive probes TCP sends out, until it decides that the
connection is broken. Default value: 9.
c、 tcp_keepalive_intvl – INTEGER
How frequently the probes are send out. Multiplied by
tcp_keepalive_probes it is time to kill not responding connection,
after probes started. Default value: 75sec i.e. connection
will be aborted after ~11 minutes of retries.
2、F5负载均衡上的相关参数说明
a、Keep Alive Interval
Specifies, when enabled, how frequently the system sends data over an idle TCP connection, to determine whether the connection is still valid.
Specify: Specifies the interval at which the system sends data over an idle connection, to determine whether the connection is still valid. The default is 1800 milliseconds.
b、Time Wait
Specifies the length of time that a TCP connection remains in the TIME-WAIT state before entering the CLOSED state.
Specify: Specifies the number of milliseconds that a TCP connection can remain in the TIME-WAIT state. The default is 2000.
c、Idle Timeout
Specifies the length of time that a connection is idle (has no traffic) before the connection is eligible for deletion.
Specify: Specifies a number of seconds that the TCP connection can remain idle before the system deletes it. The default is 300 seconds.
3、Apache的相关参数说明
以下是Apache/2.0.61版本的默认参数和说明
a、KeepAlive:
default On.Whether or not to allow persistent connections (more than
one request per connection). Set to “Off” to deactivate.
b、MaxKeepAliveRequests:
default 100.The maximum number of requests to allow
during a persistent connection. Set to 0 to allow an unlimited amount.
We recommend you leave this number high, for maximum performance.
c、KeepAliveTimeout:
default 15. Number of seconds to wait for the next request from the
same client on the same connection.
tshark几个用法:
- 以下的用法可以显示访问http请求的域名以及uri
tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"[root@lnmp ~]# tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" tshark: -R without -2 is deprecated. For single-pass filtering use -Y. Running as user "root" and group "root". This could be dangerous. Capturing on 'eth0' "Apr 26, 2018 22:02:07.766836435 CST" 192.168.1.1 itks.oceanwing.com GET /rest/quickreload/latest/2818059?since=1524751419942&_=1524751755298 "Apr 26, 2018 22:02:11.103628087 CST" 192.168.1.1 itks.oceanwing.com GET /pages/viewpage.action?pageId=2818201&src=contextnavpagetreemode "Apr 26, 2018 22:02:11.124342006 CST" 172.16.20.247 jira.oceanwing.com GET /rest/remote-link-aggregation/1/aggregation?globalId=appId%3D08f53665-0768-33e9-8e32-2d8bd069921d%26pageId%3D2818201&globalId=appId%3D7c6a47f5-391d-3b1e-903b-f4868e9d8f3d%26pageId%3D2818201 "Apr 26, 2018 22:02:11.124588387 CST" 172.16.22.246 jira.oceanwing.com:80 GET /rest/remote-link-aggregation/1/aggregation?globalId=appId%3D08f53665-0768-33e9-8e32-2d8bd069921d%26pageId%3D2818201&globalId=appId%3D7c6a47f5-391d-3b1e-903b-f4868e9d8f3d%26pageId%3D2818201 "Apr 26, 2018 22:02:11.900276596 CST" 192.168.1.1 itks.oceanwing.com POST /rest/webResources/1.0/resources "Apr 26, 2018 22:02:12.048704592 CST" 192.168.1.1 itks.oceanwing.com GET /plugins/pagetree/naturalchildren.action?decorator=none&excerpt=false&sort=position&reverse=false&disableLinks=false&expandCurrent=true&hasRoot=true&pageId=2818059&treeId=0&startDepth=0&mobile=false&ances
-
以下可以抓取mysql的查询
tshark -n -i eth1 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query"
另外一种方法:
tshark -i eth1 port 3307 -d tcp.port==3307,mysql -z "proto,colinfo,mysql.query,mysql.query" -
以下可以抓取指定类型的MySQL查询
tshark -n -i eth1 -R 'mysql matches "SELECT|INSERT|DELETE|UPDATE"' -T fields -e "ip.src" -e "mysql.query" - 统计http的状态
tshark -n -q -z http,stat, -z http,tree[root@lnmp ~]# tshark -n -q -z http,stat, -z http,tree Running as user "root" and group "root". This could be dangerous. Capturing on 'eth0' ^C413 packets dropped 3328 packets captured
===================================================================
HTTP/Packet Counter value rate percent
Total HTTP Packets 459 0.038620
HTTP Request Packets 108 0.009087 23.53%
GET 80 0.006731 74.07%
POST 28 0.002356 25.93%
HTTP Response Packets 173 0.014556 37.69%
???: broken 0 0.000000 0.00%
1xx: Informational 0 0.000000 0.00%
2xx: Success 163 0.013715 94.22%
200 OK 163 0.013715 100.00%
3xx: Redirection 10 0.000841 5.78%
304 Not Modified 10 0.000841 100.00%
4xx: Client Error 0 0.000000 0.00%
5xx: Server Error 0 0.000000 0.00%
Other HTTP Packets 178 0.014977 38.78%
===================================================================
===================================================================
HTTP Statistics
- HTTP Status Codes in reply packets
HTTP 200 OK
HTTP 304 Not Modified -
List of HTTP Request methods
GET 80
POST 28这个命令,直到你ctrl + c 才会显示出结果
- tshark 增加时间标签
tshark -t ad[root@lnmp ~]# tshark -t ad Running as user "root" and group "root". This could be dangerous. Capturing on 'eth0' 1 2018-04-26 22:05:18.275490126 172.16.20.230 -> 255.255.255.255 UDP 334 Source port: 57926 Destination port: 7989 2 2018-04-26 22:05:18.801628914 172.16.22.246 -> 172.16.58.8 SSH 262 Encrypted response packet len=208 3 2018-04-26 22:05:18.812573457 9c:06:1b:fe:3b:29 -> Broadcast ARP 60 Who has 172.16.20.223? Tell 172.16.23.254
tshark -t a
[root@lnmp ~]# tshark -t a Running as user "root" and group "root". This could be dangerous. Capturing on 'eth0' 1 22:06:32.816149710 9c:06:1b:fe:3b:29 -> Broadcast ARP 60 Who has 172.16.20.231? Tell 172.16.23.254 2 22:06:32.816241400 9c:06:1b:fe:3b:29 -> Broadcast ARP 60 Who has 172.16.20.238? Tell 172.16.23.254 3 22:06:32.816367198 9c:06:1b:fe:3b:29 -> Broadcast ARP 60 Who has 172.16.20.239? Tell 172.16.23.254
参考
https://ask.wireshark.org/questions/16964/analyzing-http-protocol-using-tshark
转载于:https://blog.51cto.com/235571/2108330