Linux之網絡管理(8)網絡監控工具
linux中有很多查看網絡、進程通信狀態的查看工具,而網絡之間建立通信是通過soket套接字進行的,所謂套接字,就是相當于插座,而一臺主機上會產生多種套接字,就是相當于插頭向插座插入的過程,也就是主機中進程通信。而在網絡中建立通信,就是雙方各種插入對方。當然這些只是粗率的比喻,實際上,soket是用來將tcp/udp等協議發送的數據包進行封裝:也就是相當于食品包裝,把數據包加上port端口號、進程號等然后發送給對方,然后對方根據數據的包裝袋來放回特定需要的數據。這樣網絡之間各種進程直接通信之間互不干擾。就像送快遞和收快遞的一樣,誰的快遞,誰來收,路線就是到你家。
linux中提供的工具:
netstat 命令
man 文檔幫助的說明:
netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
打印網絡連接、路由表、接口統計、偽裝連接、多播連接等信息。
選項介紹:
netstat [option]...
-r : 顯示路由表
-t : 已經建立的tcp協議相關
-u : 已經建立的udp協議相關
-w : raw sokect (未包裝處理的)
-l : 處于監聽狀態
-a : 所有狀態
-n : 及數字顯示IP和端口
-e : 擴展方式詳細更多狀態信息
-p : 顯示相關進程及PID
常用組合使用:
查明網絡連接:
netstat -tan 顯示所有tcp相關的連接狀態
netstat -uan 顯示所有udp相關的連接狀態
netstat -tnl 顯示所有監聽狀態的tcp連接
netstat -unl 顯示所有監聽狀態的udp連接
顯示路由表:
netstat -rn 不做反向解析顯示內核路由表
顯示接口統計數據:
netstat -i #顯示所有網絡接口信息狀態
netstat -I=FACE_NAME #顯示指定設備信息狀態
例子:netstat -I=eth0 #顯示eth0設備數據連接狀態信息
ss命令
ss - another utility to investigate sockets
這是另一種顯示套接字信息的工具,netstat命令通過遍歷proc 來獲取socket信息,以及是老舊的命令了,ss使用netlink與內核tcp_diga模塊通信獲取socket信息,更加準確。
格式及選項介紹:
ss[option] [FILTER]
option:
-t : tcp 協議相關
-u : udp協議相關
-w : 裸套接字符相關
-x : unix sock系統內核相關
-l : listen監聽狀態的連接
-a : 所有連接
-n : 數字格式
-p : 相關的程序及PID
-e : 擴展的信息
-m : 內存用量
-o : 計時器信息
FILTER : = [ state TCP-STATE ] [ EXPRESSION ]
TCP的標準狀態:
LISTEN :監聽
ESTABLISHED:已建立的連接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED關閉
EXPRESSION:
dport =#目標端口
sport = #源端口
例子:’( dport = :ssh or sport = :ssh )’
常用組合:
ss -tan#所有tcp連接狀態
ss -tanl #所有監聽的tcp狀態
ss -tanlp #所有監聽tcp的并顯示進程PID
ss -uan #所有udp狀態
額外用法:
ssh -A QUERY#查看對應類型或協議的狀態,QUERY參數為要指定的類型
QUERY:
all, inet, tcp, udp, raw, unix, packet, netlink, unix_dgram, unix_stream,
unix_seqpacket, packet_raw, packet_dgram.
TCP-STATE中可用的標示符參數:
所有TCP標準狀態參數:
established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed,
close-wait, last-ack, listen, closing.
復雜狀態參數:
all 所有的狀態
connection 所有連接的(除了監聽和關閉的)狀態
synchronized 所有同步的,除了syn-sent所有連接的狀態
bucket 所有維護scokect和 syn-recv的狀態
big 所有和bucket相反的狀態
案例展示:
顯示本地打開的所有端口 ss -l
[root@localhost www]# ss -l | tail -n 10
解析:udp是沒有狀態的,所以打開的連接會顯示兩個協議所有處于監聽狀態連接
顯示每個進程具體打開的 socket。
[root@localhost www]# ss -pl | tail -n 10
顯示所有tcp socket
[root@localhost www]# ss -t -a
顯示所有UDP Socekt
[root@localhost www]# ss -u -a
顯示所有已經建立的SMTP連接
[root@localhost www]# ss -o state established '( dport = :smtp or sport = :smtp )'
顯示所有已經建立的HTTP連接
[root@localhost www]# ss -o state established '( dport = :http or sport = :http )'
找出所有連接X服務器的進程
[root@localhost www]# ss -x src /tmp/.X11-unix/*
列出當前各協議的各套接字個數
[root@localhost www]# ss -s
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。