netstat在mac上很差用了,試試lsof

筆者在這裏主要說下netstat和lsof的使用,以及netstat在mac系統下不少功能的缺失,這個場景下,lsof是很好的補充。我的比較喜歡使用lsof,而對於netstat,即便是linux下,也推薦使用ss代替linux

netstat

netstat命令列出了關於你的計算機網絡通信的詳細信息,網絡通信包括你的計算機經過全部的端口和應用與外界talking的全部方式。因此,征服netstat能夠幫助你理解您的計算機如何和怎樣創建鏈接的。git

netstat會報告你計算機的全部激活的網絡鏈接,考慮到現代網絡設備執行的功能數量,您能夠預估到這個列表的長度。能夠超過1000行。過濾netstat的輸出對於理解你計算機激活的端口發生了什麼是最基本的,它內置的flag容許您設置options,從而能夠限制命令的輸出範圍github

netstat flags and options

要想看看netstat的所有有效的options,你能夠敲入man netstat以打開netstat使用手冊網絡

Tips: man是manual的簡稱

語法

爲了添加flags和options給netstat,你可使用下面的語法tcp

netstat [-AabdgiLlmnqrRsSvWx] [-c queue] [-f address_family] [-I interface] [-p protocol] [-w wait]
Warning: netstat在macOS下與linux下工做方式是不同的,因此在macOS下使用flags和語法會致使不指望的結果

經常使用的flags

這裏列舉了經常使用的flags:
-a 在netstat的輸出中包含服務端口(server ports)
-g 列出了和廣播鏈接(multicast connections)相關的信息
-I interface 提供指定接口(interface)的數據包數據. 全部有效的接口(interfaces) 都能經過-i flag查看, 可是en0 一般是默認的傳出網絡接口(interface)
-n 隱藏帶有名稱的遠程地址標籤,帶來的好處是:大大加快了netstat的輸出,同時只犧牲了有限的信息
-p protocol 列出與特定網絡協議(protocol)關聯的流量. 完整的協議(protocol)列表位於/etc/protocols,可是最重要的協議是udp和tcp
-r 顯示了路由表,顯示數據包是如何在網絡中路由的
-s 顯示全部協議(protocol)的網絡統計信息,不管它們是否處於活動狀態
-v 增長詳細程度,特別是經過添加一列來顯示與每一個打開的端口關聯的進程ID(pid)spa

netstat 使用實例

  • $ netstat -apv TCP

此命令僅返回Mac上的TCP鏈接,包括打開的端口和活動的端口。它還使用詳細輸出,列出與每一個鏈接關聯的PID計算機網絡

  • $ netstat -a | grep -i "listen"

輸出帶有關鍵字「listen」的數據並查找結果3d

netstat的macOS版本缺乏許多用戶指望的功能。因此,它在macOS上不如在Windows上有用。這時,lsof命令替代netstat提供了許多netstat缺乏的功能。用lsof補充netstatcode

lsof

lsof顯示了當前在任何應用程序中打開的任何文件,您還可使用它來檢查與應用程序相關的開放端口(port), 運行lsof -i, 您會看到全部與Internet通訊的應用程序的列表
server

lsof flags and options

顯示每一個打開的文件或互聯網鏈接一般很冗長。這就是lsof附帶flags用以限制特定結果的緣由。下面的是最重要的

經常使用的flags

這裏列舉了經常使用的flags:

-i 展現了全部打開的網絡鏈接(open network connections) 和使用這個鏈接(connection)的進程(process)的名稱. 若是增長一個4,如-i4, 將展現IPv4鏈接; 如-i6 將展現IPv6鏈接.
-i flag 還能夠繼續擴展以指定更多詳細信息,-iTCP或者-iUDP將返回僅是TCP或UDP的連接. -iTCP:25將返回端口(port)是25的TCP鏈接. 還能夠指定端口範圍,如 -iTCP:25-50.
使用 -i@1.2.3.4 將返回ip是1.2.3.4的IPv4地址. IPv6也是同樣的. @符號也能夠以一樣的方式用於指定hostname,
-s 強制顯示文件大小(file size). 可是和-i成對出現時,它的含義就不一樣了:它容許用戶指定要返回的命令的協議和狀態
-p 將lsof限制爲特定的進程ID(PID)。可使用-p 123,456,789等設置多個PID。進程ID也能夠用^排除,如123,^456,它專門排除PID 456
-P 禁用端口號到端口名的轉換,從而加快了輸出速度
-n 禁止將網絡號轉換爲主機名(network numbers to host names)。與上面的-P一塊兒使用時,它能夠顯着加快lsof的輸出
-u user 僅返回指定用戶擁有的命令

lsof 使用實例

  • $ lsof -nP -iTCP@lsof.itap:513

這個看起來複雜的命令列出了全部主機名爲lsof.itap和端口513的TCP鏈接。同時使用-P無需將名稱鏈接(connecting names)到IP地址和端口,從而使該命令的運行速度明顯加快

  • $ lsof -iTCP -sTCP:LISTEN

此命令返回狀態爲LISTEN的每一個TCP鏈接,顯示Mac上全部打開的TCP端口。它還列出了與那些打開的端口關聯的進程。這是對netstat的重大升級,netstat最多列出了PID

  • $ sudo lsof -i -u^$(whoami)

此命令返回當前登陸用戶不擁有的全部鏈接。使用sudo運行,能夠查看不屬於您的任務。在不使用sudo的狀況下運行此命令將返回一個空列表

其餘網絡命令

檢查網絡的命令還有arp,ping和ipconfig

原味地址:netstat在mac上很差用了,試試lsof,飛起

相關文章
相關標籤/搜索