strace:跟踪进程的系统调用 、ltrace:跟踪进程调用库函数,runlevel & init & service
9.11 strace:跟踪进程的系统调用 、ltrace:跟踪进程调用库函数
strace
strace命令的参数选项及说明
-c 统计每一个系统调用所执行的时间、次数和出错的次数等
-d 输出strace关于标准错误的调试信息
-f 跟踪目标进程,以及目标进程创建的所有子进程
-ff 如果提供-o filename,则将所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号
-i 输出系统调用的入口指针
-q 禁止输出关于脱离的消息
-r 输出每一个系统调用的相对时间
-t 在输出中的每一行前加上时间信息。例如16:45:28
-tt 在输出中的每一行前加上时间信息,精确到微秒。例如11:18:59.759546端
-ttt 在输出中的每一行前加上时间信息,精确到微秒,而且时间表示为UNIX时间戳。例如1486111461.650434
-T 显示每次系统调用所花费的时间
-v 对于某些相关调用,把完整的环境变量、文件stat结构等打印出来
-x 以十六进制形式输出非标准字符率
-xx 所有字符串以十六进制形式输出
-e expr 输出过滤器,通过表达式,可以过滤掉你不想要的输出
expr是一个表达式,用于控制如何跟踪:[qualifier=][!][valuel[,value2]..
说明:
①qualifier 只能是trace、abbrev、verbose、raw、signal、read、write其中之一
②value是用来限定的符号或数字
③默认的qualifier是trace
④感叹号是否定符号
例如:
-e open等价于-e trace=open,表示只跟踪open调用
而-e trace!=open表示跟踪除了open以外的其他调用
常见选项:
-e trace=[set] 只跟踪指定的系统调用
-e trace=file 只跟踪与文件操作有关的系统调用
-e trace=process 只跟踪与进程控制有关的系统调用
-e trace-network 只跟踪与网络有关的系统调用
-e trace=signal 只跟踪与系统信号有关的系统调用
-e trace=desc 只跟踪与文件描述符有关的系统调用
-e trace=ipc 只跟踪与进程通信有关的系统调用
-e abbrev=[set] 设定strace输出的系统调用的结果集
-e raw=[set] 将指定的系统调用的参数以十六进制显示
-e signal=[set] 指定跟踪的系统信号
-e read=[set] 输出从指定文件中读出的数据
-e write=[set] 输出写入到指定文件中的数据
-o filename 将strace的输出写入文件filename
-p pid 指定要跟踪的进程pid,要同时跟踪多个pid,重复多次p选项即可*
-s strsize 指定输出的字符串的最大长度,默认为32。并没有将文件名视为字符串,默认全部输出
-u username 以usemame的UID和GID执行所跟踪的命令
排查Nginx403 forbidden错误
只跟踪与文件操作有关的系统调用
通过pid 跟踪进程
跟踪系统调用统计
[root@bzhl ~]# which nginx
/usr/bin/nginx
[root@bzhl ~]# strace -c /usr/bin/nginx
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
22.33 0.001129 7 153 52 open
15.55 0.000786 6 123 close
10.80 0.000546 6 95 mmap
8.53 0.000431 13 32 write
7.66 0.000387 10 39 read
6.47 0.000327 7 48 mprotect
5.38 0.000272 12 22 munmap
4.35 0.000220 3 87 fstat
3.20 0.000162 32 5 nanosleep
2.87 0.000145 8 19 socket
2.67 0.000135 4 38 pread64
2.29 0.000116 29 4 4 connect
1.19 0.000060 4 15 15 bind
1.03 0.000052 3 16 5 stat
1.03 0.000052 9 6 getdents
0.99 0.000050 3 15 setsockopt
0.65 0.000033 11 3 openat
0.63 0.000032 2 15 ioctl
0.63 0.000032 5 6 6 mkdir
0.47 0.000024 2 12 fcntl
0.16 0.000008 8 1 statfs
0.14 0.000007 7 1 1 readlink
0.10 0.000005 5 1 epoll_create
0.08 0.000004 2 2 rt_sigaction
0.08 0.000004 2 2 uname
0.08 0.000004 2 2 gettimeofday
0.08 0.000004 4 1 futex
0.06 0.000003 3 1 poll
0.06 0.000003 3 1 lseek
0.06 0.000003 2 2 getrlimit
0.06 0.000003 3 1 getppid
0.06 0.000003 3 1 sched_getaffinity
0.04 0.000002 1 2 brk
0.04 0.000002 2 1 rt_sigprocmask
0.04 0.000002 2 1 getuid
0.04 0.000002 2 1 arch_prctl
0.04 0.000002 2 1 set_tid_address
0.04 0.000002 2 1 set_robust_list
0.02 0.000001 1 1 geteuid
0.00 0.000000 0 1 1 access
0.00 0.000000 0 1 execve
------ ----------- ----------- --------- --------- ----------------
100.00 0.005055 779 84 total
上面的结果将清楚地告诉我们调用了哪些系统函数,调用的次数是多少,消耗了多少时间等信息,这对我们分析程序来说是非常有用的。
重定向输出。
对系统调用进行计时
ltrace:跟踪进程调用库函数
ltrace命令的参数选项及说明
-c 统计库函数每次调用的时间,最后程序退出时打印摘要
-C 解码低级别名称(内核级)为用户级名称
-d 打印调试信息
-e expr 输出过滤器,通过表达式,可以过滤掉你不想要的输出
-e printf 表示只查看printf函数调用
-e !printf 表示查看除printf函数以外的所有函数调用
-f 跟踪子进程
-o filename 将ltrace的输出写入文件filename
-p pid 指定要跟踪的进程pid
-r 输出每一个调用的相对时间
-S 显示系统调用
-t 在输出中的每一行前加上时间信息。例如16:45:28
-tt 在输出中的每一行前加上时间信息,精确到微秒。例如11:18:59.759546
-ttt 在输出中的每一行前加上时间信息,精确到微秒,而且时间表示为UNIX时间截。例如1486111461.650434
-T 显示每次调用所花费的时间
-u username 以username的UID和GID执行所跟踪的命令
访问Nginx出现状态码为403 forbidden原因及故障模拟
1) nginx配置文件里不配置默认首页参数或者首页文件在站点目录下没有
index index.php index.html index.htm;
1.
问题模拟示例:
[root@www extra]# cat www.conf
#www virtualhost by oldboy
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
#index index.html index.htm;#<==注释首页文件配置
}
access_log off;
}
[root@www extra]# ../../sbin/nginx -sreload
[root@www extra]# tail -1 /etc/hosts
10.0.0.8 www.etiantian.orgbbs.etiantian.org blog.etiantian.org etiantian.org
[root@www extra]# ll ../../html/www/
总用量 12
drwxr-xr-x 2 root root 4096 4月 15 14:20 blog
-rw-r--r-- 1 root root 4 4月 17 17:11index.html #<==存在首页文件
drwxr-xr-x 2 root root 4096 4月 15 14:19 oldboy
[root@www extra]# curl -I -s 10.0.0.8|head-1
HTTP/1.1 403 Forbidden #<==问题是,Nginx没有指定首页文件的参数,因此访问Nginx时不会把index.html当首页,所以报403错误。
2)站点目录下没有配置文件里指定的首页文件index.php index.html index.htm。
[root@www extra]# cat www.conf
#www virtualhost by oldboy
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
index index.htmlindex.htm; #<==配置首页文件配置
}
access_log off;
}
[root@www extra]# ../../sbin/nginx -sreload
[root@www extra]# rm -f ../../html/www/index.html#<==删除物理首页文件
[root@www extra]# curl -I -s 10.0.0.8|head-1
HTTP/1.1 403 Forbidden
提示:以上1)和2)有一个参数可以解决这个问题就是:
autoindex on;
[root@www extra]# cat www.conf
#www virtualhost by oldboy
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
autoindex on; #<==当找不到首页文件时,会展示目录结构,这个功能一般不要用除非有需求。
}
access_log off;
}
效果如下:
3)站点目录或内部的程序文件没有Nginx用户访问权限。
[root@www extra]# echo test >../../html/www/index.html
[root@www extra]# chmod 700../../html/www/index.html #<==设置700让nginx用户无权读取
[root@www extra]# ls -l ../../html/www/index.html
-rwx------ 1 root root 5 4月 17 17:15../../html/www/index.html
[root@www extra]# curl -I -s 10.0.0.8|head-1
HTTP/1.1 403 Forbidden #<==403错误
[root@www extra]# chmod 755../../html/www/index.html #<==设置755让nginx用户有权读取
[root@www extra]# curl -I -s 10.0.0.8|head-1
HTTP/1.1 200 OK #<==200 OK了
4)Nginx配置文件中设置allow、deny等权限控制,导致客户端没有没权限访问。
[root@www extra]# cat www.conf
#www virtualhost by oldboy
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
index index.html index.htm;
allow 192.168.1.0/24;
deny all;
}
access_log off;
}
[root@www extra]# curl -I -s 10.0.0.8|head-1
HTTP/1.1 200 OK #<==设置755让nginx用户有权读取
[root@www extra]# ../../sbin/nginx -sreload
[root@www extra]# curl -I -s 10.0.0.8|head-1
HTTP/1.1 403 Forbidden
提示:上述403问题并不是nginx才有,apache服务的Forbidden 403问题同样也是这几个问题导致的,只是参数细节略有区别而已,见 http://oldboy.blog.51cto.com/2561410/581383
https://blog.51cto.com/oldboy/1633952
9.13-15 runlevel & init & service
runlevel:输出当前运行级别
init:初始化Linux进程
service:管理系统服务
查看当前服务状态
[root@cs6 ~]# service --status-all
auditd (pid 1270) 正在运行...
crond (pid 1451) 正在运行...
表格:filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all ::/0 ::/0 state RELATED,ESTABLISHED
2 ACCEPT icmpv6 ::/0 ::/0
3 ACCEPT all ::/0 ::/0
4 ACCEPT udp ::/0 fe80::/64 state NEW udp dpt:546
5 ACCEPT tcp ::/0 ::/0 state NEW tcp dpt:22
6 REJECT all ::/0 ::/0 reject-with icmp6-adm-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all ::/0 ::/0 reject-with icmp6-adm-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
iptables:未运行防火墙。
iscsi 已停
iscsid 已停
lvmetad 已停
dmeventd 已停
mdmonitor 已停
multipathd 已停
管理系统服务
[root@cs6 ~]# service crond status
crond (pid 1451) 正在运行...
[root@cs6 ~]# /etc/init.d/crond status
crond (pid 1451) 正在运行...
11.5 vmstat:虚拟内存统计
vmstat
【语法格式】
【选项说明】
[root@lewen ~]# vmstat #<行如果省略“间隔时间”和“次数”的参数,则仅显示一次报告后
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 2792792 2108 790956 0 0 15 20 61 146 0 0 99 0 0
以下是命令结果的详细说明。
第1列:procs。
r列表示运行和等待CPU时间片的进程数。
b列表示正在等待资源的进程数。
第2列:memory。
swpd列表示使用虚拟内存的大小。
free列表示当前空闲的物理内存数量。
buff列表示buffers的内存数量。
cache列表示cache的内存数量。
第3列:swap。
si(swap in)列表示由磁盘调入内存,也就是内存进入内存交换区的数量。
so(swap out)列表示由内存调入磁盘,也就是内存交换区进入内存的数量。
第4列:I/O项显示磁盘读写状况。
bi列表示从块设备读入数据的总量(即读磁盘)(块/s)。
bo列表示写入块设备的数据总量(即写磁盘)(块/s)。
第5列:system显示采集间隔内发生的中断数。
in列表示在某一时间间隔中观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数。
第6列:CPU项显示了CPU的使用状态。
us列显示了用户进程消耗的CPU时间百分比。
sy列显示了系统(内核)进程消耗的CPU时间百分比。
id列显示了CPU处在空闲状态的时间百分比。
wa列显示了I/0等待所占用的CPU时间百分比。
st列显示了虚拟机占用的CPU时间的百分比。
显示活跃和非活跃内存
[root@lewen ~]# vmstat -aS M 2 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
2 0 0 2727 290 657 0 0 15 20 61 146 0 0 99 0 0
0 0 0 2727 290 657 0 0 0 0 53 118 0 0 100 0 0
0 0 0 2727 290 657 0 0 0 0 51 112 1 1 99 0 0
使用-a选项显示活跃和非活跃内存时,所显示的内容除去增加了inact和active之外,其他显示内容与范例11-12相同。
memory列增加了inact和active两列,其说明具体如下。
inact:非活跃的内存大小(当使用-a选项时显示)。
active:活跃的内存大小(当使用-a选项时显示)。
查看内存使用的详细信息
1
2
3
4
5
6
7
8
9
10
11
|
[root@lewen ~] # vmstat -s 4026348 K total memory 440568 K used memory 673792 K active memory 297756 K inactive memory 2792680 K free memory 2108 K buffer memory 790992 K swap cache 这些信息分别来自于 /proc/meminfo 、 /proc/stat 和 /proc/vmstat 。 |
查看磁盘的读/写
[root@lewen ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 8333 8 673201 140450 21689 1376 907042 61431 0 73
sr0 18 0 2056 678 0 0 0 0 0 0
dm-0 6339 0 648333 139872 23055 0 902906 75051 0 73
dm-1 90 0 4920 7 0 0 0 0 0 0
这些信息主要来自于/proc/diskstats。其中的merged表示一次来自于合并的写/读请求,系统一般会把多个连接/邻近的读/写请求合并到一起来操作。
查看/dev/sda1磁盘的读写统计信息
[root@lewen ~]# vmstat -p /dev/sda1
sda1 reads read sectors writes requested writes
1799 12364 10 4136
这些信息主要来自于/proc/diskstats。各列的说明具体如下。
reads:来自于该分区的读的次数。
read sectors:来自于该分区的读扇区的次数。
writes:来自于该分区的写的次数。
requested writes:来自于该分区的写请求次数。
11.6 mpstat:CPU信息统计
显示CPU信息统计。
显示指定CPU信息的统计。
11.7 iostat: I/O信息统计
定时显示所有信息
只显示磁盘统计信息。
11.8 iotop:动态显示磁盘I/O统计信息
s11.9 sar:收集系统信息
功能说明:
通过sar命令,可以全面地获取系统的CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断和网络等性能数据。
语法格式
sar option interval count
sar 选项 时间间隔 次数
说明:
1)在sar命令及后面的选项里,每个元素之间都至少要有一个空格。
2)interval表示两次输出之间的间隔时间。
3)count表示按照interval指定的时间间隔统计的次数。
【选项说明】
查看系统CPU的整体负载状况。
-A 显示系统所有资源设备(CPU、内存、磁盘)的运行状况
-u 显示系统所有CPU在采样时间内的负载状态
-P 显示当前系统中指定CPU的使用情况
-d 显示系统所有硬盘设备在采样时间内的使用状况
-r 显示在采样时间内系统内存的使用状况
-b 显示在采样时间内缓冲区的使用情况
-v 显示索引节点、文件和其他内核表的状态
-n 显示网络运行状态
-q 显示运行队列的大小,它与系统当时的平均负载相同
-R 显示进程在采样时间内的活动情况
-y 显示终端设备在采样时间内的活动情况
-w 显示系统交换活动在采样时间内的状态
-o filename 将命令结果以二进制格式存放在文件中,filename是文件名
使用范例
查看系统CPU的整体负载状况
[root@lewen ~]# sar -u 2 3
Linux 3.10.0-957.el7.x86_64 (lewen) 2019年03月17日 _x86_64_ (1 CPU)
16时09分16秒 CPU %user %nice %system %iowait %steal %idle
16时09分18秒 all 0.00 0.00 0.50 0.00 0.00 99.50
16时09分20秒 all 0.00 0.00 0.00 0.00 0.00 100.00
16时09分22秒 all 0.50 0.00 0.50 0.00 0.00 99.00
平均时间: all 0.17 0.00 0.33 0.00 0.00 99.50
%user:用户进程消耗的CPU时间百分比。
%nice:改变过优先级的进程占用的CPU时间百分比。
%system:系统(内核)进程消耗的CPU时间百分比。
%iowait:IO等待所占用的CPU时间百分比。
%steal:虚拟机强制CPU等待的时间百分比。
%idle:CPU处在空闲状态的时间百分比。
显示运行队列的大小
[root@lewen ~]# sar -q 2 3
Linux 3.10.0-957.el7.x86_64 (lewen) 2019年03月17日 _x86_64_ (1 CPU)
16时25分06秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
16时25分08秒 0 316 0.00 0.01 0.05 0
16时25分10秒 0 316 0.00 0.01 0.05 0
16时25分12秒 0 316 0.00 0.01 0.05 0
平均时间: 0 316 0.00 0.01 0.05 0
runq-sz:运行队列的长度(等待运行的进程数)。
plist-sz:进程列表中进程(process)和线程(thread)的数量。
ldavg-1:最后1分钟的系统平均负载(system load average)。
ldavg-5:过去5分钟的系统平均负载。
ldavg-15:过去15分钟的系统平均负载。
显示系统内存的使用状况
[root@lewen ~]# sar -r 2 3
Linux 3.10.0-957.el7.x86_64 (lewen) 2019年03月17日 _x86_64_ (1 CPU)
16时29分54秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
16时29分56秒 2794180 1232168 30.60 2108 643944 2014348 28.09 672264 297744 8
16时29分58秒 2794180 1232168 30.60 2108 643944 2014348 28.09 672268 297744 8
16时30分00秒 2794180 1232168 30.60 2108 643944 2014348 28.09 672268 297744 8
平均时间: 2794180 1232168 30.60 2108 643944 2014348 28.09 672267 297744 8
以下是命令结果的详细说明。
kbmemfree:空闲物理内存量。
kbmemused:使用中的物理内存量。
%memused:物理内存量的使用率。
kbbuffers:内核中作为缓冲区使用的物理内存容量。
kbcached:内核中作为缓存使用的物理内存容量。
kbcommit:应用程序当前使用的内存大小。
%commit:应用程序当前使用的内存大小占总大小的使用百分比。
显示缓冲区的使用情况
[root@doit ~]# sar -b 2 3
Linux 4.20.0-1.el7.elrepo.x86_64 (doit) 03/17/2019 _x86_64_ (2 CPU)
04:33:47 PM tps rtps wtps bread/s bwrtn/s
04:33:49 PM 0.50 0.00 0.50 0.00 4.00
04:33:51 PM 0.00 0.00 0.00 0.00 0.00
04:33:53 PM 0.00 0.00 0.00 0.00 0.00
Average: 0.17 0.00 0.17 0.00 1.33
tps:每秒钟物理设备的I/O传输总量。
rtps:每秒钟从物理设备读入的数据总量。
wtps:每秒钟向物理设备写入的数据总量。
bread/s:每秒钟从物理设备读入的数据量,单位为块/s。
bwrtn/s:每秒钟向物理设备写人的数据量,单位为块/s。
显示网络的运行状态
[root@doit ~]# sar -n DEV 2 3
Linux 4.20.0-1.el7.elrepo.x86_64 (doit) 03/17/2019 _x86_64_ (2 CPU)
04:35:59 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
04:36:01 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:36:01 PM eth0 48.50 40.50 34.71 33.66 0.00 0.00 0.00
以下是命令结果的详细说明。
IFACE:网络接。
rxpck/s:每秒钟接收的数据包。
txpck/s:每秒钟发送的数据包。
rxkB/s:每秒钟接收的字节数。
txkB/s:每秒钟发送的字节数。
rxcmp/s:每秒钟接收的压缩数据包。
txcmp/s:每秒钟发送的压缩数据包。
rxmcst/s:每秒钟接收的多播数据包。
下面的命令用来
显示网络错误的统计数据
[root@doit ~]# sar -n EDEV 2 3
Linux 4.20.0-1.el7.elrepo.x86_64 (doit) 03/17/2019 _x86_64_ (2 CPU)
04:39:26 PM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
04:39:28 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:39:28 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
以下是命令结果的详细说明。
IFACE:网络接。
rxerr/s:每秒钟接收的坏数据包。
txerr/s:每秒钟发送的坏数据包。
coll/s:每秒的冲突数。
rxdrop/s:因为缓冲充满,每秒钟丢弃的已接收数据包数。
txdrop/s:因为缓冲充满,每秒钟丢弃的已发送数据包数。
txcarr/s:发送数据包时,每秒载波错误数。
rxfram/s:每秒接收数据包的帧对齐错误数。
rxfifo/s:接收的数据包每秒FIFO过速的错误数。
txfifo/s:发送的数据包每秒FIFO过速的错误数。
下面的命令用于显示套接字信息
[root@doit ~]# sar -n SOCK 2 3
Linux 4.20.0-1.el7.elrepo.x86_64 (doit) 03/17/2019 _x86_64_ (2 CPU)
04:42:06 PM totsck tcpsck udpsck rawsck ip-frag tcp-tw
04:42:08 PM 101 5 3 0 0 2
04:42:10 PM 101 5 3 0 0 2
04:42:12 PM 101 5 3 0 0 2
Average: 101 5 3 0 0 2
以下是命令结果的详细说明。
totsck:使用的套接字总数量。
tcpsck:使用的TCP套接字数量。
udpsck:使用的UDP套接字数量。
rawsck:使用的raw套接字数量。
ip-frag:使用的IP段数量。
tcp-tw:处于TIME_WAIT状态的TCP套接字数量。
查看系统磁盘的读写性能
[root@doit ~]# sar -d 2 3
Linux 4.20.0-1.el7.elrepo.x86_64 (doit) 03/17/2019 _x86_64_ (2 CPU)
04:43:34 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
04:43:36 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:43:36 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
04:43:38 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:43:38 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
04:43:40 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
以下是命令结果的详细说明。
DEV:表示磁盘的设备名称。
tps:表示该设备每秒的传输次数,“一次传输”的意思是“一次I/O请求”,多个逻辑请求可能会被合并为“一次I/O请求”,“一次传输”请求的大小是未知的。
rd_sec/s:表示每秒从设备读取的扇区数。
wr_sec/s;表示每秒写入设备的扇区数目。
avgrq-sz:设备平均每次I/O操作的数据大小(扇区)。
avgqu-sz;平均I/0队列长度。
await:设备平均每次1VO操作的等待时间(毫秒)。
svctm:设备平均每次I/O操作的服务时间(毫秒)。
%util:每秒钟用于I/O操作的百分比。
11.11 ntsysv:管理开机服务
10.7 netstat:查看网络状态
netstat命令
用于显示本机网络的连接状态、运行端口和路由表等信息。
netstat命令的参数选项及说明
-r 显示路由表信息,该功能类似于前面学过的route 和ip route
-g 显示多播功能群组成员,该功能类似于前面学过的ip maddr
-i 显示网络接口信息,该功能类似于前面学过的ip -s link
-s 显示各类协议的统计信息
-n 显示数字形式的地址而不是去解析主机、端口或用户名。默认情况下,netstat命令会尝试解析并显示主机的主机名,这个过程通常比较长也是非必需的
-a 显示处于监听状态和非监听状态的socket信息
-A 显示指定网络类型的网络连接状态
-c<秒数> 后面跟的秒数表示每隔几秒就刷新显示一次
-l 仅显示连接状态为“LISTEN”的服务的网络状态
-t 显示所有的TCP连接情况
-u 显示所有的UDP连接情况
-p 显示socket所属进程的PID和名称
常用选项组合(一)
[root@cs6 ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 64 10.0.0.100:22 10.0.0.1:2827 ESTABLISHED
tcp 0 0 10.0.0.100:22 10.0.0.1:6358 ESTABLISHED
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 8 [ ] DGRAM 12335 /dev/log
unix 2 [ ACC ] STREAM LISTENING 12689 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 12697 private/tlsmgr
unix 2 [ ACC ] STREAM LISTENING 12702 private/rewrite
unix 2 [ ACC ] STREAM LISTENING 12706 private/bounce
unix 2 [ ACC ] STREAM LISTENING 12710 private/defer
unix 2 [ ACC ] STREAM LISTENING 12714 private/trace
unix 2 [ ACC ] STREAM LISTENING 12718 private/verify
unix 2 [ ACC ] STREAM LISTENING 12722 public/flush
unix 2 [ ACC ] STREAM LISTENING 12726 private/proxymap
针对该命令的第一行内容进行了说明。
第一行活动网络连接说明
第一列 Proto socket使用的协议(TCP、UDP、RAW)
第二列 Recv-Q 接收到但是还未处理的字节数
第三列 Send-Q 已经发送但是未被远程主机确认收到的字节数
第四列 Local Address 本地主机地址和端口
第五列 Foreign Address 远程主机地址和端口
第六列 State socket的状态,通常仅仅有TCP的状态,状态值可有ESTABLISHED、SYN_SENT、SYN_RECV、FIN_WAIT1、FIN_WAIT2、TIME_WAIT等
第6列 State状态信息详解
ESTABLISHED socket已经建立连接,表示处于连接的状态,一般认为有一个ESTABLISHED 是一个服务的并发连接。
该连接状态在生产场景中很重要,需要重点关注
SYN_SENT socket正在积极尝试建立一个连接,即处于发送后连接前的一个等待但未匹配进入连接的状态
SYN_RECV 已经从网络上收到一个连接请求
FIN_WAIT1 socket已关闭,连接正在或正要关闭
FIN_WAIT2 连接已关闭,并且socket正在等待远端结束
TIME_WAIT socket正在等待关闭处理仍在网络上的教据包,这个连接状态在生产场景中很重要,需要重点关注
CLOSED socket不再被占用了
CLOSE_WAIT 远端已经结束,等待socket关闭
LAST_ACK 远端已经结束,并且socket也已关闭,等待acknowledgement
LISTEN socket正在监听连接请求
CLOSING socket关闭,但是我们仍旧没有发送数据
UNKNOWN socket状态未知
常用选项组合(二)
[root@cs6 ~]# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1358/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1437/master tcp 0 0 :::22 :::* LISTEN 1358/sshd tcp 0 0 ::1:25 :::* LISTEN 1437/master
以上命令语句的作用为显示所有TCP和UDP正在监听的连接信息。
-l:显示所有LISTEN状态的网络连接。
-n:显示IP地址,不进行DNS解析成主机名、域名。
-t:显示所有TCP连接。
-u:显示所有UDP连接。
-p:显示进程号和进程名。
显示当前系统的路由表
[root@cs6 ~]# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.1.0.0 10.0.0.253 255.255.255.0 UG 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 eth0
选项-i显示网络的接口状况。
[root@cs6 ~]# 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 5405 0 0 0 3518 0 0 0 BMRU eth1 1500 0 0 0 0 0 18 0 0 0 BMRU lo 65536 0 0 0 0 0 0 0 0 0 LRU
以下是命令结果解释。
lface:表示网络设备的接口名称。
MTU:表示最大传输单元,单位为字节。
RX-OK/TX-OK:表示已经准确无误地接收/发送了多少数据包。
RX-ERR/TX-ERR:表示接收/发送数据包时产生了多少错误。
RX-DRP/TX-DRP:表示接收/发送数据包时丢弃了多少数据包。
RX-OVR/TX-OVR:表示由于误差而遗失了多少数据包。
Flg:表示接口标记,其中各标记含义具体如下。
L:表示该接口是个回环设备。
B:表示设置了广播地址。
M:表示接收所有数据包。
R:表示接口正在运行。
U:表示接口处于活动状态。
o:表示在该接口上禁用arp。
P:表示一个点到点的连接。
正常情况下,RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值都应该为0,如果这几个选项的值不为0,并且很大,那么网络质量肯定有问题,网络传输性能也一定会下降。
[root@bzhl ~]# netstat -n|awk '/^tcp/ {++lewen[$NF]} END {for (a in lewen) print a ,lewen[a]}'
ESTABLISHED 5
TIME_WAIT 1
10.8 ss:查看网络状态
ss命令
ss命令的参数选项及说明
常用选项组合(一)
[root@cs6 ~]# ss -an
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::22 :::*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 100 127.0.0.1:25 *:*
ESTAB 0 64 10.0.0.100:22 10.0.0.1:1821
[root@cs6 ~]# ss -an|column -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::22 :::*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 100 127.0.0.1:25 *:*
ESTAB 0 64 10.0.0.100:22 10.0.0.1:1821
常用选项组合(二)
[root@cs6 ~]# ss -lntup|column -t #<=显示所有正在监听的TCP和UDP连接。
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 :::22 :::* users:(("sshd",1358,4))
tcp LISTEN 0 128 *:22 *:* users:(("sshd",1358,3))
tcp LISTEN 0 100 ::1:25 :::* users:(("master",1437,13))
tcp LISTEN 0 100 127.0.0.1:25 *:* users:(("master",1437,12))
显示socket统计
[root@bzhl ~]# ss -s
Total: 318 (kernel 663)
TCP: 17 (estab 5, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 663 - -
RAW 0 0 0
UDP 2 1 1
TCP 17 14 3
INET 19 15 4
FRAG 0 0 0
10.10 traceroute:追踪数据传输路由状况
traceroute命令
traceroute命令的参数选项及说明
[root@cs6 ~]# yum install traceroute.x86_64 -y
[root@cs6 ~]# traceroute www.wenyule.top
traceroute to www.wenyule.top (213.232.105.22), 30 hops max, 60 byte packets
# 域名 IP地址 最大30跳(次) 60字节数据包
1 10.0.0.2 (10.0.0.2) 0.445 ms 0.214 ms 0.348 ms
# <==第一个同关 第1次时间 第2次 第3次
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * *^C
命令结果说明具体如下。
加快查询时间
[root@cs6 ~]# traceroute -In www.wenyule.top
traceroute to www.wenyule.top (213.232.105.22), 30 hops max, 60 byte packets
1 10.0.0.2 0.089 ms 0.056 ms 0.034 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * 213.232.105.22 203.477 ms 203.017 ms
10.11 arping:发送arp请求
arping命令
arping 命令的参数选项及说明
测试目的主机是否存活
[root@cs6 ~]# arping -f 10.0.0.1 #<==使用-f选项收到第一个响应时就退出,用于检测目的主机是否存活。
ARPING 10.0.0.1 from 10.0.0.100 eth0 #<==从10.0.0.100的eth0网卡向10,0.0.1发送arp报文。
Unicast reply from 10.0.0.1 [00:50:56:C0:00:08] 0.595ms <==从10.0.0.1单播回复它的MAC地址,并且显示时是
Sent 1 probes (1 broadcast(s)) #<=发送1个广播包
Received 1 response(s)
[root@cs6 ~]# arping -f 10.0.0.11 #<==没有运行的主机不会响应,命令一直等待,直到Ctr1+C终止。
ARPING 10.0.0.11 from 10.0.0.100 eth0
^CSent 5 probes (5 broadcast(s))
Received 0 response(s)
Linux 负载均衡器宕机切换时arp缓存导致故障案例
10.13 nc:多功能网络工具
nc命令
nc命令的参数选项及说明
[root@cs6 ~]# /etc/init.d/iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@cs6 ~]# /etc/init.d/iptables stop
iptables:将链设置为政策 ACCEPT:filter [确定]
iptables:清除防火墙规则: [确定]
iptables:正在卸载模块: [确定]
[root@cs6 ~]# setenforce 0
[root@cs6 ~]# getenforce
Permissive
模拟 TCP 连接并传输文本内容(远程复制文件
[root@cs6 ~]# nc -l 12345 > lewen.nc #<=监听12345端口,将数据写入oldboy.nc
#<=执行完上面的命令后,当前窗口挂起。
#<=新开一个窗口执行命令。
[root@cs6 ~]# cat lewen.nc #<=首先查看12345端口。
[root@cs6 ~]# netstat -lntup|grep 12345
tcp 0 0 0.0.0.0:12345 0.0.0.0:* LISTEN 2612/nc
[root@cs6 ~]# cat lewen.log #<=待用的文件。
6.8.0 #<=文件中的内容
[root@cs6 ~]# nc 10.0.0.100 12345 < lewen.log #<=使用nc命令向10.0.0.100 主机12345 端口传输lewen.log文件
[root@cs6 ~]# netstat -lntup|grep 12345 #<==nc命令传输完数据后自动终止。
[root@cs6 ~]# cat lewen.nc #检查结果
6.8.0
用Shell 模拟一个简单的Web 服务器效果案例
[root@cs6 ~]# echo "I love linux www.wenyule.top" >test.txt
[root@cs6 ~]# vim web.sh
#!/bin/bash
while true
do
nc -l 80 < test.txt # 一直监听80端口,test.txt是发送给用户的内容。
done
[root@cs6 ~]# sh web.sh &>/dev/null &
[1] 2685
[root@cs6 ~]#
[root@cs6 ~]# netstat -lntup|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2686/nc
[root@cs6 ~]# curl 127.0.0.1
I love linux www.wenyule.top
手动与HTTP服务器建立连接的例子。
[root@cs6 ~]# nc blog.oldboyedu.com 80
GET /about-us/ HTTP/1.1 <=粘贴这两行语句,速度要快,如果慢了程序就会超时自动退出。
host:blog.oldboyedu.com <==HTTP/1.1的要求必须写明hosto
#<==敲两次回车确认发送请求报文,下面就是响应报文的内容。
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 07 May 2019 13:40:50 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://blog.oldboyedu.com/about-us/
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
利用nc 进行端口扫描
[root@cs6 ~]# nc -z 10.0.0.100 20-30
Connection to 10.0.0.100 22 port [tcp/ssh] succeeded!
[root@cs6 ~]# nc -z 10.0.0.100 22
Connection to 10.0.0.100 22 port [tcp/ssh] succeeded!
[root@cs6 ~]# nc -zv 10.0.0.100 20-30 #<=使用-v选项详细显示扫描过程
nc: connect to 10.0.0.100 port 20 (tcp) failed: Connection refused
nc: connect to 10.0.0.100 port 21 (tcp) failed: Connection refused
Connection to 10.0.0.100 22 port [tcp/ssh] succeeded!
nc: connect to 10.0.0.100 port 23 (tcp) failed: Connection refused
nc: connect to 10.0.0.100 port 24 (tcp) failed: Connection refused
nc: connect to 10.0.0.100 port 25 (tcp) failed: Connection refused
nc: connect to 10.0.0.100 port 26 (tcp) failed: Connection refused
nc: connect to 10.0.0.100 port 27 (tcp) failed: Connection refused
nc: connect to 10.0.0.100 port 28 (tcp) failed: Connection refused
nc: connect to 10.0.0.100 port 29 (tcp) failed: Connection refused
nc: connect to 10.0.0.100 port 30 (tcp) failed: Connection refused
使用nc命令,模拟QQ聊天工具聊天
10.18 nslookup:域名查询工具
功能说明
语法格式
【选项说明】
使用范例
交互模式
[root@k8s-node1 ~]# nslookup
> www.wenyule.top # 符号“>”是nslookup命令的提示。在此提示符下输入要查询的城名信息进行查询。
Server: 10.0.0.2 # 默认DNS服务器。
Address: 10.0.0.2#53 #上面的DNS服务器的IP地址与端口号。
Non-authoritative answer: # 非授权域名服务器的应答,说明本域名服务器给出的城名解析信息是从其他域名服务器那里查询所得到的信息,而非自己管理的域。
Name: www.wenyule.top
Address: 66.154.120.110 #<显示城名对应的IP地址。
> server 223.5.5.5 #指定解析域名的服务器地址,这个是阿里云的公共DNS服务器
Default server: 223.5.5.5
Address: 223.5.5.5#53
> wenyule.top #输入待解析的域名
Server: 223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
Name: wenyule.top
Address: 66.154.120.110
>
> set type=ANY #查询域名有关的所有信息:
> www.baidu.com
Server: 223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Authoritative answers can be found from:
> set type=MX # 查询邮件MX记录:
> baidu.com
Server: 223.6.6.6
Address: 223.6.6.6#53
Non-authoritative answer:
baidu.com mail exchanger = 10 mx.maillb.baidu.com.
baidu.com mail exchanger = 20 mx50.baidu.com.
baidu.com mail exchanger = 20 jpmx.baidu.com.
baidu.com mail exchanger = 15 mx.n.shifen.com.
baidu.com mail exchanger = 20 mx1.baidu.com.
可以直接在命令行指定解析域名的服务器地址,但是要注意写法,不要少了“-”:
[root@k8s-node1 ~]# nslookup - 223.5.5.5
> baidu.com
Server: 223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
Name: baidu.com
Address: 123.125.114.144
Name: baidu.com
Address: 220.181.57.216
非交互查模式
采用非交互查模式,指定域名服务器地址,查询www.oldboyedu.com对应的域名记录:
[root@k8s-node1 ~]# nslookup baidu.com 223.5.5.5
Server: 223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
Name: baidu.com
Address: 123.125.114.144
Name: baidu.com
Address: 220.181.57.216
10.19 dig:域名查询工具
dig命令
dig命令的参数选项及说明
查询指定域名的IP地址
[root@cs6 ~]# dig www.wenyule.top
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.1 <<>> www.wenyule.top
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52108
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 18
;; QUESTION SECTION:
;www.wenyule.top. IN A
;; ANSWER SECTION:
www.wenyule.top. 5 IN A 213.232.105.22 #<=查询结果。
;; AUTHORITY SECTION:
wenyule.top. 5 IN NS dns18.hichina.com.
wenyule.top. 5 IN NS dns17.hichina.com.
;; ADDITIONAL SECTION:
dns17.hichina.com. 5 IN A 140.205.41.27
dns17.hichina.com. 5 IN A 140.205.81.17
dns17.hichina.com. 5 IN A 140.205.81.27
dns17.hichina.com. 5 IN A 106.11.141.117
dns17.hichina.com. 5 IN A 106.11.141.127
dns17.hichina.com. 5 IN A 106.11.211.57
dns17.hichina.com. 5 IN A 106.11.211.67
dns17.hichina.com. 5 IN A 140.205.41.17
dns18.hichina.com. 5 IN A 106.11.211.68
dns18.hichina.com. 5 IN A 140.205.41.18
dns18.hichina.com. 5 IN A 140.205.41.28
dns18.hichina.com. 5 IN A 140.205.81.18
dns18.hichina.com. 5 IN A 140.205.81.28
dns18.hichina.com. 5 IN A 106.11.141.118
dns18.hichina.com. 5 IN A 106.11.141.128
dns18.hichina.com. 5 IN A 106.11.211.58
dns17.hichina.com. 5 IN AAAA 2400:3200:2000:36::1
dns18.hichina.com. 5 IN AAAA 2400:3200:2000:37::1
;; Query time: 56 msec #<=查询时间。
;; SERVER: 10.0.0.2#53(10.0.0.2) #<=使用默认的DNS服务器。
;; WHEN: Tue May 7 14:35:44 2019
;; MSG SIZE rcvd: 412
反向域名解析例子
[root@cs6 ~]# dig -x 213.232.105.22
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.1 <<>> -x 213.232.105.22
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 45496
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;22.105.232.213.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
213.in-addr.arpa. 5 IN SOA pri.authdns.ripe.net. dns.ripe.net. 1557371861 3600 600 864000 3600
;; Query time: 124 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Tue May 7 14:40:42 2019
;; MSG SIZE rcvd: 105
查询MX类型的域名信息
[root@cs6 ~]# dig -t MX oldboyedu.com #<=使用-t 选项选择查询的类型
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.1 <<>> -t MX oldboyedu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 13697
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;oldboyedu.com. IN MX
;; Query time: 5 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Tue May 7 14:42:57 2019
;; MSG SIZE rcvd: 31
显示完整的DNS解析过程
[root@cs6 ~]# dig @223.5.5.5 www.wenyule.top +trace
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.1 <<>> @223.5.5.5 www.wenyule.top +trace
; (1 server found)
;; global options: +cmd
. 195170 IN NS g.root-servers.net.
. 195170 IN NS j.root-servers.net.
. 195170 IN NS c.root-servers.net.
. 195170 IN NS f.root-servers.net.
. 195170 IN NS m.root-servers.net.
. 195170 IN NS i.root-servers.net.
. 195170 IN NS d.root-servers.net.
. 195170 IN NS e.root-servers.net.
. 195170 IN NS a.root-servers.net.
. 195170 IN NS b.root-servers.net.
. 195170 IN NS h.root-servers.net.
. 195170 IN NS k.root-servers.net.
. 195170 IN NS l.root-servers.net. #<=显示全球13个根服务器a-m
;; Received 228 bytes from 223.5.5.5#53(223.5.5.5) in 127 ms
top. 172800 IN NS a.zdnscloud.com.
top. 172800 IN NS b.zdnscloud.com.
top. 172800 IN NS c.zdnscloud.com.
top. 172800 IN NS d.zdnscloud.com.
top. 172800 IN NS f.zdnscloud.com.
top. 172800 IN NS g.zdnscloud.com.
top. 172800 IN NS i.zdnscloud.com.
top. 172800 IN NS j.zdnscloud.com.
;; Received 326 bytes from 192.5.5.241#53(192.5.5.241) in 104 ms
wenyule.top. 3600 IN NS dns17.hichina.com.
wenyule.top. 3600 IN NS dns18.hichina.com.
;; Received 84 bytes from 203.99.27.1#53(203.99.27.1) in 43 ms
www.wenyule.top. 600 IN A 213.232.105.22
;; Received 49 bytes from 106.11.141.128#53(106.11.141.128) in 59 ms
精简输出例子
[root@cs6 ~]# dig +nocmd +nocomment +nostat www.wenyule.top
;www.wenyule.top. IN A
www.wenyule.top. 5 IN A 213.232.105.22
top. 5 IN NS f.zdnscloud.com.
top. 5 IN NS g.zdnscloud.com.
top. 5 IN NS b.zdnscloud.com.
top. 5 IN NS i.zdnscloud.com.
top. 5 IN NS d.zdnscloud.com.
top. 5 IN NS j.zdnscloud.com.
top. 5 IN NS a.zdnscloud.com.
top. 5 IN NS c.zdnscloud.com.
b.zdnscloud.com. 5 IN A 203.99.25.1
d.zdnscloud.com. 5 IN A 203.99.27.1
f.zdnscloud.com. 5 IN A 114.67.46.12
g.zdnscloud.com. 5 IN A 42.62.2.16
i.zdnscloud.com. 5 IN AAAA 2401:8d00:1::1
j.zdnscloud.com. 5 IN AAAA 2401:8d00:2::1
[root@cs6 ~]# dig +short www.wenyule.top
213.232.105.22
10.20 host:域名查询工具
host命令
是用于查询DNS的工具,它可以将指定主机名称转换为IP地址。
host命令的参数选项及说明
-a 显示详细的DNS信息
-t 指定查询的域名信息类型,可以是“A”、“ALL”、“MX”和“NS”等
DNS查询
[root@cs6 ~]# host www.wenyule.top
www.wenyule.top has address 213.232.105.22
查询详细信息
[root@cs6 ~]# host -a www.wenyule.top
Trying "www.wenyule.top"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53480
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 18
;; QUESTION SECTION:
;www.wenyule.top. IN ANY
;; ANSWER SECTION:
www.wenyule.top. 5 IN A 213.232.105.22
;; AUTHORITY SECTION:
wenyule.top. 5 IN NS dns17.hichina.com.
wenyule.top. 5 IN NS dns18.hichina.com.
;; ADDITIONAL SECTION:
dns17.hichina.com. 5 IN A 140.205.81.17
dns17.hichina.com. 5 IN A 140.205.81.27
dns17.hichina.com. 5 IN A 106.11.141.117
dns17.hichina.com. 5 IN A 106.11.141.127
dns17.hichina.com. 5 IN A 106.11.211.57
dns17.hichina.com. 5 IN A 106.11.211.67
dns17.hichina.com. 5 IN A 140.205.41.17
dns17.hichina.com. 5 IN A 140.205.41.27
dns17.hichina.com. 5 IN AAAA 2400:3200:2000:36::1
dns18.hichina.com. 5 IN A 106.11.211.68
dns18.hichina.com. 5 IN A 140.205.41.18
dns18.hichina.com. 5 IN A 140.205.41.28
dns18.hichina.com. 5 IN A 140.205.81.18
dns18.hichina.com. 5 IN A 140.205.81.28
dns18.hichina.com. 5 IN A 106.11.141.118
dns18.hichina.com. 5 IN A 106.11.141.128
dns18.hichina.com. 5 IN A 106.11.211.58
dns18.hichina.com. 5 IN AAAA 2400:3200:2000:37::1
Received 412 bytes from 10.0.0.2#53 in 31 ms
指定DNS服务器查询
[root@cs6 ~]# host -a www.wenyule.top 8.8.8.8
Trying "www.wenyule.top"
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20333
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 8, ADDITIONAL: 8
;; QUESTION SECTION:
;www.wenyule.top. IN ANY
;; ANSWER SECTION:
www.wenyule.top. 600 IN A 213.232.105.22
;; AUTHORITY SECTION:
top. 48532 IN NS j.zdnscloud.com.
top. 48532 IN NS a.zdnscloud.com.
top. 48532 IN NS d.zdnscloud.com.
top. 48532 IN NS g.zdnscloud.com.
top. 48532 IN NS c.zdnscloud.com.
top. 48532 IN NS f.zdnscloud.com.
top. 48532 IN NS i.zdnscloud.com.
top. 48532 IN NS b.zdnscloud.com.
;; ADDITIONAL SECTION:
a.zdnscloud.com. 703 IN A 203.99.24.1
b.zdnscloud.com. 2433 IN A 203.99.25.1
c.zdnscloud.com. 2366 IN A 203.99.26.1
d.zdnscloud.com. 769 IN A 203.99.27.1
f.zdnscloud.com. 2145 IN A 114.67.46.12
g.zdnscloud.com. 1039 IN A 42.62.2.16
i.zdnscloud.com. 175 IN AAAA 2401:8d00:1::1
j.zdnscloud.com. 1278 IN AAAA 2401:8d00:2::1
Received 342 bytes from 8.8.8.8#53 in 56 ms
按类进行查询
[root@cs6 ~]# host -t MX wenyule.top wenyule.top mail is handled by 5 mxn.mxhichina.com. wenyule.top mail is handled by 10 mxw.mxhichina.com.
10.21 nmap:网络探测工具和安全/端口扫描器
nmap命令
nmap命令的参数选项及说明
查看主机当前开放的端口
[root@cs6 ~]# nmap 10.0.0.100
Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-07 16:49 CST
Nmap scan report for 10.0.0.100
Host is up (0.0000040s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 6.83 seconds
扫描主机的指定端口
[root@cs6 ~]# nmap -p 1024-65535 10.0.0.100
Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-07 17:01 CST
Nmap scan report for 10.0.0.100
Host is up (0.0000040s latency).
All 64512 scanned ports on 10.0.0.100 are closed
Nmap done: 1 IP address (1 host up) scanned in 7.18 seconds
扫描局域网内所有的IP
[root@cs6 ~]# nmap 10.0.0.0/24
Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-07 17:02 CST
Nmap scan report for 10.0.0.1
Host is up (0.00023s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE
3306/tcp open mysql
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 10.0.0.2
Host is up (0.00013s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
53/tcp filtered domain
MAC Address: 00:50:56:F4:FB:52 (VMware)
Nmap scan report for 10.0.0.100
Host is up (0.0000040s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 256 IP addresses (3 hosts up) scanned in 25.94 seconds
[root@cs6 ~]# nmap -sn 10.0.0.0/24 #<==使用-sn选项不扫描端口。
Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-07 17:03 CST
Nmap scan report for 10.0.0.1
Host is up (0.000089s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 10.0.0.2
Host is up (0.00013s latency).
MAC Address: 00:50:56:F4:FB:52 (VMware)
Nmap scan report for 10.0.0.100
Host is up.
Nmap done: 256 IP addresses (3 hosts up) scanned in 21.05 seconds
[root@cs6 ~]# nmap -sn 10.0.0.1-10 #<=可以使用这种地进范围进行扫描。
Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-07 17:04 CST
Nmap scan report for 10.0.0.1
Host is up (0.000034s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 10.0.0.2
Host is up (0.00015s latency).
MAC Address: 00:50:56:F4:FB:52 (VMware)
Nmap done: 10 IP addresses (2 hosts up) scanned in 6.77 seconds
探测目标主机的服务和操作系统的版本
[root@cs6 ~]# nmap -O -sV 10.0.0.100
Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-07 17:05 CST
Nmap scan report for 10.0.0.100
Host is up (0.000090s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.3 (protocol 2.0)
80/tcp open http?
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
SF-Port80-TCP:V=5.51%I=7%D=5/7%Time=5CD14A57%P=x86_64-redhat-linux-gnu%r(N
SF:ULL,1D,"I\x20love\x20linux\x20www\.wenyule\.top\n");
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=5.51%D=5/7%OT=22%CT=1%CU=35109%PV=Y%DS=0%DC=L%G=Y%TM=5CD14A63%P=x
OS:86_64-redhat-linux-gnu)SEQ(SP=106%GCD=1%ISR=109%TI=Z%CI=Z%II=I%TS=A)OPS(
OS:O1=MFFD7ST11NW7%O2=MFFD7ST11NW7%O3=MFFD7NNT11NW7%O4=MFFD7ST11NW7%O5=MFFD
OS:7ST11NW7%O6=MFFD7ST11)WIN(W1=FFCB%W2=FFCB%W3=FFCB%W4=FFCB%W5=FFCB%W6=FFC
OS:B)ECN(R=Y%DF=Y%T=40%W=FFD7%O=MFFD7NNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=
OS:S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q
OS:=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A
OS:%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y
OS:%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T
OS:=40%CD=S)
#<= -O 显示系统版本,但是nmap命令是根据探测的TCP/IP指纹与自己的指纹库进行对比的。如果不在指纹库之内的系统就会无法识别。
Network Distance: 0 hops
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 18.61 seconds
上面的输出信息中不仅包含了端口号,而且还包括了服务的版本号。在网络安全性要求较高的主机上,最好能够屏蔽服务版本号,以防止黑客利用特定版本的服务漏洞进行攻击。
10.22 tcpdump:监听网络流量
【功能说明】
【语法格式】
使用范例
不加参数运行tcpdump命令监听网络。
[root@lewen ~]# tcpdump #默认清况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
...
使用tcpdump命令时,如果不输入过滤规则,则输出的数据量将会很大。
精简输出信息。
[root@lewen ~]# tcpdump -q
04:08:32.963134 IP lewen.ssh > 10.0.0.1.10662: tcp 180
04:08:32.963256 IP lewen.ssh > 10.0.0.1.10662: tcp 116
04:08:32.963325 IP 10.0.0.1.10662 > lewen.ssh: tcp 0
04:08:32.963390 IP lewen.ssh > 10.0.0.1.10662: tcp 180
04:08:32.963492 IP lewen.ssh > 10.0.0.1.10662: tcp 116
04:08:32.964604 IP lewen.ssh > 10.0.0.1.10662: tcp 116
[root@lewen ~]# tcpdump -c 5 #使用-c选项指定监听的数据包数量,这样就不需要使用Ctrl+C了。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
04:09:50.191752 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 3827665832:3827666044, ack 1911166938, win 274, length 212
04:09:50.192434 IP lewen.44182 > public1.alidns.com.domain: 5716+ PTR? 1.0.0.10.in-addr.arpa. (39)
04:09:50.245211 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 212, win 8212, length 0
04:09:50.257155 IP public1.alidns.com.domain > lewen.44182: 5716 NXDomain 0/1/0 (116)
04:09:50.258230 IP lewen.36787 > public1.alidns.com.domain: 45732+ PTR? 81.0.0.10.in-addr.arpa. (40)
5 packets captured
21 packets received by filter
0 packets dropped by kernel
监听指定网卡收到的数据包
[root@lewen ~]# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
04:11:33.924611 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 651624, win 8209, length 0
04:11:33.924679 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 651624:651884, ack 105, win 274, length 260
04:11:33.924776 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 651884:652048, ack 105, win 274, length 164
04:11:33.924834 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 652048, win 8207, length 0
04:11:33.924901 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652048:652308, ack 105, win 274, length 260
04:11:33.929182 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652308:652472, ack 105, win 274, length 164
04:11:33.931108 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 652472, win 8212, length 0
04:11:33.931140 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652472:652636, ack 105, win 274, length 164
04:11:33.931140:当前时间,精确到微秒。
IP lewen.ssh > 10.0.0.1.10662:从主机lewen的SSH端口发送数据到10.0.0.1的10662端口,“>”代表数据流向。
Flags[P.]:TCP包中的标志信息,S是SYN标志的缩写,F(FIN)、P(PUSH)、R(RST)、"."(没有标记)。
seq:数据包中的数据的顺序号。
ack:下次期望的顺序号。
win:接收缓存的窗口大小。
length:数据包长度。
监听指定主机的数据包
[root@lewen ~]# tcpdump -n host 10.0.0.1 #<=使用-n选项不进行DNS解析,加快显示地度。监听指定主机的关键字为host,后面直接接主机名或了IP地址即可。本行命令的作用是监听所有10.0.0.1的主机收到的和发出的数据包。
[root@lewen ~]# tcpdump -n src host 10.0.0.1 #<-只监听从10.0.0.1发出的数据包,即源地址为10.0.0.1,关键字为src(source,原地址)。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:20:55.821984 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 3862927143, win 4106, length 0
20:20:55.866408 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 149, win 4105, length 0
20:20:55.907580 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 297, win 4105, length 0
20:20:55.950705 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 445, win 4104, length 0
20:20:55.991940 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 593, win 4103, length 0
20:20:56.032129 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 741, win 4103, length 0
[root@lewen ~]# tcpdump -n dst host 10.0.0.1 #<==只监听10.0.0.1收到的数据包,即目标地址为10.0.0.1,关就字为dst(destination,目的地)。
20:22:13.074240 IP 10.0.0.7.ssh > 10.0.0.1.14389: Flags [P.], seq 506496:506660, ack 53, win 252, length 164
20:22:13.074331 IP 10.0.0.7.ssh > 10.0.0.1.14389: Flags [P.], seq 506660:506824, ack 53, win 252, length 164
监听指定端口的数据包
[root@lewen ~]# tcpdump -nn port 22 #使用-n选项不进行DNS解析,但是其会将一些协议、端口进行转换,比如22端口转为ssh。因此本例使用nn 选项。监听指定端口的关键字是port,后面接上端口号即可
20:24:26.193100 IP 10.0.0.1.14389 > 10.0.0.7.22: Flags [.], ack 556296, win 4101, length 0
20:24:26.193225 IP 10.0.0.7.22 > 10.0.0.1.14389: Flags [P.], seq 556296:556556, ack 105, win 252, length 260
20:24:26.193535 IP 10.0.0.7.22 > 10.0.0.1.14389: Flags [P.], seq 556556:556720, ack 105, win 252, length 164
监听指定协议的数据包。
[root@lewen ~]# tcpdump -n arp #<--监听ARP数据包,因此表达式直接写arp即可。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:26:43.219758 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46
20:26:43.511133 ARP, Request who-has 10.0.0.95 tell 10.0.0.210, length 46
20:26:44.224050 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46
20:26:44.512986 ARP, Request who-has 10.0.0.95 tell 10.0.0.210, length 46
20:26:45.230012 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46
[root@lewen ~]# tcpdump -n icmp #<-监听icmp数据包(想要查着下面的监拉数据,可以使用其他机器ping本机即可)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:27:31.377258 IP 10.0.0.210 > 10.0.0.2: ICMP 10.0.0.210 udp port 49207 unreachable, length 127
20:27:31.479590 IP 10.0.0.210 > 10.0.0.2: ICMP 10.0.0.210 udp port 48776 unreachable, length 135
常见的协议关键字有ip、arp、icmp、tcp、udp等类型。
多个过滤条件混合使用
前面的几种方法都是使用单个过滤条件过滤数据包,其实过滤条件可以混合使用,因为tcpdump命令支持逻辑运算符and(与)、or(或)、!(非)。
[root@lewen ~]# tcpdump -n ip host 10.0.0.7 and ! 10.0.0.1 #<==获取主机10.0.0.7与所有主机(除了主机10.0.0.1之外)通信的ip数据包。
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:29:42.366445 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [S], seq 1999440710, win 29200, options [mss 1460,sackOK,TS val 75899232 ecr 0,nop,wscale 7], length 0
20:29:42.366483 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51642: Flags [S.], seq 920922656, ack 1999440711, win 28960, options [mss 1460,sackOK,TS val 80531477 ecr 75899232,nop,wscale 7], length 0
20:29:42.366628 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [.], ack 1, win 229, options [nop,nop,TS val 75899232 ecr 80531477], length 0
20:29:42.366674 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [P.], seq 1:15, ack 1, win 229, options [nop,nop,TS val 75899232 ecr 80531477], length 14
20:29:42.366681 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51642: Flags [.], ack 15, win 227, options [nop,nop,TS val 80531477 ecr 75899232], length 0
20:29:42.371129 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [S], seq 2767440940, win 29200, options [mss 1460,sackOK,TS val 75899236 ecr 0,nop,wscale 7], length 0
20:29:42.371153 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51644: Flags [S.], seq 3632462468, ack 2767440941, win 28960, options [mss 1460,sackOK,TS val 80531482 ecr 75899236,nop,wscale 7], length 0
20:29:42.371313 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [.], ack 1, win 229, options [nop,nop,TS val 75899237 ecr 80531482], length 0
20:29:42.371397 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [P.], seq 1:25, ack 1, win 229, options [nop,nop,TS val 75899237 ecr 8
利用tcpdump抓包详解tcp/ip 连接和断开过程的案例。
-
TCP三次握手
-
数据传送
-
TCP四次断开
-
SYN:(同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。
-
ACK:(确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收了所有的数据。
-
FIN:(结束标志,FINish)用来结束一个TCP回话。但对应端口仍然处于开放状态,准备接收后续数据。
[root@doit ~]# tcpdump tcp dst port 80 or src 104.243.30.169 -i eth0 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:35:59.136119 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 2702154317:2702154529, ack 1793279353, win 501, length 212
20:35:59.136535 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 212:408, ack 1, win 501, length 196
20:35:59.137177 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 408:588, ack 1, win 501, length 180
20:35:59.137818 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 588:768, ack 1, win 501, length 180
20:35:59.138447 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 768:948, ack 1, win 501, length 180
20:35:59.139087 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 948:1128, ack 1, win 501, length 180
20:35:59.139729 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1128:1308, ack 1, win 501, length 180
20:35:59.140360 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1308:1488, ack 1, win 501, length 180
20:35:59.140996 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1488:1668, ack 1, win 501, length 180
20:35:59.141636 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1668:1848, ack 1, win 501, length 180
20:35:59.142273 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 1848:2028, ack 1, win 501, length 180
20:35:59.142908 IP 104.243.30.169.26038 > 111.40.18.151.14656: Flags [P.], seq 2028:2208, ack 1, win 501, length 180