Linux系統(tǒng)中,ss命令可用于查看系統(tǒng)的socket的狀態(tài)。
創(chuàng)新互聯(lián)服務項目包括濮陽網(wǎng)站建設、濮陽網(wǎng)站制作、濮陽網(wǎng)頁制作以及濮陽網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,濮陽網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到濮陽省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
1、命令格式:
ss [參數(shù)]
ss [參數(shù)] [過濾]
2、命令功能:
ss(Socket Statistics的縮寫)命令可以用來獲取 socket統(tǒng)計信息,此命令輸出的結果類似于
netstat輸出的內容,但它能顯示更多更詳細的 TCP連接狀態(tài)的信息,且比 netstat 更快速高效。它使用了 TCP協(xié)議棧中
tcp_diag(是一個用于分析統(tǒng)計的模塊),能直接從獲得第一手內核信息,這就使得 ss命令快捷高效。在沒有
tcp_diag,ss也可以正常運行。
3、命令參數(shù):
-h, --help 幫助信息
-V, --version 程序版本信息
-n, --numeric 不解析服務名稱
-r, --resolve 解析主機名
-a, --all 顯示所有套接字(sockets)
-l, --listening 顯示監(jiān)聽狀態(tài)的套接字(sockets)
-o, --options 顯示計時器信息
-e, --extended 顯示詳細的套接字(sockets)信息
-m, --memory 顯示套接字(socket)的內存使用情況
-p, --processes 顯示使用套接字(socket)的進程
-i, --info 顯示 TCP內部信息
-s, --summary 顯示套接字(socket)使用概況
-4, --ipv4 僅顯示IPv4的套接字(sockets)
-6, --ipv6 僅顯示IPv6的套接字(sockets)
-0, --packet 顯示 PACKET 套接字(socket)
-t, --tcp 僅顯示 TCP套接字(sockets)
-u, --udp 僅顯示 UCP套接字(sockets)
-d, --dccp 僅顯示 DCCP套接字(sockets)
-w, --raw 僅顯示 RAW套接字(sockets)
-x, --unix 僅顯示 Unix套接字(sockets)
-f, --family=FAMILY 顯示 FAMILY類型的套接字(sockets),F(xiàn)AMILY可選,支持 unix, inet, inet6, link, netlink
-A, --query=QUERY, --socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D, --diag=FILE 將原始TCP套接字(sockets)信息轉儲到文件
-F, --filter=FILE 從文件中都去過濾器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
4、使用實例:
ss命令,它是 socket statistic的縮寫,用于統(tǒng)計Linux系統(tǒng)中socket連接相關的信息,和其他的工具相比,ss命令可以顯示更多關于 TCP和狀態(tài)相關的信息
在Linux系統(tǒng)中,默認已經(jīng)安裝了 ss 命令,下面介紹該命令常用的一些功能
netstat 命令和 ss 命令比較類似,主要功能也是統(tǒng)計系統(tǒng)中socket相關信息,和 netstat相比,ss 命令在跟蹤TCP連接和套接字方面速度更快,功能更強大,下面是 ss 和 netstat 統(tǒng)計速度的對比
從上面例子可以看出,ss 統(tǒng)計439條socket信息花費了0.014s, netstat 統(tǒng)計366條socket信息花費了0.029s,ss 統(tǒng)計信息的速度更快,所以實際使用中一般都是用 ss 替代 netstat
列出當前已經(jīng)連接、關閉、等待的TCP連接,當系統(tǒng)中已經(jīng)存在大量的套接字連接的時候,通過查看套接字摘要信息可以快速了解系統(tǒng)中套接字的總體情況
當不使用任何選項時,ss將顯示已建立連接的處于非監(jiān)聽狀態(tài)的套接字列表,由于原始結果太長,下面的例子只截取了一部分
上面例子中列說明:
socket類型,在上面的例子中,有 TCP、u_str(unix流)等套接字
套接字處于什么狀態(tài),下面是TCP套接字的所有狀態(tài)及說明, 實際上就是TCP的三次握手和四次揮手的所有狀態(tài)
在 ESTAB 狀態(tài)下,表示內核中還有多少字節(jié)的數(shù)據(jù)沒有被上層應用讀取,如果這里數(shù)值很大,應用程序可能發(fā)生了阻塞
在 ESTAB 狀態(tài)下,表示內核發(fā)送隊列中還有多少字節(jié)的數(shù)據(jù)沒有收到確認的ACK,如果這個數(shù)值很大,表明接收端的接收以及處理需要加強
本地地址和端口
遠程地址和端口
使用 -l 選項可以列出所有處于偵聽(LISTEN)狀態(tài)的套接字
使用 -a 選項可以列出所有的狀態(tài)的套接字,由于所有的套接字列表太多,下面的例子中只列出了少許的數(shù)據(jù)
可以通過 TCP、UDP、Unix、Raw、IPV4、IPV6 這些協(xié)議類型顯示套接字,下面以常用的TCP/UDP/IPV4協(xié)議舉例說明
使用 -t 選項(TCP), 讓結果只列出TCP套接字
使用 -u 選項(UCP), 讓結果只列出UCP套接字
使用 -4 選項(IPV4), 讓結果只列出IPV4的套接字
有時我們查詢到指定的套接字了,但是無法知道套接字是哪個應用程序在使用,這時可以使用 -p 選項
上面的例子中,從 Local Address:Port 列可以知道,這個套接字時mysql在使用,如果沒有加 -p 選項的話,這里顯示的時mysql的端口號3306
有時候我們啟動應用程序的時候,發(fā)現(xiàn)端口已經(jīng)被占用了,此時先要查找出占用目標端口的應用程序,然后關閉它,再啟動我們自己的應用程序
上面的例子中,sport 表示源,對應的 dport 表示目標,命令查找端口3306是被哪個進程使用了,最終發(fā)現(xiàn)3306是mysql在使用
通過端口篩選還支持小于、大于、小于等于、大于等于、不等于,具體的說明如下:
上面的例子中篩選出進程名為 mysql 的套接字, 執(zhí)行的命令中 -n 選項是不解析服務名字,加了此選項就顯示成端口了,不會解析成服務名稱了
下面例子是篩選出目標IP地址為27.38.240.99的套接字,dst 是目標地址
下面例子是篩選出源IP地址為192.168.0.99的套接字,src 是源地址
前言
如何確定端口是否在Linux或類unix系統(tǒng)下占用?怎么檢查哪些端口正在Linux服務器上被占用?Linux系統(tǒng)如何使用命令行檢查端口是否已經(jīng)在占用?
查詢哪些端口正在服務器的網(wǎng)絡接口上被占用是非常重要的工作。您需要查詢打開端口以檢測入侵。除了入侵之外,出于故障排除的目的,可能有必要檢查服務器上的其他應用程序是否已經(jīng)使用了某個端口。例如,您可以在同一系統(tǒng)上安裝Apache和Nginx服務器。因此,有必要了解Apache或Nginx是否使用TCP端口80或443。本教程提供了使用netstat、nmap和lsof命令查詢正在使用的端口并查看正在使用該端口的應用程序的步驟。
如何查詢端口是否在使用中:
檢查Linux上被占用的端口和應用程序:
Step1: 打開終端
Step2: 執(zhí)行以下任意一條命令查看被占用的端口
查看端口22是否被占用:
較新版本的Linux使用以下查詢命令:
方法1: 使用lsof命令查詢占用端口
先安裝lsof命令
RHEL/CentOS系統(tǒng):
Debian/Ubuntu系統(tǒng)安裝lsof命令
使用語法如下
OpenBSD
看到類似這樣的輸出結果:
sshd是進程名字
TCP 22表示sshd進程占用了TCP 22端口,正在監(jiān)聽中(LISTEN)
1243表示sshd進程號
方法二:使用netstat查詢被占用的端口號
較新的Linux發(fā)行版已經(jīng)不再默認集成netstat命令,而是使用新命令ss取代了。
如果要使用netstat命令,需要手動安裝net-tools套件:
RHEL/CentOS系統(tǒng)安裝net-tools套件,執(zhí)行以下命令:
Debian/Ubuntu系統(tǒng)執(zhí)行以下命令:
您可以使用netstat查詢被占用的端口和應用程序,如下所示。
執(zhí)行以下命令查詢:
在Linux上,netstat命令已經(jīng)廢棄了一段時間。因此,你需要使用ss命令如下:
或者:
其中ss命令選項如下:
-t : 只顯示Linux上的TCP套接字
-u : 在Linux上只顯示UDP套接字
-l : 監(jiān)聽套接字。例如,TCP端口22由SSHD服務器打開。
-p : 列出打開套接字的進程名
-n : 不要解析服務名稱,即不要使用DNS
FreeBSD/MacOS X netstat 語法
FreeBSD/MacOS X查詢被占用的端口
或者
OpenBSD netstat 語法
OpenBSD查詢被占用的端口
或者
方法三:使用`nmap`命令查詢Linux被占用的端口
默認情況下,Linux發(fā)行版并沒有默認安裝nmap命令,
CentOS系統(tǒng)安裝nmap
Ubuntu系統(tǒng)安裝nmap
使用nmap查詢本機被占用的端口
查詢Linux系統(tǒng)被占用的UDP端口
查詢Linux系統(tǒng)被占用的TCP端口
你可以同時查詢被占用的TCP和UDP端口
結論:
本教程解釋了如何在Linux系統(tǒng)上使用命令行查詢TCP或者UDP端口是否被占用。有關更多信息,請參見nmap命令和lsof命令頁面