關注 Linux 的系統狀态,主要從兩個角度出發,一個角度是系統正在運作什麼服務;另外一個就是
有什麼連接配接或服務可用。使用 ps 指令可以檢視處于活躍狀态的服務;使用 netstat 指令則可以顯示所有可用連接配接和服務,以及它們的狀态。netstat 還可以顯示 ps 無法顯示的、從 inetd 或 xinetd 中運作的服務,比如 telnet 等。
用 netstat 檢視所有服務
以下指令可以顯示所有的服務:
$ netstat -a
激活Internet連接配接 (伺服器和已建立連接配接的)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp 0 0 192.168.1.5:32851 nest.anthill.echid:ircd ESTABLISHED
tcp 0 0 *:nfs *:* LISTEN
tcp 0 0 *:60966 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:52694 *:* LISTEN
tcp 0 0 localhost:ipp *:* LISTEN
tcp 0 0 localhost:smtp *:* LISTEN
tcp 0 0 *:56445 *:* LISTEN
udp 0 0 *:ipp *:*
Active Unix domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
Unix 2 [ ACC ] STREAM LISTENING 1065 /tmp/ksocket-carla/klaunchertDCh2b.slave-socket
上述顯示中,"Proto"是 Protocol 的簡稱,它可以是 TCP 或 UDP。"Recv-Q"和"Send-Q"指
的是接收隊列和發送隊列,這些數字一般都應該是 0,如果不是,則表示軟體包正在隊列中堆積。這種情
況隻能在非常短的時間記憶體在,比如在 KMail 中單擊檢查郵件按鈕時,有如下顯示是正常現象:
tcp 0 593 192.168.1.5:34321 venus.euao.com:smtp ESTABLISHED
如果接收隊列持續處于阻塞狀态,那麼很有可能受到了拒絕式服務的攻擊。如果發送隊列不能被快速清除,則可能是因為有一個應用程式不能将所要發送的東西傳送完。
"Local Address" 指本機的 IP 和端口号。"Foreign Address"指所要連接配接的主機名稱和服務。
"State"指現在連接配接的狀态。三種常見的 TCP 狀态如下所示:
a) LISTEN 等待接收連接配接;
b) ESTABLISHED 一個處于活躍狀态的連接配接;
c) TIME_WAIT 一個剛被終止的連接配接。它隻持續 1 至 2 分鐘,然後就會變成 LISTEN 狀态。
由于 UDP 是無狀态的,是以其 State 欄總是空白。
持續擷取有用資訊
使用"netstat -a"指令,顯示結果可能會有數百行。其實,在這些結果中可以忽略所有"Active
Unix domain sockets"以後的内容。因為這些内容是本地内部程序之間的通信,而不是網絡連接配接。使用以下指令可以避免顯示無用資訊:
$ netstat --inet -a
" netstat --inet -a" 命 令 的 顯 示 結 果 将 隻 有 網 絡 連 接 , 包 括 所 有 正 處 在 " LISTEN" 狀态和"ESTABLISHED"狀态的。
需要特别注意的是,對于普通使用者而言,一般不需要使用 telnet 或 SMTP 服務。是以需要将其關閉,以提高系統安全性;并且要重新配置啟動檔案,以保證它們不會在下次系統啟動時自動重新啟動。
要想持續不斷地檢視随時都在更改的網絡資訊,可以使用 netstat 指令的"-c"參數,并且将結果存
入檔案中:
$ netstat --inet -a -c > netstat.txt
這時,檢視 netstat.txt 檔案即可檢查郵件服務、Web 服務和 telnet 服務等的狀态變化。
檢查網卡使用 netstat 指令的"-i"參數還可以幫助檢查網卡。該指令的顯示結果如下所示:
Kernel Interface table
eth0 1500 0 86192 0 0 0 60005 0 0 0 BMRU
lo 16436 0 434 0 0 0 434 0 0 0 LRU
在"RX-OK (Received OK)"和"TX-OK (Transmitted OK)"欄應該看到很多數字,而其它地方的
數字應該非常小。如果在"RX-ERR"或"TX-ERR"欄看到很多資料,則很有可能是網卡或網線出現了
問題。
==================================================
可以是用指令:netstat -lnp來察看系統目前監聽的端口。其中l選項表示顯示正在被監聽(listen)的端口;n選項表示直接顯示端口數字而不是通過察看/etc/service來轉換為端口名;p選項表示列出監聽的程式。例如:
netsat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:swat *:* LISTEN
tcp 0 0 *:www *:* LISTEN
tcp 0 0 *:linuxconf *:* LISTEN
tcp 0 0 *:finger *:* LISTEN
tcp 0 0 *:login *:* LISTEN
tcp 0 0 *:shell *:* LISTEN
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
udp 0 0 radiusd.301:netbios-dgm *:*
udp 0 0 radiusd.301h:netbios-ns *:*
udp 0 0 *:netbios-dgm *:*
udp 0 0 *:netbios-ns *:*
udp 0 0 *:ntalk *:*
udp 0 0 *:talk *:*
raw 0 0 *:icmp *:* 7
raw 0 0 *:tcp *:* 7
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 0 [ ACC ] STREAM LISTENING 40250 /tmp/mysql.sock
netstat -ln
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:901 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:98 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:79 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:513 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
udp 0 0 192.168.2.33:138 0.0.0.0:*
udp 0 0 192.168.2.33:137 0.0.0.0:*
udp 0 0 0.0.0.0:138 0.0.0.0:*
udp 0 0 0.0.0.0:137 0.0.0.0:*
udp 0 0 0.0.0.0:518 0.0.0.0:*
udp 0 0 0.0.0.0:517 0.0.0.0:*
raw 0 0 0.0.0.0:1 0.0.0.0:* 7
raw 0 0 0.0.0.0:6 0.0.0.0:* 7
================
Netstat指令舉例
請輸入下面的指令:
# netstat -tulpn
或者是
# netstat -npl
請看輸出結果::
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6881 0.0.0.0:* LISTEN 6908/python
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 5562/cupsd
tcp 0 0 127.0.0.1:3128 0.0.0.0:* LISTEN 6278/(squid)
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 5854/exim4
udp 0 0 0.0.0.0:32769 0.0.0.0:* 6278/(squid)
udp 0 0 0.0.0.0:3130 0.0.0.0:* 6278/(squid)
udp 0 0 0.0.0.0:68 0.0.0.0:* 4583/dhclient3
udp 0 0 0.0.0.0:6881 0.0.0.0:* 6908/python
請注意,最後一欄給出了關于程式名稱和端口的資訊。在這裡,我們解釋一下各參數的含義:
-t : 指明顯示TCP端口
-u : 指明顯示UDP端口
-l : 僅顯示監聽套接字(所謂套接字就是使應用程式能夠讀寫與收發通訊協定(
protocol
)與資料的程式)
-p : 顯示
程序
辨別符和程式名稱,每一個套接字/端口都屬于一個程式。
-n : 不進行DNS輪詢(可以加速操作)
==========================================================
linux netstat 指令詳解
功能說明:Netstat用于顯示與IP、TCP、UDP和ICMP協定相關的統計資料,一般用于檢驗本機各端口的網絡連接配接情況。
語 法:netstat [-acCeFghilMnNoprstuvVwx][-A<網絡類型>][--ip]
補充說明:利用netstat指令可讓你得知整個Linux系統的網絡情況。
參 數:
-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 的一些常用選項
·netstat –s
本選項能夠按照各個協定分别顯示其統計資料。如果我們的應用程式(如Web浏覽器)運作速度比較慢,或者不能顯示Web頁之類的資料,那麼我們就可以用本選項來檢視一下所顯示的資訊。我們需要仔細檢視統計資料的各行,找到出錯的關鍵字,進而确定問題所在。
·netstat –e
本選項用于顯示關于以太網的統計資料。它列出的項目包括傳送的資料報的總位元組數、錯誤數、删除數、資料報的數量和廣播的數量。這些統計資料既有發送的資料報數量,也有接收的資料報數量。這個選項可以用來統計一些基本的網絡流量)。
·netstat –r
本選項可以顯示關于路由表的資訊,類似于後面所講使用route print指令時看到的 資訊。除了顯示有效路由外,還顯示目前有效的連接配接。
·netstat –a
本選項顯示一個所有的有效連接配接資訊清單,包括已建立的連接配接(ESTABLISHED),也包括監聽連接配接請(LISTENING)的那些連接配接。
·netstat –n
顯示所有已建立的有效連接配接
----------------------------------------------------------------------------------------------------------------------------------------
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:沒有任何連接配接狀态
1. 列出所有端口 (包括監聽與非監聽端口)
使用netstat -a列出所有端口
# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 *:* LISTEN
udp 0 0 *:bootpc *:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0
unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socket
使用netstat -at列出所有tcp端口
# netstat -at
tcp 0 0 localhost:ipp *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
使用netstat -au列出所有UDP端口
# netstat -au
udp 0 0 *:bootpc *:*
udp 0 0 *:49119 *:*
udp 0 0 *:mdns *:*
2. 列出監聽中的Sockets使用netstat -l列出監聽中的ports
# netstat -l
使用netstat -lt列出監聽中的TCP ports
# netstat -lt
使用netstat -lu列出監聽中的UDP ports
# netstat -lu
使用netstat -lx列出監聽中的UNIX ports
# netstat -lx
unix 2 [ ACC ] STREAM LISTENING 6294 private/maildrop
unix 2 [ ACC ] STREAM LISTENING 6203 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 6302 private/ifmail
unix 2 [ ACC ] STREAM LISTENING 6306 private/bsmtp
3. 顯示所有控制協定的詳情使用
netstat -s列出所有使用中的端口【協定】詳情
# netstat -s
Ip:
11150 total packets received
1 with invalid addresses
0 forwarded
0 incoming packets discarded
11149 incoming packets delivered
11635 requests sent out
Icmp:
0 ICMP messages received
0 input ICMP message failed.
Tcp:
582 active connections openings
2 failed connection attempts
25 connection resets received
Udp:
1183 packets received
4 packets to unknown port received.
.....
使用 netstat -st / -su列出所有TCP/ UDP的端口詳情
# netstat -st
# netstat -su4. 使用netstat -p,在輸出中顯示PID和程式名
netstat -p 可以和其他netstat 選項組合使用. 它将在netstat輸出中顯示 “PID/Program Name” . 對于在調試中需要确認哪個程式使用特定的端口,這将非常有用。
# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 1 0 ramesh-laptop.loc:47212 192.168.185.75:www CLOSE_WAIT 2109/firefox
tcp 0 0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox
5. 在netstat輸出中不顯示主機名、端口号和使用者名
當你不想在netstat輸出中不顯示主機名、端口号和使用者名時,你可以使用netstat -n 選項. 它将顯示一個numbers來代替主機名、端口和使用者名.當然他也會加快輸出資訊。
# netstat -an
如果你隻是不想顯示主機名、端口号和使用者名之間的一個,你可以使用如下指令:
# netsat -a --numeric-ports
# netsat -a --numeric-hosts
# netsat -a --numeric-users6. 周期性輸出netstat資訊
每隔幾秒鐘netstat列印輸出資訊
# netstat -c
tcp 0 0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
tcp 1 1 ramesh-laptop.loc:52564 101.11.169.230:www CLOSING
tcp 0 0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED
tcp 1 1 ramesh-laptop.loc:42367 101.101.34.101:www CLOSING
^C7. 找出你的系統所不支援的協定族(Address families)netstat --verbose
在最後幾列, 你會看到如下資訊.
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.8. 使用netstat -r顯示核心路由資訊# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth2
link-local * 255.255.0.0 U 0 0 0 eth2
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
注意:
使用netstat -rn 以數字格式顯示路由資訊而不顯示主機名
9. 找出程式運作使用的哪個
Port# netstat -ap | grep ssh
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT -
tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -
Find out which process is using a particular port:
# netstat -an | grep ':80'10.
顯示網絡接口清單
# netstat -i
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 0 0 0 0 0 0 0 0 BMU
eth2 1500 0 26196 0 0 0 26883 6 0 0 BMRU
lo 16436 0 4 0 0 0 4 0 0 0 LRU
使用netstat -ie顯示某個接口的擴充資訊(類似于ifconfig):
# netstat -ie
eth0 Link encap:Ethernet HWaddr 00:10:40:11:11:11
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Memory:f6ae0000-f6b00000