天天看點

Linux學習之網絡相關指令

Linux的核心,網絡相關

很多工具也是通過分析加工 /proc、/sys 下的資料來工作的,而那些更加細緻、專業的性能監測和調優,可能還需要更加專業的工具(perf、systemtap等)和技術才能完成。

Linux學習之網絡相關指令

目錄:

  • strace
  • traceroute
  • tracert
  • sar
  • ifconfig
  • ip
  • nc
  • lsof
  • stat
  • netstat
  • ps
  • pstree
  • ss
  • telnet
  • top
  • Htop
  • iotop
  • powertop
  • iftop
  • dstat
  • nethogs
  • Nmon
  • vnstat
  • host
  • dig
  • route
  • tcpdump

strace

用于跟蹤程式執行過程中的系統調用,如跟蹤test程序:

strace -p [test_pid] 或直接strace ./test

跟蹤程序内的線程: -f 選項

統計時間段内的各個系統調用次數分布:-C 選項

過濾某些系統調用:-e trace選項,如-e trace=network隻顯示網絡相關的系統調用,-e trace=open, close, read, write隻顯示這4個系統調用,常用于隻擷取某些特定的系統調用

顯示系統調用的時間:-ttt選項

詳細顯示每行的資料,而不是… -s選項加大字元串的長度限制如-s 1024

比如,跟蹤pid為12345的程序中所有線程的read和write系統調用,輸出字元串的長度限制為1024:

​​

​strace -s 1024 -f -e trace=read,write -p 12345​

traceroute

通過traceroute,可以知道資訊從你的計算機到網際網路另一端的主機是走的什麼路徑。當然每次資料包由某一同樣的出發點source到達某一目的地(destination)走的路徑可能會不一樣,但基本上來說大部分時候所走的路由是相同的。Linux系統中traceroute,在MS Windows中為tracert。traceroute通過發送小的資料包(預設資料包大小是40Bytes)到目的裝置直到其傳回,來測量其需要多長時間。一條路徑上的每個裝置traceroute要測3次。輸出結果中包括每次測試的時間(ms)和裝置的名稱(如有的話)及其IP位址。

# 跳數設定
traceroute -m 10 www.baidu.com
# 預設30跳
# 顯示IP位址,不查主機名
traceroute -n www.baidu.com
# 探測包使用的基本UDP端口設定6888
traceroute -p 6888 www.baidu.com
# 把探測包的個數設定為值4,預設3個
traceroute -q 4 www.baidu.com
# 繞過正常的路由表,直接發送到網絡相連的主機
traceroute -r www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
connect: 網絡不可達
# 把對外發探測包的等待響應時間設定為3秒
traceroute -w 3 www.baidu.com      

tracert

有必要指出tracert是Windows系統下的指令,功能和traceroute類似。

文法:

​​

​tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name​

sar

Sysstat 工具清單

  • sar - 收集和展示系統的所有活動資料統計。
  • sadc - 代表“系統活動資料收集器”。 這個是 sar 用于資料收集的背景工具。
  • sa1 - 存儲系統活動資料在二進制檔案中。sa1 依賴于 sadc。sa1 運作在定時任務中。
  • sa2 - 建立收集的日總結報告。sa2 在定時任務中運作。
  • sadf - 可以以 CSV,XML,和其他各種格式生成 sar 報告。
  • iostat - 生成 CPU,I/O 統計資料。
  • mpstat - 展示 CPU 統計資料。
  • pidstat - 基于線程 PID 報告統計資料。
  • nfsiostat - 展示 NFS I/O 統計資料。
  • cifsiostat - 生成 CIFS 統計資料。

源碼安裝

wget http://pagesperso-orange.fr/sebastien.godard/sysstat-10.0.0.tar.bz2
tar xvfj sysstat-10.0.0.tar.bz2
cd sysstat-10.0.0
./configure --enable-install-cron
編譯時使用--enable-install-cron 選項,自動完成以下事情:
建立 /etc/rc.d/init.d/sysstat
從 /etc/rc.d/rc*.d/ 目錄建立軟連接配接到 /etc/rc.d/init.d/sysstat 以便 linux 啟動的時候自動啟動 sysstat
比如,/etc/rc.d/rc3.d/S01sysstat 被自動連結到 /etc/rc.d/init.d/sysstat
make
make install      

這将把 sar 以及其他的 systat 工具放在/usr/local/bin目錄下。如果通過源碼安裝,sa1 和 sa2 的預設位置為 /usr/local/lib/sa。如果你使用包管理器安裝(如 yum或者 apt-get),可能位于 /usr/lib/sa/sa1 和 /usr/lib/sa/sa2。

​​

​sar -V​

​指令檢視 sar 版本。

使用定時任務收集 sar 統計資料,在 /etc/cron.d 目錄建立 sysstat 檔案來收集和歸檔 sar 資料

# vi /etc/cron.d/sysstat
*/10 * * * * root /usr/local/lib/sa/sa1 1 1
53 23 * * * root /usr/local/lib/sa/sa2 -A      

/usr/local/lib/sa/sa1

This runs every 10 minutes and collects sar data for historical reference.

If you want to collect sar statistics every 5 minutes, change /10 to /5 in the above /etc/cron.d/sysstat file.

This writes the data to /var/log/sa/saXX file. XX is the day of the month. saXX file is a binary file. You cannot view its content by opening it in a text editor.

For example, If today is 26th day of the month, sa1 writes the sar data to /var/log/sa/sa26

You can pass two parameters to sa1: interval (in seconds) and count.

In the above crontab example: sa1 1 1 means that sa1 collects sar data 1 time with 1 second interval (for every 10 mins).

/usr/local/lib/sa/sa2

This runs close to midnight (at 23:53) to create the daily summary report of the sar data.

sa2 creates /var/log/sa/sarXX file (Note that this is different than saXX file that is created by sa1). This sarXX file created by sa2 is an ascii file that you can view it in a text editor.

This will also remove saXX files that are older than a week. So, write a quick shell script that runs every week to copy the /var/log/sa/* files to some other directory to do historical sar data analysis.

指令行執行個體

# 系統 CPU 統計資料 3 次(1 秒一次)
sar -u 1 3
# 獨立 CPU 的 CPU 使用率,CPU編号為0~n,以及ALL
sar -P ALL 1 1
sar -P 1 1 1
# 記憶體空閑和使用率
sar -r 1 3
# 已使用的 Swap 空間,-f 指定檔案
sar -S -f /var/log/sa/sa10
# 綜合 I/O 活動資料
sar -b 1 3
sar -b -f /var/log/sa/sa10
# 獨立的塊裝置 I/O 活動資料,-p 選項顯示實際的裝置名字
sar -d 1 1
sar -d -f /var/log/sa/sa10
sar -p -d 1 1
# 展示每秒上下文切換
sar -w 1 3
sar -w -f /var/log/sa/sa10
# 運作隊列和系統負載報告
sar -q 1 3
# 網絡統計報告,KEYWORD見**附**
sar -n KEYWORD
sar -n DEV 1 1
# 使用開始時間展示 sar 資料
sar -q -f /var/log/sa/sa23 -s 10:00:01      

KEYWORD 說明:

DEV – Displays network devices vital statistics for eth0, eth1, etc.,

EDEV – Display network device failure statistics

NFS – Displays NFS client activities

NFSD – Displays NFS server activities

SOCK – Displays sockets in use for IPv4

IP – Displays IPv4 network traffic

EIP – Displays IPv4 network errors

ICMP – Displays ICMPv4 network traffic

EICMP – Displays ICMPv4 network errors

TCP – Displays TCPv4 network traffic

ETCP – Displays TCPv4 network errors

UDP – Displays UDPv4 network traffic

SOCK6, IP6, EIP6, ICMP6, UDP6 are for IPv6

ALL – This displays all of the above information. The output will be very long.

ifconfig

windows下有ipconfig指令行工具,用來擷取網絡接口配置資訊并對此進行修改。Linux系統下類似的指令行工具是:ifconfig(interfaces config)。通常需要以root身份登入或使用sudo方式使用。

# 最簡單的一條 ifconfig 指令,顯示網絡裝置資訊(激活狀态的)
eth0      Link encap:Ethernet  HWaddr 00:50:56:BF:26:20  
          inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8700857 errors:0 dropped:0 overruns:0 frame:0
          TX packets:31533 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:596390239 (568.7 MiB)  TX bytes:2886956 (2.7 MiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:68 errors:0 dropped:0 overruns:0 frame:0
          TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2856 (2.7 KiB)  TX bytes:2856 (2.7 KiB)
eth0 表示第一塊網卡,HWaddr 表示網卡的實體位址,可以看到目前這個網卡的實體位址(MAC位址)是 00:50:56:BF:26:20
inet addr 用來表示網卡的IP位址,此網卡的 IP位址是 192.168.120.204,廣播位址, Bcast:192.168.120.255,掩碼位址Mask:255.255.255.0 

lo 是表示主機的回壞位址,這個一般是用來測試一個網絡程式,但又不想讓區域網路或外網的使用者能夠檢視,隻能在此台主機上運作和檢視所用的網絡接口。比如把 HTTPD伺服器的指定到回壞位址,在浏覽器輸入 127.0.0.1 就能看到你所架WEB網站了。但隻是您能看得到,區域網路的其它主機或使用者無從知道。

第一行:連接配接類型:Ethernet(以太網)HWaddr(硬體mac位址)
第二行:網卡的IP位址、子網、掩碼
第三行:UP(代表網卡開啟狀态)RUNNING(代表網卡的網線被接上)MULTICAST(支援多點傳播)MTU:1500(最大傳輸單元):1500位元組
第四、五行:接收、發送資料包情況統計
第七行:接收、發送資料位元組數統計資訊。

# 用ifconfig修改MAC位址;ssh登陸linux伺服器操作要小心,關閉則不能開啟,除非你有多網卡。
ifconfig eth0 down #關閉網卡eth0
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC位址
ifconfig eth0 up #啟動網卡eth0

# 為網卡配置和删除IPv6位址
ifconfig eth0 add 33ffe:3240:800:1005::2/64 為網卡eth0配置IPv6位址;
ifconfig eth0 del 33ffe:3240:800:1005::2/64 為網卡eth0删除IPv6位址;

# 配置IP位址
# 給eth0網卡配置IP地:192.168.120.56
ifconfig eth0 192.168.120.56 
# 給eth0網卡配置IP位址:192.168.120.56 ,并加上子掩碼:255.255.255.0
ifconfig eth0 192.168.120.56 netmask 255.255.255.0 
# 給eth0網卡配置IP位址:192.168.120.56,加上子掩碼:255.255.255.0,加上個廣播位址: 192.168.120.255
ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255

# 啟用和關閉ARP協定
ifconfig eth0 arp #開啟網卡eth0 的arp協定;
ifconfig eth0 -arp #關閉網卡eth0 的arp協定;

# 設定最大傳輸單元,最大資料包大小為 1500 bytes;用ifconfig指令配置的網卡資訊,在網卡重新開機後機器重新開機後,配置就不存在。要想将上述的配置資訊永遠的存的電腦裡,那就要修改網卡的配置檔案。
ifconfig eth0 mtu 1500      

ip

Linux的ip指令和ifconfig類似,但功能更強大,并旨在取代後者。使用ip一個指令,就能很輕松地執行一些網絡管理任務。ifconfig是net-tools中已被廢棄使用的一個指令。iproute2套件裡提供許多增強功能的指令。

Linux學習之網絡相關指令

大多數Linux發行版已經預裝iproute2工具。

# 設定和删除Ip位址,IP位址要有一個字尾,比如/24。這種用法用于在無類域内路由選擇(CIDR)中來顯示所用的子網路遮罩。
sudo ip addr add 192.168.0.193/24 dev wlan0
sudo ip addr del 192.168.0.193/24 dev wlan0
# 檢視是否已經生效
ip addr show wlan0
# 更改預設路由
sudo ip route add default via 192.168.0.196
# 顯示網絡統計資料,當你需要擷取一個特定網絡接口的資訊時,在網絡接口名字後面添加選項ls即可。使用多個-s選項會給你這個特定接口更詳細的資訊。特别是在排除網絡連接配接故障時
ip -s link
ip -s -s link ls p2p1
# 位址解析協定(ARP)用于将一個IP位址轉換成它對應的實體位址,也就是通常所說的MAC位址。使用neigh或者neighbour選項檢視接入你所在的區域網路的裝置的MAC位址
ip neighbour
# 監控netlink消息
monitor選項允許你檢視網絡裝置的狀态。比如,所在區域網路的一台電腦根據它的狀态可以被分類成REACHABLE或者STALE
ip monitor all
# 激活和停止網絡接口
當ppp0接口被激活和在它被停止和再次激活之後,你可以看到相應的路由表條目。這個接口可能是wlan0或者eth0。将ppp0更改為你可用的任意接口即可
sudo ip link set ppp0 down
sudo ip link set ppp0 up
# 列出路由表條目
ip指令的路由對象的參數還可以幫助你檢視網絡中的路由資料,并設定你的路由表。第一個條目是預設的路由條目,你可以随意改動它。
這個結果顯示有幾個裝置通過不同的網絡接口連接配接起來。它們包括WIFI、以太網和一個點對點連接配接
ip route show
假設現在你有一個IP位址,你需要知道路由包從哪裡來。可以使用下面的路由選項(譯注:列出了路由所使用的接口等)
ip route get 10.42.0.47      

nc

ncat/nc,一款功能類似 cat 的工具。一款擁有多種功能的 CLI 工具,可以用來在網絡上讀、寫以及重定向資料。它被設計成可以被腳本或其他程式調用的可靠的後端工具。同時由于它能建立任意所需的連接配接,是以也是一個很好的網絡調試工具。

ncat/nc用于端口掃描/監測,可以做為一個簡單的 TCP 代理。安裝:​​

​yum install nmap-ncat -y​

​。系統管理者可以用它來審計系統安全,用它來找出開放的端口然後保護這些端口。管理者還能用它作為用戶端來審計 Web 伺服器、telnet 伺服器、郵件伺服器等, 通過 nc 可以控制發送的每個字元,也可以檢視對方的回應。捕獲用戶端發送的資料以此來了解這些用戶端是做什麼的。

# 監聽入站連接配接,-l 選項,ncat 可以進入監聽模式,在指定端口監聽入站連接配接:
ncat -l 8080
# 連接配接遠端系統:建立一個連接配接到 IP 為 192.168.1.100 的伺服器上的 80 端口,然後可以向伺服器發送指令
ncat 192.168.1.100 80
比如可以輸入下面内容來擷取完整的網頁内容
GET / HTTP/1.1
或者可以通過以下方式獲得作業系統指紋辨別,
GET / HTTP/1.1
這會告訴我們使用的是什麼軟體來運作這個 web 伺服器的。

# 連接配接 UDP 端口,預設情況下,nc 建立連接配接時隻會連接配接 TCP 端口。-u 選項來連接配接到 UDP 端口
ncat -l -u 1234
# 發送或者說測試某個遠端主機 UDP 端口的連通性,我們可以使用下面指令,
ncat -v -u 192.168.105.150 53
# nc 也可以作為聊天工具來用,可以配置伺服器監聽某個端口,然後從遠端主機上連接配接到伺服器的這個端口,就可以開始發送消息。 在伺服器這端運作:
$ ncat -l 8080
在遠端用戶端主機上運作:$ ncat 192.168.1.100 8080
之後開始發送消息,這些消息會在伺服器終端上顯示出來。

nc 也可以用來做代理$ ncat -l 8080 | ncat 192.168.1.200 80
所有發往伺服器 8080 端口的連接配接都會自動轉發到 192.168.1.200 上的 80 端口。由于使用管道,資料隻能被單向傳輸。要同時能夠接受傳回的資料,需要建立一個雙向管道:
$ mkfifo 2way
$ ncat -l 8080 0<2way | ncat 192.168.1.200 80 1>2way
現在你可以通過 nc 代理來收發資料。

nc 還能用來在系統間拷貝檔案,因為絕大多數系統預設都安裝 ssh/scp。不過如果你恰好遇見個沒有 ssh/scp 的系統的話,你可以用 nc 來作最後的努力。

在要接受資料的機器上啟動 nc 并讓它進入監聽模式:$ ncat -l  8080 > file.txt

現在去要被拷貝資料的機器上運作下面指令:$ ncat 192.168.1.100 8080 --send-only < data.txt
這裡,data.txt 是要發送的檔案。 -–send-only 選項會在檔案拷貝完後立即關閉連接配接。 如果不加該選項, 我們需要手工按下 ctrl+c 來關閉連接配接。
我們也可以用這種方法拷貝整個磁盤分區,不過請一定要小心。

# 通過 nc 建立後門,這種技術也确實被黑客大量使用,-e選項将一個 bash 與端口 10000 相連
ncat -l 10000 -e /bin/bash
然後用戶端隻要連接配接到伺服器上的 10000 端口就能通過 bash 擷取系統的完整通路權限
ncat 192.168.1.100 10000
# -c 來用 nc 進行端口轉發,所有連接配接到 80 端口的連接配接都會轉發到 8080 端口
ncat -u -l  80 -c  'ncat -u -l 8080'

# 設定連接配接逾時,nc 的監聽模式會一直運作,直到手工終止。-w 設定逾時時間,達到逾時時間後終止,隻能用于用戶端而不是服務端。
ncat -w 10 192.168.1.100 8080

# 使用 -k 選項強制 nc 待命
當用戶端從服務端斷開連接配接後,過一段時間服務端也會停止監聽,選項 -k 強制伺服器保持連接配接并繼續監聽端口
ncat -l -k 8080

# 檢查 80 端口是否被打開/可連通
nc -zv localhost 80
# nc可在Linux上開啟TCP Server、TCP Client、UDP Server、UDP Client。
# 如在端口号12345上開啟TCP Server和Client模拟TCP通信
Server:  nc -l 127.0.0.1 12345
Client:  nc 127.0.0.1 12345
# 在端口号12345上開啟UDP Server和Client模拟TCP通信:
Server:  nc -ul 127.0.0.1 12345
Client:  nc -u 127.0.0.1 12345
# Unix Socket通信示例:
Server:  nc -Ul /tmp/1.sock
Client:  nc -U /tmp/1.sock      

lsof

list open files,列出目前系統打開檔案的工具。Linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以通路正常資料,還可以通路網絡連接配接和硬體。是以如TCP和UDP套接字等,系統在背景都為該應用程式配置設定一個檔案描述符,無論這個檔案的本質如何,該檔案描述符為應用程式與基礎作業系統之間的互動提供通用接口。因為應用程式打開檔案的描述符清單提供大量關于這個應用程式本身的資訊,是以 lsof 工具能夠用于系統監測以及排錯。需要root權限。

lsof打開的檔案包括:

  1. 普通檔案
  2. 目錄
  3. 網絡檔案系統的檔案
  4. 字元或裝置檔案
  5. (函數)共享庫
  6. 管道,命名管道
  7. 符号連結
  8. 網絡檔案(例如:NFS file、網絡socket,unix域名socket)
  9. 其它類型的檔案等
# 遞歸檢視某個目錄的檔案資訊
lsof usr/etc/
# 列出某(幾)個程式程序所打開的檔案資訊,一個-c等價于lsof | grep mysql,-u列出某個使用者打開的檔案資訊,lsof -u ^root排除root使用者打開的檔案資訊
lsof -u root -c mysql -c apache
# 輸出所用正在使用 80 端口的 程序/服務 的名稱,輸出資訊:COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME,找到程序的 pid,然後可以使用指令 kill 殺掉程序。
lsof -iTCP:80 -sTCP:LISTEN
# 檢視端口占用程序資訊,經常用于端口綁定失敗時确認端口被哪個程序占用
lsof -i:8080
# 檢視程序打開了哪些檔案或套接字
sudo lsof -p [pid]      

stat

用來顯示檔案或檔案系統的狀态資訊。當用檔案名作為參數時,stat将會展示檔案的全部資訊。狀态資訊包括檔案 大小、塊、權限、通路時間、修改時間、狀态改變時間等。用法:​

​stat <file_name>​

netstat

netstat指令用于顯示與IP、TCP、UDP和ICMP協定相關的統計資料,一般用于檢驗本機各端口的網絡連接配接情況。netstat是在核心中通路網絡及相關資訊的程式,它能提供TCP連接配接,TCP和UDP監聽,程序記憶體管理的相關報告。

用于列出系統上所有的網絡套接字連接配接情況,包括 tcp, udp 以及 unix 套接字,以及處于監聽狀态(即等待接入請求)的套接字。如果你想确認系統上的 Web 服務有沒有起來,你可以檢視80端口有沒有打開。可用于列印網絡連接配接、路由表、連接配接的資料統計、僞裝連接配接以及廣播域成員。

指令格式:​​

​netstat [-acCeFghilMnNoprstuvVwx][-A<網絡類型>][--ip]​

​​ 指令選項:

-a或–all 顯示所有連線中的Socket。

-A<網絡類型>或–<網絡類型> 列出該網絡類型連線中的相關位址。

-c或–continuous 持續列出網絡狀态。

-C或–cache 顯示路由器配置的快取資訊。

-e或–extend 顯示網絡其他相關資訊。

-F或–fib 顯示FIB。

-g或–groups 顯示多重廣播功能群組組員名單。

-h或–help 線上幫助。

-i或–interfaces 顯示網絡界面資訊表單。

-l或–listening 顯示監控中的伺服器的Socket。

-M或–masquerade 顯示僞裝的網絡連線。

-n或–numeric 直接使用IP位址,而不通過域名伺服器。

-N或–netlink或–symbolic 顯示網絡硬體外圍裝置的符号連接配接名稱。

-o或–timers 顯示計時器。

-p或–programs 顯示正在使用Socket的程式識别碼和程式名稱。

-r或–route 顯示Routing Table。

-s或–statistice 顯示網絡工作資訊統計表。

-t或–tcp 顯示TCP傳輸協定的連線狀況。

-u或–udp 顯示UDP傳輸協定的連線狀況。

-v或–verbose 顯示指令執行過程。

-V或–version 顯示版本資訊。

-w或–raw 顯示RAW傳輸協定的連線狀況。

-x或–unix 此參數的效果和指定”-A unix”參數相同。

–ip或–inet 此參數的效果和指定”-A inet”參數相同。

從整體上看,netstat的輸出結果可以分為兩個部分:

一個是Active Internet connections,稱為有源TCP連接配接,其中"Recv-Q"和"Send-Q"指的是接收隊列和發送隊列。這些數字一般都應該是0。如果不是則表示軟體包正在隊列中堆積。這種情況隻能在非常少的情況見到。

另一個是Active UNIX domain sockets,稱為有源Unix域套接口(和網絡套接字一樣,但是隻能用于本機通信,性能可以提高一倍)。

Proto顯示連接配接使用的協定,RefCnt表示連接配接到本套接口上的程序号,Types顯示套接口的類型,State顯示套接口目前的狀态,Path表示連接配接到套接口的其它程序使用的路徑名。

套接口類型:

-t :TCP

-u :UDP

-raw :RAW類型

–unix :UNIX域類型

–ax25 :AX25類型

–ipx :ipx類型

–netrom :netrom類型

狀态說明:

LISTEN:偵聽來自遠方的TCP端口的連接配接請求

SYN-SENT:再發送連接配接請求後等待比對的連接配接請求(如果有大量這樣的狀态包,檢查是否中招了)

SYN-RECEIVED:再收到和發送一個連接配接請求後等待對方對連接配接請求的确認(如有大量此狀态,估計被flood攻擊了)

ESTABLISHED:代表一個打開的連接配接

FIN-WAIT-1:等待遠端TCP連接配接中斷請求,或先前的連接配接中斷請求的确認

FIN-WAIT-2:從遠端TCP等待連接配接中斷請求

CLOSE-WAIT:等待從本地使用者發來的連接配接中斷請求

CLOSING:等待遠端TCP對連接配接中斷的确認

LAST-ACK:等待原來的發向遠端TCP的連接配接中斷請求的确認(不是什麼好東西,此項出現,檢查是否被攻擊)

TIME-WAIT:等待足夠的時間以確定遠端TCP接收到連接配接中斷請求的确認

CLOSED:沒有任何連接配接狀态

詳細執行個體:

# -a 列出所有有效連接配接資訊,包括tcp,udp 和 unix 協定下所有套接字的所有連接配接。包括已建立(ESTABLISHED),監聽中(LISTENING)
# -t 列出 TCP 協定連接配接,-u列出 UDP。上面同時顯示 IPv4 和 IPv6 的連接配接。
#  -n 禁用域名解析,加快查詢速度。預設情況下 netstat 會通過反向域名解析技術查找每個 IP 位址對應的主機名。這會降低查找速度。顯示所有已建立的有效連接配接
netstat -ant
# -l隻列出監聽中的連接配接。任何網絡服務的背景程序都會打開一個端口,用于監聽接入的請求。這些正在監聽的套接字也和連接配接的套接字一樣,也能被 netstat 列出來。如果你檢視所有監聽端口,去掉 -t 選項。不要使用 -a 選項,否則 netstat 會列出所有連接配接,而不僅僅是監聽端口。
netstat -tnl
# -s 按照各個協定分别顯示其網絡統計資料,包括收發包數量,協定:IP,Icmp,IcmpMsg,TCP,UDP,TcpExt,IpExt
netstat -s/netstat -su
# -r 列印核心路由資訊。與 route 指令輸出的資訊一樣
# -i 列印網絡接口(網卡)資訊,加上-e選項搭配輸出使用者友好的資訊,與 ifconfig 輸出的資訊一樣
# -c 選項持續輸出資訊
# -g 會輸出 IPv4 和 IPv6 的多點傳播組資訊
# 擷取程序名、程序号以及使用者 ID
# -p 選項檢視程序資訊(程序名和程序号),需要root 權限,很多服務都運作在 root 權限之下
netstat -nlpt
# -e 顯示關于以太網的統計資料,列出的項目包括傳送的資料報的總位元組數、錯誤數、删除數、資料報的數量和廣播的數量。這些統計資料既有發送的資料報數量,也有接收的資料報數量。這個選項可以用來統計一些基本的網絡流量
# -ep 選項可以同時檢視程序名和使用者名,相比程序名和程序号而言,檢視程序的擁有者會更有用。這些額外的資訊包括使用者名和程序的索引節點号。将 -n 和 -e 選項一起使用,User 列的屬性就是使用者的 ID 号,而不是使用者名。
netstat -ltpe
# active 狀态的套接字連接配接用 “ESTABLISHED” 字段表示,使用 grep 指令獲得 active 狀态的連接配接
netstat -atnp | grep ESTA
# 配合 watch 監視 active 狀态的連接配接
watch -d -n0 "netstat -atnp | grep ESTA"
# 結合grep檢視 http,smtp 或 ntp 服務是否在運作
sudo netstat -aple | grep ntp

# 統計機器中網絡連接配接各個狀态個數
netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 1
LISTEN 3
# 把狀态全都取出來後使用uniq -c統計後再進行排序
netstat -nat |awk '{print $6}'|sort|uniq -c    (僅僅統計)
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn  (排序)
# 檢視連接配接某服務端口最多的的IP位址
netstat -nat | grep "192.168.120.20:16067" |awk '{print $5}'|awk -F: '{print $4}'|sort|uniq -c|sort -nr|head -20
# 找出程式運作的端口
netstat -ap | grep ssh
# 顯示 PID 和程序名稱
netstat -pt
netstat -p 可以與其它開關一起使用,就可以添加 “PID/程序名稱” 到 netstat 輸出中,這樣 debugging 的時候可以很友善的發現特定端口運作的程式。

# 找出運作在指定端口的程序
netstat -anpt | grep ':16064' 
運作在端口16064的程序id為24596,再通過ps指令就可以找到具體的應用程式。      

ps

Process Status,用來列出系統中目前運作的程序的快照,即執行ps指令的那個時刻的那些程序。想要動态的顯示程序資訊,得使用top指令。

要對程序進行監測和控制,首先必須要了解目前程序的情況,也就是需要檢視目前程序。使用該指令可以确定有哪些程序正在運作和運作的狀态、程序是否結束、程序有沒有僵死、哪些程序占用過多資源等。總之大部分資訊都是可以通過執行該指令得到的。kill 指令用于殺死程序。

linux上程序有5種狀态:

  1. 運作(正在運作或在運作隊列中等待)
  2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信号)
  3. 不可中斷(收到信号不喚醒和不可運作, 程序必須等待直到有中斷發生)
  4. 僵死(程序已終止, 但程序描述符存在, 直到父程序調用wait4()系統調用後釋放)
  5. 停止(程序收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号後停止運作運作)

ps工具辨別程序的5種狀态碼:

D 不可中斷 uninterruptible sleep (usually IO)

R 運作 runnable (on run queue)

S 中斷 sleeping

T 停止 traced or stopped

Z 僵死 a defunct (”zombie”) process

指令​

​ps -l​

​​輸出:

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

4 S 0 2448 2320 0 80 0 - 14082 wait pts/2 00:00:00 su

4 S 0 2449 2448 0 80 0 - 6330 wait pts/2 00:00:00 bash

0 R 0 2461 2449 0 80 0 - 3561 - pts/2 00:00:00 ps

解讀

F,代表這個程式的旗标 (flag), 4 代表使用者為 super user

S,程序狀态STAT:

R :該程式目前正在運作,或者是可被運作

S :該程式目前正在睡眠當中 (可說是 idle 狀态),但可被某些訊号 (signal) 喚醒。

T :該程式目前正在偵測或者是停止了

Z :該程式應該已經終止,但是其父程式卻無法正常的終止他,造成 zombie (疆屍) 程式的狀态

UID,程序的擁有者uid

PID,程序id

PPID,父程序id

C,CPU 使用的資源百分比

PRI,優先級Priority

NI,這個是 Nice 值

ADDR,kernel function,指出該程式在記憶體的那個部分。如果是個 running的程式,一般就是 “-”

SZ,使用掉的記憶體大小

WCHAN,目前這個程序是否正在運作當中,若為 - 表示正在運作

TTY,登入者的終端機位置,若與終端機無關,則顯示 ?,tty1-tty6 是本機上面的登入者程式,若為 pts/0 等,則表示為由網絡連接配接進主機的程式

TIME,使用掉的 CPU 時間

CMD,指令

在預設的情況下, ps 僅會列出與目前所在的 bash shell 有關的 PID 而已,是以, 當我使用 ps -l 的時候,隻有三個 PID。

另​

​ps aux​

​​指令的輸出和指令​

​ps -l​

​​的輸出有部分字段相同,意義也一樣,不同的字段如下:

VSZ :該 process 使用掉的虛拟記憶體量 (Kbytes)

RSS :該 process 占用的固定的記憶體量 (Kbytes)

START:該 process 被觸發啟動的時間

# 顯示所有程序資訊
ps -A
# 輸出指定使用者的程序和線程。L列出線程,-F完整格式化
ps -LF -u root
# 列出類似程式樹的程式顯示
ps -axjf
找出與 cron 與 syslog 這兩個服務有關的 PID 号碼
ps aux | egrep '(cron|syslog)'
# 用 | 管道符和 more 連接配接起來分頁檢視
ps -aux |more
# 把所有程序顯示出來,并輸出到ps001.txt檔案
ps -aux > ps001.txt
# 輸出指定的字段資訊
ps -o pid,ppid,pgrp,session,tpgid,comm
# 顯示所有程序資訊,連同指令行
ps -ef
# 與grep組合查找特定程序
ps -ef|grep ssh      

pstree

顯示目前運作的所有程序及其相關的子程序,輸出的是類似‘tree’指令的樹狀格式。

ss

Socket Statistics,是iproute2包附帶的一個工具,可以比其他工具顯示更多的TCP和狀态資訊,而且比netstat更快速更高效。安裝 iproute2-doc 包, 通過 /usr/share/doc/iproute2-doc/ss.html獲得完整文檔。不帶選項顯示類似netstat指令的資訊,輸入類似的參數可以擷取想要的類似輸出。

當伺服器的socket連接配接數量變得非常大時,無論是使用netstat指令(netstat周遊/proc下的每個PID目錄來工作)還是直接cat /proc/net,執行速度都會很慢。ss快的秘訣在于,利用到TCP協定棧中tcp_diag。tcp_diag是一個用于分析統計的子產品,可以獲得Linux 核心中第一手的資訊。當然,如果你的系統中沒有tcp_diag,ss也可以正常運作,隻是效率會變得稍慢,但仍然比netstat要快。-K 強制關閉 socket。

ss與 iptables 的文法非常相同。

# -t顯示TCP連接配接,-u顯示UDP Sockets,-a表示所有
ss -t -a
# 顯示連接配接到/tmp/a.sock的程序
ss -x src /tmp/a.sock
# 顯示 Sockets 摘要,列出目前的established, closed, orphaned and waiting TCP sockets
ss -s
# 列出所有打開的網絡連接配接端口
ss -l
# 找出打開套接字/端口應用程式
ss -lp | grep 3306
# 顯示所有狀态為established的SMTP連接配接
ss -o state established '( dport = :smtp or sport = :smtp )' 
# 顯示所有狀态為Established的HTTP連接配接
ss -o state established '( dport = :http or sport = :http )' 
# 列舉出處于 FIN-WAIT-1狀态的源端口為 80或者 443,目标網絡為 193.233.7/24所有 tcp套接字
ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24
# 用TCP 狀态過濾Sockets:
ss -4/6 state FILTER-NAME可選項:established、syn-sent、syn-recv、fin-wait-1、fin-wait-2、time-wait、closed、close-wait、last-ack、listen、closing、all(所有以上狀态)、connected(除了listen and closed的所有狀态)、synchronized(所有已連接配接的狀态除syn-sent)、bucket(顯示狀态為maintained as inisockets,如time-wait和syn-recv)、big(和bucket相反)
ss -4 state closing
# 比對遠端位址和端口号
ss dst ADDRESS_PATTERN
ss dst 192.168.1.5
ss dst 192.168.119.113:http 
ss dst 192.168.119.113:smtp 
ss dst 192.168.119.113:443
# 内置過濾能力,列出所有端口為 22(ssh)的連接配接
ss state all sport = :ssh
# 隻看已建立的 socket(排除listening 和 closed)
ss state connected sport = :ssh
# 列出指定的 host 或者 ip 段,列出到達 74.125.0.0/16 子網的連接配接
ss state all dst 74.125.0.0/16

# 比對本地位址和端口号
ss src ADDRESS_PATTERN
ss src 192.168.119.103
ss src 192.168.119.103:http
ss src 192.168.119.103:80
ss src 192.168.119.103:smtp
ss src 192.168.119.103:25
# 将本地或者遠端端口和一個數比較
ss dport OP PORT 
ss sport OP PORT
ss dport OP PORT 遠端端口和一個數比較;ss sport OP PORT 本地端口和一個數比較。
OP 可以代表以下任意一個: 
<= or le : 小于或等于端口号
>= or ge : 大于或等于端口号
== or eq : 等于端口号
!= or ne : 不等于端口号
< or gt : 小于端口号
> or lt : 大于端口号

# ss 和 netstat 效率對比
time netstat -at
time ss 
用time 指令分别擷取通過netstat和ss指令擷取程式和概要占用資源所使用的時間。在伺服器連接配接數比較多的時候,netstat的效率完全沒法和ss比。      

telnet

telnet指令通常用來遠端登入,基于TELNET協定的遠端登入用戶端程式,TCP/IP協定族中的一員,是Internet遠端登陸服務的标準協定和主要方式。在終端使用者的電腦上使用telnet程式,用它連接配接到伺服器。終端使用者可以在telnet程式中輸入指令,這些指令會在伺服器上運作,就像直接在伺服器的控制台上輸入一樣。可以在本地就能控制伺服器。要開始一個 telnet會話,必須輸入使用者名和密碼來登入伺服器。

因為telnet采用明文傳送封包,安全性不好,很多Linux伺服器都不開放telnet服務,而改用更安全的ssh方式。但仍然有很多别的系統可能采用telnet方式來提供遠端登入。telnet還可确定遠端服務的狀态,比如确定遠端伺服器的某個端口是否能通路。

指令參數:

-8 允許使用8位字元資料,包括輸入與輸出。

-a 嘗試自動登入遠端系統。

-b<主機名稱> 使用别名指定遠端主機名稱。

-c 不讀取使用者專屬目錄裡的.telnetrc檔案。

-d 啟動排錯模式。

-e<脫離字元> 設定脫離字元。

-E 濾除脫離字元。

-f 此參數的效果和指定"-F"參數相同。

-F 使用Kerberos V5認證時,加上此參數可把本地主機的認證資料上傳到遠端主機。

-k<域名> 使用Kerberos認證時,加上此參數讓遠端主機采用指定的領域名,而非該主機的域名。

-K 不自動登入遠端主機。

-l<使用者名稱> 指定要登入遠端主機的使用者名稱。

-L 允許輸出8位字元資料。

-n<記錄檔案> 指定檔案記錄相關資訊。

-r 使用類似rlogin指令的使用者界面。

-S<服務類型> 設定telnet連線所需的IP TOS資訊。

-x 假設主機有支援資料加密的功能,就使用它。

-X<認證形态> 關閉指定的認證形态。

top

常用的性能分析工具,能夠實時顯示系統中各個程序的資源占用狀況,類似于Windows的任務管理器。顯示系統目前的程序和其他狀況;top是一個動态顯示過程,即可以通過使用者按鍵來不斷重新整理目前狀态。預設情況下在前台執行,将獨占前台,直到使用者終止該程式為止。top指令提供了實時的對系統處理器的狀态監視.它将顯示系統中CPU最“敏感”的任務清單.該指令可以按CPU使用.記憶體使用和執行時間對任務進行排序;很多特性都可以通過互動式指令或者在個人定制檔案中進行設定。

top - 02:05:04 up 10:10,  3 users,  load average: 0.05, 0.02, 0.00
Tasks: 175 total,   1 running, 174 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.0%us,  0.7%sy,  0.0%ni, 97.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2071588k total,  1752664k used,   318924k free,    43712k buffers
Swap:  4161528k total,        0k used,  4161528k free,  1456840k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                         
10515 root      20   0 69592  24m 8536 S  2.0  1.2   0:15.98 Xorg                                                                                            
10841 johnny    20   0 42864  11m 9512 S  0.3  0.6   0:00.51 wnck-applet      

統計資訊區

前五行是系統整體的統計資訊。第一行是任務隊列資訊,同 uptime 指令的執行結果。其内容如下:

02:05:04 目前時間

up 10:10 系統運作時間,格式為時:分

3 user 目前登入使用者數

load average: 0.05, 0.02, 0.00 系統負載,即任務隊列的平均長度。

三個數值分别為 1分鐘、5分鐘、15分鐘前到現在的平均值。

第二、三行為程序和CPU的資訊。當有多個CPU時,這些内容可能會超過兩行。内容如下:

Tasks: 175 total 程序總數

1 running 正在運作的程序數

174 sleeping 睡眠的程序數

0 stopped 停止的程序數

0 zombie 僵屍程序數

Cpu(s): 0.3% us 使用者空間占用CPU百分比

1.0% sy 核心空間占用CPU百分比

0.0% ni 使用者程序空間内改變過優先級的程序占用CPU百分比

98.7% id 空閑CPU百分比

0.0% wa 等待輸入輸出的CPU時間百分比

0.0% hi

0.0% si

最後兩行為記憶體資訊。内容如下:

Mem: 191272k total 實體記憶體總量

173656k used 使用的實體記憶體總量

17616k free 空閑記憶體總量

22052k buffers 用作核心緩存的記憶體量

Swap: 192772k total 交換區總量

0k used 使用的交換區總量

192772k free 空閑交換區總量

123988k cached 緩沖的交換區總量。

記憶體中的内容被換出到交換區,而後又被換入到記憶體,但使用過的交換區尚未被覆寫,

該數值即為這些内容已存在于記憶體中的交換區的大小。

相應的記憶體再次被換出時可不必再對交換區寫入。

程序資訊區

統計資訊區域的下方顯示了各個程序的詳細資訊。首先來認識一下各列的含義。

序号 列名 含義

a PID 程序id

b PPID 父程序id

c RUSER Real user name

d UID 程序所有者的使用者id

e USER 程序所有者的使用者名

f GROUP 程序所有者的組名

g TTY 啟動程序的終端名。不是從終端啟動的程序則顯示為 ?

h PR 優先級

i NI nice值。負值表示高優先級,正值表示低優先級

j P 最後使用的CPU,僅在多CPU環境下有意義

k %CPU 上次更新到現在的CPU時間占用百分比

l TIME 程序使用的CPU時間總計,機關秒

m TIME+ 程序使用的CPU時間總計,機關1/100秒

n %MEM 程序使用的實體記憶體百分比

o VIRT 程序使用的虛拟記憶體總量,機關kb。VIRT=SWAP+RES

p SWAP 程序使用的虛拟記憶體中,被換出的大小,機關kb。

q RES 程序使用的、未被換出的實體記憶體大小,機關kb。RES=CODE+DATA

r CODE 可執行代碼占用的實體記憶體大小,機關kb

s DATA 可執行代碼以外的部分(資料段+棧)占用的實體記憶體大小,機關kb

t SHR 共享記憶體大小,機關kb

u nFLT 頁面錯誤次數

v nDRT 最後一次寫入到現在,被修改過的頁面數。

w S 程序狀态。

D=不可中斷的睡眠狀态

R=運作

S=睡眠

T=跟蹤/停止

Z=僵屍程序

x COMMAND 指令名/指令行

y WCHAN 若該程序在睡眠,則顯示睡眠中的系統函數名

z Flags 任務标志,參考 sched.h

預設情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通過下面的快捷鍵來更改顯示内容。

更改顯示内容

通過 f 鍵可以選擇顯示的内容。按 f 鍵之後會顯示列的清單,按 a-z 即可顯示或隐藏對應的列,最後按Enter鍵确定。

按 o 鍵可以改變列的顯示順序。按小寫的 a-z 可以将相應的列向右移動,而大寫的 A-Z 可以将相應的列向左移動。最後按Enter鍵确定。

按大寫的 F 或 O 鍵,然後按 a-z 可以将程序按照相應的列進行排序。而大寫的 R 鍵可以将目前的排序倒轉。

4.1使用格式

​​

​top [-] [d] [p] [q] [c] [C] [S] [s] [n]​

​​ 4.2參數說明

d 指定每兩次螢幕資訊重新整理之間的時間間隔。當然使用者可以使用s互動指令來改變之。

p 通過指定監控程序ID來僅僅監控某個程序的狀态。

q該選項将使top沒有任何延遲的進行重新整理。如果調用程式有超級使用者權限,那麼top将以盡可能高的優先級運作。

S 指定累計模式

s 使top指令在安全模式中運作。這将去除互動指令所帶來的潛在危險。

i 使top不顯示任何閑置或者僵死程序。

c 顯示整個指令行而不隻是顯示指令名

4.3其他

  下面介紹在top指令執行過程中可以使用的一些互動指令。這些指令都是單字母的,如果在指令行選項中使用了s選項,則可能其中一些指令會被屏蔽掉。

  Ctrl+L 擦除并且重寫螢幕。

  h或者? 顯示幫助畫面,給出一些簡短的指令總結說明。

  k 終止一個程序。系統将提示使用者輸入需要終止的程序PID,以及需要發送給該程序什麼樣的信号。一般的終止程序可以使用15信号;如果不能正常結束那就使用信号9強制結束該程序。預設值是信号15。在安全模式中此指令被屏蔽。

  i 忽略閑置和僵死程序。這是一個開關式指令。

  q 退出程式。

  r 重新安排一個程序的優先級别。系統提示使用者輸入需要改變的程序PID以及需要設定的程序優先級值。輸入一個正值将使優先級降低,反之則可以使該程序擁有更高的優先權。預設值是10。

  S 切換到累計模式。

  s 改變兩次重新整理之間的延遲時間。系統将提示使用者輸入新的時間,機關為s。如果有小數,就換算成m s。輸入0值則系統将不斷重新整理,預設值是5 s。需要注意的是如果設定太小的時間,很可能會引起不斷重新整理,進而根本來不及看清顯示的情況,而且系統負載也會大大增加。

  f或者F 從目前顯示中添加或者删除項目。

  o或者O 改變顯示項目的順序。

  l 切換顯示平均負載和啟動時間資訊。

  m 切換顯示記憶體資訊。

  t 切換顯示程序和CPU狀态資訊。

  c 切換顯示指令名稱和完整指令行。

  M 根據駐留記憶體大小進行排序。

  P 根據CPU使用百分比大小進行排序。

  T 根據時間/累計時間進行排序。

W 将目前設定寫入~/.toprc檔案中。這是寫top配置檔案的推薦方法。

Htop

比内置的 top 任務管理更強大的工具,提供帶有諸多選項的進階接口用于監控系統程序。支援滑鼠操作,可以使用菜單導航、選擇程序,以及通過排序和過濾來管理任務。

部分快捷鍵

\過濾器

/搜尋

,選擇排序條件

k發送殺死信号

u使用者過濾結果

t打開/關閉樹模式

-和+ 折疊 / 展開標明的流程樹

H關閉顯示線程

iotop

通過磁盤寫入對程序進行排序,并顯示程式寫入磁盤的次數和頻率。

powertop

通過能量消耗列出流程。當你在外面,在某個地方你不能為筆記本電腦充電的地方時,這是一個至關重要的指令。

iftop

顯而易見,輸出和top指令的輸出非常相似。可以用于找出網絡擁塞,測速和維持網絡流量總量。隻有一個網絡接口,直接運作 iftop 即可;如果有多個網絡接口,需要指定要監控的接口:​

​sudo iftop -i wlan0​

​​。

使用執行個體:

# 檢視某視訊類網站的網絡流量
# 得到ip4位址208.85.40.20
dig A pandora.com
# 得到子網路遮罩24
ipcalc -b 208.85.40.20
# 檢視流量
sudo iftop -F 208.85.40.20/24 -i wlan0
-G選項檢視 IPv6 位址的網絡流量      

nethogs

通過網絡流量列出程序。需要root權限以顯示盡可能全面的資訊;指定要監聽的接口,會顯示大量的應用程式及其程序号;常用于檢測哪些程序占用帶寬。

dstat

會依據系統資源生成統計,以彩色可視化輸出。

Nmon

Nmon,得名于 Nigel 的監控器,性能系統監控工具。Nmon 可以把作業系統的統計資料展示在螢幕上或者存儲到一份資料檔案裡,來幫助了解計算機資源的使用情況、調整方向和系統瓶頸。這個系統基準測試工具隻需要使用一條指令就能得到大量重要的性能資料。使用 Nmon 可以很輕松的監控系統的 CPU、記憶體、網絡、硬碟、檔案系統、NFS、高耗程序、資源和 IBM Power 系統的微分區的資訊。

Nmon 預設是存在于 Ubuntu 倉庫中。安裝:​​

​sudo apt-get install nmon​

​​;啟動:​

​nmon​

​​。

nmon 指令行工具完全是互動式運作的,可以使用快捷鍵來輕松檢視對應的統計資料:

q : 停止并退出 Nmon

h : 檢視幫助

c : 檢視 CPU 統計資料

m : 檢視記憶體統計資料

d : 檢視硬碟統計資料

k : 檢視核心統計資料

n : 檢視網絡統計資料

N : 檢視 NFS 統計資料

j : 檢視檔案系統統計資料

t : 檢視高耗程序

V : 檢視虛拟記憶體統計資料

v : 詳細模式

r:顯示計算機的系統結構、作業系統版本号和 CPU 等不同資源的資訊。

vnstat

網絡資料收集工具,十分輕量并且不需要 root 權限,以守護程序在背景運作,可以實時地記錄網絡資料。單個 vnstat 指令就可以顯示所累計的資料。預設情況下它會顯示所有的網絡接口。使用 -i 選項來選擇某個接口。合并多個接口的資料:​

​vnstat -i wlan0+eth0+eth1​

​​。

通過這幾種方式過濾資料顯示:

-h 按小時顯示統計資訊。

-d 按天顯示統計資訊。

-w 和 -m 分别按周和月份來顯示統計資訊。

-l 選項檢視實時更新。

删除 wlan1 的資料庫并不再監視它:​​

​vnstat -i wlan1 --delete​

​​ 為網絡接口建立一個别名:​

​vnstat -u -i enp0s25 --nick eth0​

​ 預設情況下,vnstat 會監視 eth0。你可以在 /etc/vnstat.conf 對它進行修改,或者在你的家目錄下建立你自己的個人配置檔案。

安裝 vnstati 來建立簡單的彩圖:​

​vnstati -s -i wlx7cdd90a0a1c2 -o vnstat.png​

host

DNS查詢工具:​

​host www.google.com​

​;

dig

同為DNS查詢工具,更專業,​

​dig www.google.com​

​;

route

route指令(Linux和win系統都自帶)用于顯示和操作IP路由表。要實作兩個不同的子網之間的通信,需要一台連接配接兩個網絡的路由器,或者同時位于兩個網絡的網關來實作。

在Linux系統中,設定路由通常是為了解決以下問題:該Linux系統在一個區域網路中,區域網路中有一個網關,能夠讓機器通路Internet,那麼就需要将這台機器的IP位址設定為Linux機器的預設路由。要注意的是,直接在指令行下執行route指令來添加路由,不會永久儲存,當網卡重新開機或者機器重新開機之後,該路由就失效了;可以在/etc/rc.local中添加route指令來保證該路由設定永久有效。

Route指令是用于操作基于核心ip路由表,它的主要作用是建立一個靜态路由讓指定一個主機或者一個網絡通過一個網絡接口,如eth0。當使用"add"或者"del"參數時,路由表被修改,如果沒有參數,則顯示路由表目前的内容。

# 顯示目前路由
route print/route -n
# 添加網關/設定網關
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
# 屏蔽一條路由
route add -net 224.0.0.0 netmask 240.0.0.0 reject
# 删除路由記錄
route del -net 224.0.0.0 netmask 240.0.0.0
route del -net 224.0.0.0 netmask 240.0.0.0 reject
# 删除和添加設定預設網關
route del default gw 192.168.120.240
route add default gw 192.168.120.240      

tcpdump

# 從所有網卡中捕獲資料包
tcpdump -i any
# 從指定網卡中捕獲資料包
tcpdump -i eth0
# 使用 -w 選項将所有捕獲的包寫入檔案,此檔案可用wireshark檢視
tcpdump -i eth1 -w packets_file
# 讀取 tcpdump 檔案
tcpdump -r packets_file
# 擷取更多的包資訊,并且以可讀的形式顯示時間戳
tcpdump -ttttnnvvS
# 檢視整個網絡的資料包
tcpdump net 192.168.1.0/24
# 根據 IP 位址檢視封包,不管是作為源位址還是目的位址
tcpdump host 192.168.1.100
# 指定 IP 位址是源位址或是目的位址則使用
tcpdump src 192.168.1.100
tcpdump dst 192.168.1.100
# 檢視某個協定或端口号的資料包
tcpdump ssh
# 要捕獲某個端口或一個範圍的資料包
tcpdump port 22
tcpdump portrange 22-125
# 也可以與 src 和 dst 選項連用來捕獲指定源端口或指定目的端口的封包。使用“與” (and,&&)、“或” (or,|| ) 和“非”(not,!) 來将兩個條件組合起來
# 與
tcpdump src 192.168.1.100 && port 22 -w ssh_packets
# 或
tcpdump src 192.168.1.100 or dst 192.168.1.50 && port 22 -w ssh_packets
tcpdump port 443 or 80 -w http_packets
# 非:捕獲 eth0 上除 22 号端口的所有通訊
tcpdump -i eth0 src port not 22

文本形式顯示抓包資料:-A選項;顯示16進制的封包資料:-X選項;
抓取80端口的HTTP封包,以文本形式展示:`sudo tcpdump -i any port 80 -A`      

參考

繼續閱讀