strace:跟蹤進程的系統調用 、ltrace:跟蹤進程調用庫函數,runlevel & init & service


9.11 strace:跟蹤進程的系統調用 、ltrace:跟蹤進程調用庫函數

 strace

  是Linux環境下的一款程序調試工具,用於檢查一個應用程序所使用的系統調用以及它所接收的系統信息。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錯誤

strace -tt -f /applicatton/nginx/sbin/nginx
 
 
 

只跟蹤與文件操作有關的系統調用

 strace -tt -f -e trace=file /application/nginx/sbin/nginx    #只跟綜與文件操作有關的系統調用。
 
 

通過pid 跟蹤進程

 
[root@bzhl ~]# pgrep nginx
1884
7785
7786
7787
 
[root@bzhl ~]# pstree -p 1884
nginx(1884)─┬─nginx(7785)
            ├─nginx(7786)
            └─nginx(7787)
 
[root@bzhl ~]# strace -tt -f -e trace=file -p 7785
strace: Process 7785 attached 

跟蹤系統調用統計

 strace不僅能夠追蹤系統調用,使用選項-c還能對進程所有的系統調用做一個統計分析。 
[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

     上面的結果將清楚地告訴我們調用了哪些系統函數,調用的次數是多少,消耗了多少時間等信息,這對我們分析程序來說是非常有用的。 

 

重定向輸出。

 strace -c -o tongji.log /application/nginx/sbin/nginx  #用 -o 選項將strace的結果輸出到文件中 

對系統調用進行計時

 strace -T /application/nginx/sbin/ngirnx    #<=使用選項-T將每個系統調用所花費的時間打印出來,每個調用的時間花費在調用行最右邊的尖括導里面。 
 
小結:strace命令很適合處埋程序僵屍、命令執行報錯等問題,如果從程序日志和系統日志中看不出問題出現的原因,則可以strace一下,也許會有答案,不過也需要使用者有足夠的耐心去查看輸出! 
 

ltrace:跟蹤進程調用庫函數

ltrace 能夠跟蹤進程的庫函數調用,它會顯現出調用了哪個庫函數,而 strace則是跟蹤進程的每個系統調用。 

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執行所跟蹤的命令

  

Itrace使用
ltrace的用法與strace非常相似,選項功能也是類似
[root@bzhl ~]# ltrace /usr/bin/nginx
 
通過pid 跟蹤進程調用庫函數。
 
[root@bzhl ~]# pgrep nginx
1884
7785
7786
7787
 
[root@bzhl ~]# ltrace -p 1884 
 
 
 Nginx 403 forbidden多種原因及故障模擬重現

訪問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:輸出當前運行級別

runlevel命令用於輸出當前Linux系統的運行級別。
-quiet 不輸出結果,用於通過返回值判斷的場合
[root@cs6 ~]# runlevel
N 3
 
具體如下。
0:停機
1:單用戶模式
2:無網絡的多用戶模式
3:多用戶模式
4:未使用
5:圖形界面多用戶模式
6:重啟
 
 

init:初始化Linux進程

     init命令是Linux下的進程初始化工具,init進程是所有Linux進程的父進程,它的進程號為1。init命令的主要任務是依據配置文件“/etc/inittab”創建Linux進程。
 
切換運行級別。
[root@cs6 ~]# init 0    #<=關機
[root@cs6 ~]# init 6    #<=重啟 
 

service:管理系統服務

         service命令用於對系統服務進行管理,比如啟動(start)、停止(stop)、重啟(restart)、重新加載配置(reload)、查看狀態(status)等,該命令在CentOS7里被systemctl取代。
   -status-all    顯示所有服務狀態
 

查看當前服務狀態

[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

vmstat是Virtual Memory Statistics(虛擬內存統計)的縮寫,利用vmstat命令可以對操作系統的內存信息、進程狀態和CPU活動等進行監視。但是只能對系統的整體情況進行統計,無法對某個進程進行深入分析。

【語法格式】

vmstat foption [delay fcountl]
vmstat  [選項]   [時間間隔(次數]
 
1)在vmstat命令及后面的選項里,每個元素之間都至少要有一個空格。
2)delay表示兩次輸出之間的間隔時間。
3)count表示按照delay指定的時間間隔統計的次數。

【選項說明】

-a    顯示活躍和非活躍內存
-f    顯示從系統啟動至今的fork進程數量
-m    顯示slab信息
-n    只在開始時顯示一次各字段名稱
-s    顯示內存相關統計信息及多種系統活動數量深
-d    顯示磁盤相關統計信息
-p    顯示指定磁盤分區統計信息
-S    使用指定單位顯示。參數有k、K、m、M,分別代表1000、1024、1000000、1048576字節(byte)。默認單位為K(1024byte)
-t     統計信息帶上時間戳
 
 
[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信息統計

 
    mpstat 是Multiprocessor Statistics的縮寫,是一種實時系統監控工具。mpstat命令會輸出CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CPU的系統里,此命令不但能用來查看所有CPU的平均狀況信息,而且還能夠用來查看特定CPU的信息。
    mpstat命令的最大特點是:可以查看多核心CPU中每個計算核心的統計數據,而類似命令vmstat只能查看系統整體的CPU情況。
 
 
mpstat [option] [delay [count]]
 
mpstat命令的參數選項及說明
 
-P      指定CPU編號,例如:
        -P 0表示第一個CPU
        -P 1表示第二個CPU
        -P ALL表示所有CPU
 

顯示CPU信息統計。

[root@cs6 ~]# mpstat 
Linux 2.6.32-754.el6.x86_64 (cs6) 2019年05月05日 _x86_64_ (2 CPU)
 
16時38分37秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
16時38分37秒 all 0.17 0.00 0.18 0.03 0.00 0.00 0.00 0.00 99.62
 
[root@cs6 ~]# mpstat 5 6
Linux 2.6.32-754.el6.x86_64 (cs6) 2019年05月05日 _x86_64_ (2 CPU)
 
16時39分02秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
16時39分07秒 all 0.00 0.00 0.10 0.00 0.00 0.00 0.00 0.00 99.90
16時39分12秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
16時39分17秒 all 0.00 0.00 0.10 0.00 0.00 0.00 0.00 0.00 99.90
16時39分22秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
16時39分27秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
16時39分32秒 all 0.00 0.00 0.10 0.00 0.00 0.00 0.00 0.00 99.90
平均時間: all 0.00 0.00 0.05 0.00 0.00 0.00 0.00 0.00 99.95
 
以下是命令結果的詳細說明。
第1列:16時39分02秒,表示當前時間。
第2列:CPU,all表示所有CPU,0表示第一個CPU……
后面9列的含義分別如下。
%usr:用戶進程消耗的CPU時間百分比。
%nice:改變過優先級的進程占用的CPU時間百分比。
%sys:系統(內核)進程消耗的CPU時間百分比。
%iowait:I0等待所占用的CPU時間百分比。
%irq:硬中斷占用的CPU時間百分比。
%soft:軟中斷占用的CPU時間百分比。
%steal:虛擬機強制CPU等待的時間百分比。
%guest:虛擬機占用CPU時間的百分比。
%idle:CPU處在空閑狀態的時間百分比。
 

顯示指定CPU信息的統計。

 
[root@cs6 ~]# mpstat -P 0
Linux 2.6.32-754.el6.x86_64 (cs6) 2019年05月05日 _x86_64_ (2 CPU)
 
16時40分51秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
16時40分51秒 0 0.10 0.00 0.14 0.04 0.00 0.00 0.00 0.00 99.72

11.7 iostat: I/O信息統計

 
iostat是I/O statistics(輸入/輸出統計)的縮寫,其主要功能是對系統的磁盤I/O操作進行監視。它的輸出主要是顯示磁盤讀寫操作的統計信息,同時也會給出CPU的使用情況。同vmstat命令一樣,iostat命令也不能對某個進程進行深入分析,僅會對系統的整體情況進行分析。
 
iostat [option] [interval [count]]
1)在iostat命令及后面的選項里,每個元素之間都至少要有一個空格。
2)interval 表示兩次輸出之間的間隔時間。
3)count表示按照delay指定的時間間隔統計的次數。
 
 
iostat命令的參數選項及說明
-c    顯示CPU的使用情況
-d    顯示磁盤的使用情況
-k    每秒以kB為單位顯示數據
-m    每秒以MB為單位顯示數據
-n    顯示NFS的使用情況
-t    顯示每次統計的執行時間
-p    device指定要統計的磁盤設備名稱,默認為所有的磁盤設備
-x    顯示擴展統計
 
 
[root@cs6 ~]# iostat
Linux 2.6.32-754.el6.x86_64 (cs6) 2019年05月06日 _x86_64_ (2 CPU)
 
avg-cpu: %user %nice %system %iowait %steal %idle
           0.26 0.00 0.28 0.04 0.00 99.42
 
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 1.81 58.79 37.24 181198 114780
dm-0 6.02 55.86 37.23 172178 114752
dm-1 0.10 0.78 0.00 2400 0
 
 
以下是命令結果說明。
第1~2行中各列的含義具體如下。
%user:用戶進程消耗的CPU時間百分比。
%nice:改變過優先級的進程占用的CPU時間百分比。
%system:系統(內核)進程消耗的CPU時間百分比。
%iowait:I0等待所占用的CPU時間百分比。
%steal:虛擬機強制CPU等待的時間百分比。
%idle:CPU處在空閑狀態的時間百分比。
第3~4行中各列的含義如下。
tps:表示該設備每秒的傳輸次數,“一次傳輸”的意思是“一次I/O請求”,多個邏輯請求可能會被合並為“一次I/O請求”,“一次傳輸”請求的大小是未知的。
Blk_read/s:表示每秒讀取的數據塊數。
Blk_wrtn/s:表示每秒寫人的數據塊數。
Blkread:表示讀取的所有塊數。
Blk_wrtn:表示寫入的所有塊數。
 

定時顯示所有信息

[root@cs6 ~]# iostat 2 3
Linux 2.6.32-754.el6.x86_64 (cs6) 2019年05月05日 _x86_64_ (2 CPU)
 
avg-cpu: %user %nice %system %iowait %steal %idle
           0.24 0.00 0.26 0.04 0.00 99.47
 
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 1.70 51.07 36.11 182710 129196
dm-0 5.70 48.55 36.10 173690 129168
dm-1 0.08 0.67 0.00 2400 0
 
avg-cpu: %user %nice %system %iowait %steal %idle
           0.00 0.00 0.00 0.00 0.00 100.00
 
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 0 0
dm-0 0.00 0.00 0.00 0 0
dm-1 0.00 0.00 0.00 0 0
 
avg-cpu: %user %nice %system %iowait %steal %idle
           0.00 0.00 0.00 0.00 0.00 100.00
 
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.00 0.00 0.00 0 0
dm-0 0.00 0.00 0.00 0 0
dm-1 0.00 0.00 0.00 0 0
 

只顯示磁盤統計信息。

[root@cs6 ~]# iostat -d
Linux 2.6.32-754.el6.x86_64 (cs6) 2019年05月05日 _x86_64_ (2 CPU)
 
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 1.69 50.88 35.98 182710 129196
dm-0 5.68 48.36 35.97 173690 129168
dm-1 0.08 0.67 0.00 2400 0
 
 
 
[root@cs6 ~]# iostat -d -k
Linux 2.6.32-754.el6.x86_64 (cs6) 2019年05月05日 _x86_64_ (2 CPU)
 
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.63 24.51 17.33 91355 64598
dm-0 5.47 23.30 17.33 86845 64584
dm-1 0.08 0.32 0.00 1200 0
 
[root@cs6 ~]# iostat -d -m
Linux 2.6.32-754.el6.x86_64 (cs6) 2019年05月05日 _x86_64_ (2 CPU)
 
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 1.63 0.02 0.02 89 63
dm-0 5.45 0.02 0.02 84 63
dm-1 0.08 0.00 0.00 1 0
 
 
查看擴展信息
[root@cs6 ~]# iostat -d -x -k
Linux 2.6.32-754.el6.x86_64 (cs6) 2019年05月05日 _x86_64_ (2 CPU)
 
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.28 2.99 0.89 0.39 19.03 13.52 50.97 0.00 1.38 1.23 1.73 0.73 0.09
dm-0 0.00 0.00 0.89 3.38 18.09 13.52 14.82 0.01 2.51 1.89 2.67 0.21 0.09
dm-1 0.00 0.00 0.06 0.00 0.25 0.00 8.00 0.00 0.09 0.09 0.00 0.09 0.00
 
以下是命令結果說明。
rrqm/s:每秒進行merge的讀操作數目。
wrqm/s:每秒進行merge的寫操作數目。
r/s:每秒完成的讀I/O設備次數。
w/s:每秒完成的寫I/O設備次數。
rkB/s:每秒讀入的千字節數。
wkB/s:每秒寫人的千字節數。
avgrq-sz:設備平均每次進行I/O操作的數據大小(扇區)。
avgqu-sz;平均I/O隊列長度。
await:設備平均每次I/O操作的等待時間(毫秒)。
svctm:設備平均每次1/0操作的服務時間(毫秒)。
%util:每秒鍾用於I/O操作的百分比。
 
 
只查看CPU的統計信息
[root@cs6 ~]# iostat -c
Linux 2.6.32-754.el6.x86_64 (cs6) 2019年05月05日 _x86_64_ (2 CPU)
 
avg-cpu: %user %nice %system %iowait %steal %idle
           0.17 0.00 0.19 0.03 0.00 99.60

11.8 iotop:動態顯示磁盤I/O統計信息

 
iotop命令是一款實時監控磁盤I/O的工具,但必須以root用戶的身份運行。使用iotop命令可以很方便地查看每個進程使用磁盤I/O的情況。
最小化安裝系統一般是沒有這個命令的,需要使用yum命令額外安裝,安裝命令如下;yum -y install iotop
 
 
iotop命令的參數選項及說明
 
-o    顯示正在使用I/O的進程或者線程,默認是顯示所有
-d    設置顯示的間隔秒數
-p    只顯示指定PID的信息
-u    顯示指定用戶的信息
-P(大寫)    只顯示進程,一般是顯示所有的線程
-a    顯示從iotop啟動后每個線程完成了的I/O總數
-k    設置顯示單位為KB
-t    在每一行前添加一個當前的時間
 
 
 
[root@cs6 ~]# 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
    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 % [stopper/0]
    6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0]
 
 
 
以下是命令結果的具體說明。
Total DISK READ:總的磁盤讀取速度。
Total DISK WRITE:總的磁盤寫入速度。
TID:進程pid值。
PRIO:優先級。
USER:用戶。
DISKREAD:磁盤讀取速度。
DISK WRITE:磁盤寫入速度。
SWAPIN:從swap分區讀取數據占用的百分比。
IO:I/O占用的百分比。
COMMAND:消耗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:管理開機服務

 
ntsysv命令提供了一種基於文本界面的菜單操作方式,以設置不同運行級別下的系統服務啟動狀態。
 
-back    在交互界面里,顯示Back按鈕,而非Cancel按鈕
-level    指定運行級別,默認是當前級別
[root@linuxprobe ~]# 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命令

  是類似並將取代netstat的工具,它能用來查看網絡狀態信息,包括TCP、UDP連接、端口等。它的優點是能夠顯示更多更詳細的有關網絡連接狀態的信息,而且比netstat更快速更高效。
    如果系統沒有ss命令,那就需要安裝一下,ss命令屬於iproute包,因此安裝命令是yum -y install iproute。
 
 
ss [選項] [過濾器]
 
 

ss命令的參數選項及說明

 
-n    顯示IP地址,不進行DNS解析
-s    顯示socket使用統計
-r    嘗試解析數字IP地址和端口
-a    顯示所有socket連接
-l    顯示所有監聽 socket
-o    顯示計時器信息
-e    顯示詳細的socket信息
-m    顯示socket的內存使用情況
-p    顯示使用socket的進程
-i    顯示TCP內部信息
 
-4    僅顯示IPv4的socket
-6    僅顯示IPv6的socket
-0    僅顯示PACKET的socket
-t    僅顯示TCP的socket
-u    僅顯示UCP的socket
-d    僅顯示DCCP的socket
-w    僅顯示RAW的socket
-x    僅顯示Unix的socket
 
 

常用選項組合(一)

[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 

  

當服務器產生大量的socket連接時,通常會使用該命令來做宏觀數據統計;ss的大部分參數應用和netstat很像,可以參考netstat相關參數的用法。

10.10 traceroute:追蹤數據傳輸路由狀況

traceroute命令

  用於顯示網絡數據包傳輸到指定主機的路徑信息,追蹤數據傳輸路由狀況。默認數據包大小是60字節(IPv4)或80字節(IPv6),用戶可另行設置。它與Windows下的tracert命令類似。
 
traceroute [option] [host]      [packet len]
traceroute [選項]   [主機名或IP]  [數據包大小] 

traceroute命令的參數選項及說明

-q <nqueries>    設置每一跳的探測包數量。默認是3
-I               使用ICMP ECHO探測,即ping
-n               直接使用IP地址而不使用主機名
-m               設置最大的跳教,默認為30
 
[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

命令結果說明具體如下。

    記錄按序列號從1開始,每個記錄就是一跳,每跳表示一個網關,我們看到每行有3個時間,單位是ms,其實就是-q的默認參數值為3。探測數據包向每個網關發送3個數據包之后,網關響應並返回的時間。
    有時我們traceroute一台主機時,會看到有一些星號。出現這樣的情況,可能是因為網絡設備封掉或丟棄了返回的信息,所以我們得不到返回的時間。
    有時在某一網關的延時比較長,這有可能是某台網關比較阻塞,也可能是物理設備本身的原因。當然如果某台DNS出現了問題,不能解析主機名、域名時,也會有延時比較長的現象,這時可以加-n參數來避免DNS解析,以IP格式輸出數據。
    在局域網的不同網段之間,我們可以通過traceroute來排查問題所在,確定是主機的問題還是網關的問題。如果通過遠程來訪問某台服務器遇到問題時,用traceroute來追蹤數據包所經過的網關,並提交給IDC服務商,這樣也有助於解決問題。
 

加快查詢時間

traceroute默認是使用UDP協議(受網絡影響性能不太好),因此使用-1參數來調用icmp協議(ping命令使用的協議),若同時還使用-n參數,則不解析主機名:
[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命令

  是用於發送arp請求到一個相鄰主機的工具,arping使用arp數據包檢查局域網內所有設備的硬件地址。 

arping 命令的參數選項及說明

-c <次數>        發送指定次數的arp報文后退出命令
-f              當收到第一個應答報文時,立即退出命令。此選項用於判斷目標主機是否存在或者正常運行
-I 網絡接口      指定網絡接口發送arp報文
-w <截止時間>    設置命令的執行裁止時間
-s source       設定arping發送的arp數據包中的源地址 
 

測試目的主機是否存活

[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緩存導致故障案例

 
    當Linux負載均衡器發生宕機故障,我們使用備用的設備接管時,因為所有用戶以及客戶端的arp緩存里對應的仍然是宕機時的負載均衡器的IP,因此,切換完新負載均衡器之后,短時間內用戶訪問可能依然不正常,此時就需要執行arping命令,讓所有的客戶端緩存失效,這也是高可用軟件的做法:
 
[root@cs6 ~]# arping -c 1 -I eth0 -s 10.0.0.5 10.0.0.2  #<==這里的10.0.0.5是VIP地址,10.0.0.2是上網網關。
 

10.13 nc:多功能網絡工具

nc命令

  是一個簡單、可靠、強大的網絡工具,它可以建立TCP連接,發送UDP數據包,監聽任意的TCP和UDP端口,進行端口掃描,處理IPv4和IPv6數據包。
    如果系統沒有nc命令,那么可以手動安裝,安裝命令為yum -y install nc。     

nc命令的參數選項及說明

-l    指定監聽端口,然后一直等待網絡連接
-z    表示zero,表示掃描時不發送任何數據
-v    顯示詳細輸出
-w    設置超時時間,對-l選項失效
-p    指定nc命令使用的端口,不能和-l選項一起使用,可能引起錯誤
-u    使用UDP連接,默認是TCP連接
-s    指定發送數據的源IP地址,適用於多網卡主機
 
 
[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聊天工具聊天

打開兩個命令行窗口,模擬兩個人聊天的場景。
首先在第一個窗口執行如下命令,執行完會hang住等待輸入狀態:
[root@cs6 ~]# nc -l 12345
 
然后在第2個窗口執行如下命令,執行完也會hang住等待輸入狀態:
[root@cs6 ~]# nc 127.0.0.1 12345
 
此時兩個窗口都等待輸入內容。我們先新建第3個窗口,查看他們建立的網絡連接:
 
[root@cs6 ~]# netstat -ntp|grep nc #<=12345端口是nc指定開放的,52978端口是系統為了和12345就口通信隨機開放的,當然也可以使用-p選項指定開放端口。
tcp        0      0 127.0.0.1:12345             127.0.0.1:37060             ESTABLISHED 2748/nc             
tcp        0      0 127.0.0.1:37060             127.0.0.1:12345             ESTABLISHED 2749/nc   
 
怎么聊天呢?很簡單,你在第一個窗口中輸入想要說的話,然后敲回車鍵,悄悄話就會自動發送到對方(第二個窗口),和QQ的效果一樣:
 
[root@cs6 ~]# nc -l 12345
hi,I am lewen
 
對方(第二個窗口)也只需要輸入回復的話然后敲回車鍵,消息就能發送給你:
[root@cs6 ~]# nc 127.0.0.1 12345
hi,I am lewen
hello,lewen
 

10.18 nslookup:域名查詢工具

功能說明

nslookup命令是常用的域名解析查詢工具。
如果系統沒有nslookup命令,則需要安裝下面的軟件包:
yum -y install bind-utils
 

語法格式

nslookup [option] [name] [server] 
nalookup [選填]   [域名/IP]  [DNS服務器]
 

【選項說明】

nslookup有如下兩種模式。
    交互模式:用戶可以向域名服務器查詢各類主機、域名的信息,或者輸出域名中的主機列表。
    非交互模式:針對一個主機或域名僅僅獲取特定的名稱或所需的信息。
先來看看如何進入交互模式。
    直接輸入nslookup命令,若不加任何參數,則會直接進入交互模式,此時nslookup會連接到默認的域名服務器(即/etc/resolv.conf的第一個DNS地址)。
交互模式也支持選定不同的域名服務器。只需要將第一個參數設置為“-”,然后第二個參數是設置要連接的域名服務器主機名或IP地址。
 
 
表10-18  交互模式下nslookup命令的參數選項及說明
參數選項            解釋說明
exit               退出nslookup命令
server <城名服務器>  指定解析域名的服務器地址
set關鍵字=值        設置查詢關鍵字(城名屬性)的值。常見的關鍵字如下:
                    all(全部)查詢城名有關的所有信息
                    domain=name 指定查詢的城名
                    port=端口號 指定裁名服務器使用的端口號
                    type=類型名 指定域名查詢的類型(例如,A、HINFO、PTR、NS、MX等)
                    retry=<次數>指定查詢時重試的次數
                    timeout=秒數指定查詢的超時時間
 
 
對於非交互模式,可采用以下方式進入。
直接在nslookup命令后加上所要查詢的IP或主機名,即可進入非交互模式,也可以在第二個參數位置設置所要連接的域名服務器。
 
表10-19 非交互模式下nslookup命令的參數選項及說明參數選項解釋說明
-timeout        指定查詢的超時時間
-query           指定域名查詢的類型
 

使用范例

交互模式

[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命令的參數選項及說明

@<DNS服務器地址>    指定進行城名解析的域名服務器。當不希望使用本機默認的DNS服務器設置時,使用此選項可指定進行線名解析的其他的域名服務器
 
-x             反向域名解析    
-t             指定要查詢的DNS數據類型,如A、MX和PTR等。默認的查詢類型為A
-b             指定使用本機的哪個IP地址向域名服務器發送域名查詢請求
-P             指定域名服務器所使用的端口號。默認情況下,域名服務器使用UDP協議的53端口
+trace         從根域開始跟蹤查詢結果
+nocmd         不輸出dig的版本信息
+short         僅輸出最精簡的CNAME信息和A記錄,其他的都不會輸出
+nocomment     不輸出dig的詳情注釋信息
+nostat        不輸出最后的統計信息
 

查詢指定域名的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 

 

 

反向域名解析例子

完整的域名解析包括正向解析(即范例10-67,將域名解析成IP地址)和反向解析(給定IP地址查詢其對應的域名信息)。
[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命令

  是一款開放源代碼的網絡探測和安全審核工具,是Network Mapper的縮寫。其設計目標是快速地掃描大型網絡。nmap可以發現網絡上有哪些主機,主機提供了什么服務(應用程序名稱和版本號),並探測操作系統的類型及版本信息。
如果系統沒有nmap命令,則可以使用下面的命令來安裝:
 
  nmap [Scan Type] [option] (target specification) 
 
掃描目標可以為IP地址、子網地址等,如192.168.1.2或10.0.0.0/24。
 
 

nmap命令的參數選項及說明

 
-sS    TCP同步掃描(TCP SYN)
-ST    TCP連接掃描
-sn    不進行端口掃描,只檢查主機正在運行。該選項與老版本的-sP相同
-sU    掃描UDP端口
-sV    探測服務版本信息
-Pn    只進行掃描,不ping主機
-PS    使用SYN包對目標主機進行掃描。默認是80端口,也可以指定端口,格式為-PS22或-PS22-25,80,113,1050,35000,記住PS和端口號之間不要有空格
-PU    使用udp ping掃描端口
-O     激活對TCP/IP指紋特征(fingerprinting)的掃描,獲得遠程主機的標志,也就是操作系統類型
-V     顯示掃描過程中的詳細信息*
-S<IP>          設置掃描的源IP地址
-g port         設置掃描的源端口
-oN             把掃描的結果重定向到文件中
-iL filename    從文件中讀取掃描的目標
-p<端口>        指定要掃描的端口,可以是一個單獨的端口,也可以用逗號分隔開多個端口,或者使用“-”表示端口范圍
-n              不進行DNS解析,加快掃描速度
-exclude        排除指定主機
-excludefile    排除指定文件中的主機
 
 

查看主機當前開放的端口

[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命令是一個截獲網絡數據包的包分析工具。tcpdump可以將網絡中傳送的數據包的“頭”完全截獲下來以提供分析。它支持針對網絡層、協議、主機、端口等的過濾,並支持與、或、非邏輯語句協助過濾有效信息。
tcpdump命令工作時要先把網卡的工作模式切換到混雜模式(promiscuous mode)。因為要修改網絡接口的工作模式,所以tcpdump命令需要以root的身份運行。

【語法格式】

tcpdump [option] [expression] 
tcpdump [選項]    [表達式]
 
表10-23 tcpdump 命令的參數選項及說明
參數選項            解釋說明
-A                   以ASCII碼的方式顯示每一個數據包(不會顯示數據包中鏈路層的頭部信息)。在抓取包含網頁數據的數據包時,可方便查看數據
-c<數據包數目>        接收到指定的數據包數目后退出命令
-e                   每行的打印輸出中將包括數據包的數據鏈路層頭部信息
-i<網絡接口>         指定要監聽數據包的網絡接口
 
-n                  不進行DNS解析,加快顯示速度
-nn                 不將協議和端口數字等轉換成名字
-q                  以快速輸出的方式運行,此選項僅顯示數據包的協議概要信息,輸出信息較短
-s<教據包大小>       設置數據包抓取長度,如果不設置則默認為68等節,設置為0則自動選擇合適的長度來抓取數據包
-t                  在每行輸出信息中不顯示時間截標記
-tt                 在每行輸出信息中顯示無格式的時間載標記
-ttt                顯示當前行與前一行的延遲
-tttt               在每行打印的時間戳之前添加日期
-ttttt              顯示當前行與第一行的延遲
-v                  顯示命令執行的詳細信息
-vv                 顯示比-v選項更加詳細的信息
-vvv                顯示比-vv選項更加詳細的輸出
 

使用范例

不加參數運行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 連接和斷開過程的案例。

1)正常的TCP連接的三個階段。
  1. TCP三次握手
  2. 數據傳送
  3. TCP四次斷開
2)TCP連接圖示。
    TCP連接的狀態機制如圖10-6所示。
3)TCP的狀態標識。
  • SYN:(同步序列編號,Synchronize Sequence Numbers)該標志僅在三次握手建立TCP連接時有效。表示一個新的TCP連接請求。
  • ACK:(確認編號,Acknowledgement Number)是對TCP請求的確認標志,同時提示對端系統已經成功接收了所有的數據。
  • FIN:(結束標志,FINish)用來結束一個TCP回話。但對應端口仍然處於開放狀態,准備接收后續數據。
 
There are 8 bits in the control bits section of the TCe header:
CWR | ECE | URG | ACK| PSH | RST|SYN|FIN
 
[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
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM