本節主要講述 Windows 系統下,nestat、tasklist、tskill 三個 CMD 命令的參數,及使用方法;以及如何利用三者結合查看進程信息和結束進程。敬請親們參閱,希望能對親們有所幫助,如有不足之處,敬請大神指正,不勝感激!
需要用到的主要命令:
- netstat
- tasklist
- taskkill
- tskill
一、命令參數
啟動命令行工具,在命令行窗口界面依次輸入以下三個命令,可查看對應的命令的參數說明,及其使用方法。
- 命令:netstat /?
- 命令:tasklist /?
- 命令:taskkill /?
- 命令:tskill /?
二、四者的使用方法
- netstat 命令:在Internet RFC 標准中,Netstat 的定義是: Netstat 是在內核中訪問網絡及相關信息的程序,它能提供TCP 連接,TCP 和UDP 監聽,進程內存管理的相關報告。
netstat 常用的實戰命令:
netstat -a:顯示一個所有的有效連接信息列表,包括已建立的連接(ESTABLISHED ),也包括監聽連接請求(LISTENING )的那些連接,斷開連接(CLOSE_WAIT )或者處於聯機等待狀態的(TIME_WAIT )等。常用來獲取系統開放的端口。聽聞可用其檢查系統上有沒有被安裝木馬(這方面暫無研究,若親知曉,勞煩留言告知)。
上圖中的狀態即為網絡連接狀態,因而在此將 TCP 狀態機圖附上,供親們參考,如下圖所示:
網絡連接狀態對應釋義如下所示:
- LISTEN:首先服務端需要打開一個socket進行監聽,狀態為LISTEN./* The socket is listening for incoming connections. 偵聽來自遠方TCP端口的連接請求 */SYN_SENT:客戶端通過應用程序調用connect進行active open.於是客戶端tcp發送一個SYN以請求建立一個連接.之后狀態置為SYN_SENT./*The socket is actively attempting to establish a connection. 在發送連接請求后等待匹配的連接請求 */
- SYN_RECV:服務端應發出ACK確認客戶端的 SYN,同時自己向客戶端發送一個SYN. 之后狀態置為SYN_RECV/* A connection request has been received from the network. 在收到和發送一個連接請求后等待對連接請求的確認 */
- ESTABLISHED: 代表一個打開的連接,雙方可以進行或已經在數據交互了。/* The socket has an established connection. 代表一個打開的連接,數據可以傳送給用戶 */
- FIN_WAIT1:主動關閉(active close)端應用程序調用close,於是其TCP發出FIN請求主動關閉連接,之后進入FIN_WAIT1狀態./* The socket is closed, and the connection is shutting down. 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認 */
- CLOSE_WAIT:被動關閉(passive close)端TCP接到FIN后,就發出ACK以回應FIN請求(它的接收也作為文件結束符傳遞給上層應用程序),並進入CLOSE_WAIT./* The remote end has shut down, waiting for the socket to close. 等待從本地用戶發來的連接中斷請求 */
FIN_WAIT2:主動關閉端接到ACK后,就進入了 FIN-WAIT-2 ./* Connection is closed, and the socket is waiting for a shutdown from the remote end. 從遠程TCP等待連接中斷請求 */ - LAST_ACK:被動關閉端一段時間后,接收到文件結束符的應用程 序將調用CLOSE關閉連接。這導致它的TCP也發送一個 FIN,等待對方的ACK.就進入了LAST-ACK ./* The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 等待原來發向遠程TCP的連接中斷請求的確認 */
- TIME_WAIT:在主動關閉端接收到FIN后,TCP 就發送ACK包,並進入TIME-WAIT狀態。/* The socket is waiting after close to handle packets still in the network.等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認 */
- CLOSING: 比較少見./* Both sockets are shut down but we still don’t have all our data sent. 等待遠程TCP對連接中斷的確認 */
- CLOSED: 被動關閉端在接受到ACK包后,就進入了closed的狀態。連接結束./* The socket is not being used. 沒有任何連接狀態 */
- UNKNOWN: 未知的Socket狀態。/* The state of the socket is unknown. */
PS:
SYN: (同步序列編號,Synchronize Sequence Numbers)該標志僅在三次握手建立TCP連接時有效。表示一個新的TCP連接請求
ACK: (確認編號,Acknowledgement Number)是對TCP請求的確認標志,同時提示對端系統已經成功接收所有數據
FIN: (結束標志,FINish)用來結束一個TCP回話.但對應端口仍處於開放狀態,准備接收后續數據
netstat -e:顯示關於以太網的統計數據,可以用來統計一些基本的網絡流量。列出的項目包括傳送數據報的總字節數、錯誤數、刪除數、數據報的數量和廣播的數量。這些統計數據既有發送的數據報數量,也有接收的數據報數量
若接收錯和發送錯接近為零或全為零,則網絡的接口無問題。但當這兩個字段有 100 個以上的出錯分組時就可認為是高出錯率了。高發送錯表示本地網絡飽和或在主機與網絡之間有不良的物理連接;高的接收錯表示整體網絡飽和或本地主機過載或物理連接有問題,可以用 Ping 命令統計誤碼率,進一步確定故障的程度。
netstat -n:顯示所有已建立的有效連接(個人覺得有些類似於 netstat -a,只是機器名變為了 IP)
netstat -p proto:顯示有關協議的詳細信息
netstat -r:顯示關於路由表的信息,類似於后面所講使用route print 命令時看到的 信息。除了顯示有效路由外,還顯示當前有效的連接
netstat -s:按照各個協議分別顯示其統計數據。如果你的應用程序(如 Web 瀏覽器)運行速度比較慢或無法顯示 Web 頁的數據,可用本選項來查看一下所顯示的信息,並仔細查看統計數據的各行,找出出錯的關鍵字以確定問題所在
- tasklist 命令:是一個用來顯示運行在本地或遠程計算機上的所有進程的命令行工具。可以用於結束一個或多個任務或進程(根據進程 ID 或圖像名來結束進程,結束進程命令 taskkill 或 tskill)。
tasklist 篩選器 /FI 命令選項參數列表:
tasklist 常用的實戰命令:
tasklist:查看本機進程(在任務管理器被禁用時非常有效)
tasklist /svc:查看系統進程提供的服務,及服務是否正常
tasklist /m kernel32.dll:查看調用 DLL 模塊文件的進程列表,本例為調用 kernel32.dll 文件的所有進程
tasklist /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq RUNNING":使用篩選器查找指定的進程,本例為查看系統中運行狀態的非"SYSTEM"用戶的所有進程
- taskkill 命令:使用該命令按照進程 ID (PID) 或映像名稱終止任務。此命令使用方法與 tasklist 有些類似,在此不再贅述,親們可依據前面提供的命令參數,自行實踐,原諒我偷懶一下 ^_^
- tskill 命令:通過進程名稱(不包含后綴名)或者進程 PID 關閉進程。關閉進程后,進程對應的未保存的數據不再保存。
tskill常用實戰命令演示如下所示:
三、組合應用腳本
實現功能:編寫批處理腳本,通過傳參(進程名稱或者 PID )終止相應的進程,批處理命令腳本編寫提示如下:
- 獲取並保存進程相關信息列表:通過傳參,結合命令 tasklist | findstr 參數 > closepro.txt 命令,將所得結果輸出至文本文件 closepro.txt 保存
- 循環處理相關進程信息,獲取其 PID:參考命令 FOR /F "tokens=2 delims= " %%i in (closepro.txt) do (@echo %%i)
- 利用 tskill:參考命令 tskill %%i (此命令要嵌套在第 2 步中的 do 語句塊中)
至此,netstat、tasklist、taskkill、tskill 四個與進程相關的命令已全部介紹完畢。
最后,非常感謝親的駐足,希望此文能對親有所幫助,熱烈歡迎親點評 ^_^