close

關註 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
Proto Recv-Q Send-Q Local Address           Foreign Address         State
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
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix 0      [ ACC ]     STREAM     LISTENING     40250 /tmp/mysql.sock
================
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
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:30037         *:*                     LISTEN
tcp        0      0 localhost:ipp           *:*                     LISTEN
tcp        0      0 *:smtp                  *:*                     LISTEN
tcp6       0      0 localhost:ipp           [::]:*                  LISTEN
使用netstat -au列出所有UDP端口
# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 *:bootpc                *:*
udp        0      0 *:49119                 *:*
udp        0      0 *:mdns                  *:*
2. 列出監聽中的Sockets使用netstat -l列出監聽中的ports
# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:ipp           *:*                     LISTEN
tcp6       0      0 localhost:ipp           [::]:*                  LISTEN
udp        0      0 *:49119                 *:*
使用netstat -lt列出監聽中的TCP ports
# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:30037         *:*                     LISTEN
tcp        0      0 *:smtp                  *:*                     LISTEN
tcp6       0      0 localhost:ipp           [::]:*                  LISTEN
使用netstat -lu列出監聽中的UDP ports
# netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 *:49119                 *:*
udp        0      0 *:mdns                  *:*
使用netstat -lx列出監聽中的UNIX ports
# netstat -lx
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
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
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
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
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         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
Kernel Interface table
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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 愛在屋簷下 的頭像
    愛在屋簷下

    愛在屋簷下的部落格

    愛在屋簷下 發表在 痞客邦 留言(0) 人氣()