如何在linux上使用netstat

Linux netstat命令為您提供了有關網路連線、正在使用的埠以及使用它們的程序的資訊寶庫。學習如何使用它。...

Linux netstat命令為您提供了有關網路連線、正在使用的埠以及使用它們的程序的資訊寶庫。學習如何使用它。

埠、程序和協議

可以連線網路套接字,也可以等待連線。連線使用網路協議,如傳輸控制協議(TCP)或使用者資料報協議UDP。他們使用網際網路協議地址和網路埠建立連線。

sockets一詞可能會讓人聯想到導線或電纜的物理連線點,但在本文中,socket是一種用於處理網路資料連線一端的軟體結構。

套接字有兩種主要狀態:它們要麼已連線並促進正在進行的網路通訊,要麼正在等待傳入連線連線到它們。還有其他一些狀態,例如套接字在遠端裝置上建立連線的過程中處於中間狀態,但拋開瞬時狀態不談,可以將套接字視為正在連線或正在等待(通常稱為偵聽)。

偵聽套接字稱為伺服器,請求與偵聽套接字連線的套接字稱為客戶機。這些名稱與硬體或計算機角色無關。它們只是在連線的每一端定義每個套接字的角色。

netstat命令允許您發現哪些套接字已連線,哪些套接字正在偵聽。也就是說,它告訴您哪些埠正在使用,哪些程序正在使用它們。它可以顯示路由表和有關網路介面和多播連線的統計資訊。

netstat的功能隨著時間的推移在不同的Linux實用程式中得到了複製,比如ip和ss。這仍然是值得了解的所有網路分析命令,因為它是所有Linux和Unix作業系統,甚至在Windows和Mac。

下面是如何使用它,並附有示例命令。

列出所有套接字

-a(all)選項使netstat顯示所有連線的和等待的套接字。這個命令可能會產生一個很長的列表,所以我們將它匯入較少的列表中。

netstat -a | less

如何在linux上使用netstat

清單包括TCP(IP)、TCP6(IPv6)和UDP套接字。

如何在linux上使用netstat

終端視窗中的環繞使得看到正在發生的事情有點困難。下面是該列表中的幾個部分:

Active Internet connecti*** (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:domain 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN tcp 0 0 localhost:**tp 0.0.0.0:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN . . . Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 24 [ ] DGRAM 12831 /run/systemd/journal/dev-log unix 2 [ ACC ] STREAM LISTENING 24747 @/tmp/dbus-zH6clYmvw8 unix 2 [ ] DGRAM 26372 /run/user/1000/systemd/notify unix 2 [ ] DGRAM 23382 /run/user/121/systemd/notify unix 2 [ ACC ] SEQPACKET LISTENING 12839 /run/udev/control

“Active Internet”部分列出了連線的外部連線和偵聽遠端連線請求的本地套接字。也就是說,它列出了已經(或將要)建立到外部裝置的網路連線。

“UNIX域”部分列出了已連線和正在偵聽的內部連線。換句話說,它列出了計算機中不同應用程式、程序和作業系統元素之間建立的連線。

“活動Internet”列包括:

  • Proto:這個套接字使用的協議(例如,TCP或UDP)。
  • Recv-Q:接收佇列。這些是已接收並緩衝的傳入位元組,等待使用此連線的本地程序讀取和使用它們。
  • Send-Q:傳送佇列。這將顯示準備從傳送佇列傳送的位元組。
  • 本地地址:連線的本地端的地址詳細資訊。預設情況下,netstat顯示地址的本地主機名,以及埠的服務名稱。
  • 外部地址:連線遠端端的地址和埠號。
  • 狀態:本地套接字的狀態。對於UDP套接字,這通常為空。見下面的狀態表。

對於TCP連線,狀態值可以是以下值之一:

  • 聽:只有伺服器端。套接字正在等待連線請求。
  • SYN-SENT:僅客戶端。此套接字已發出連線請求,正在等待是否接受。
  • SYN-RECEIVED:僅伺服器端。此套接字正在接受連線請求後等待連線確認。
  • 建立:伺服器和客戶端。伺服器和客戶機之間建立了工作連線,允許在兩者之間傳輸資料。
  • FIN-WAIT-1:伺服器和客戶端。此套接字正在等待來自遠端套接字的連線終止請求,或等待先前從該套接字傳送的連線終止請求的確認。
  • FIN-WAIT-2:伺服器和客戶端。此套接字正在等待來自遠端套接字的連線終止請求。
  • 關閉等待:伺服器和客戶端。此套接字正在等待本地使用者的連線終止請求。
  • 關閉:伺服器和客戶端。此套接字正在等待來自遠端套接字的連線終止請求確認。
  • LAST-ACK:伺服器和客戶端。此套接字正在等待它傳送到遠端套接字的連線終止請求的確認。
  • 等待時間:伺服器和客戶端。這個套接字向遠端套接字傳送了一個確認,讓它知道它收到了遠端套接字的終止請求。它現在正在等待確認是否收到了確認。
  • 關閉:沒有連線,因此套接字已終止。

“Unix域”列包括:

  • Proto:這個套接字使用的協議。它將是“unix”
  • RefCnt:引用計數。連線到此套接字的附加程序數。
  • 標誌:這通常被設定為ACC,表示SO\u ACCEPTON,這意味著套接字正在等待連線請求。所以W表示有資料等待讀取。所以顯示為N的\u NOSPACE表示沒有空間將資料寫入套接字(即傳送緩衝區已滿)。
  • 型別:插座型別。請參閱下面的型別表。
  • 狀態:套接字的狀態。請參見下面的狀態表。
  • I節點:與此套接字關聯的檔案系統inode。
  • Path:到套接字的檔案系統路徑。

Unix域套接字型別可以是以下型別之一:

  • DGRAM:套接字正在資料報模式下使用,使用固定長度的訊息。資料報既不能保證可靠、排序,也不能不被耦合。
  • 流:此套接字是流套接字。這是常見的“普通”型別的套接字連線。這些套接字的設計目的是提供可靠的分組順序(順序)傳遞。
  • RAW:此套接字正在用作原始套接字。原始套接字在OSI模型的網路級別執行,並且不從傳輸級別引用TCP和UDP標頭。
  • RDM:此套接字位於可靠傳遞訊息連線的一端。
  • SEQPACKET:此套接字作為一個順序分組套接字執行,這是提供可靠、有序和未耦合的包傳遞的另一種手段。
  • 資料包:原始介面訪問套接字。資料包套接字用於在OSI模型的裝置驅動程式(即資料鏈路層)級別接收或傳送原始資料包。

Unix域套接字狀態可以是以下狀態之一:

  • 空閒:此套接字未分配。
  • 偵聽:此套接字正在偵聽傳入的連線請求。
  • 連線:此插座正在連線。
  • 已連線:已建立連線,並且套接字能夠接收和傳輸資料。
  • 斷開連線:正在終止連線。

哇,這是很多資訊!許多netstat選項以某種或那樣的方式最佳化結果,但它們不會太多地更改內容。我們來看看。

按型別列出套接字

netstat-a命令可以提供比您需要看到的更多的資訊。如果您只想或需要檢視TCP套接字,可以使用-t(TCP)選項將顯示限制為僅顯示TCP套接字。

netstat -at | less

如何在linux上使用netstat

顯示量大大減少。列出的幾個套接字都是TCP套接字。

如何在linux上使用netstat

-u(UDP)和-x(UNIX)選項的行為方式類似,將結果限制為命令列上指定的套接字型別。下面是正在使用的-u(UDP)選項:

netstat -au | less

如何在linux上使用netstat

僅列出UDP套接字。

如何在linux上使用netstat

按狀態列出套接字

要檢視處於偵聽或等待狀態的套接字,請使用-l(偵聽)選項。

netstat -l | less

如何在linux上使用netstat

列出的套接字是處於偵聽狀態的套接字。

如何在linux上使用netstat

這可以與-t(TCP,-u(UDP)和-x(UNIX)選項相結合,以進一步在感興趣的套接字上使用。讓我們來查詢偵聽TCP套接字:

netstat -lt | less

如何在linux上使用netstat

現在,我們只看到TCP偵聽套接字。

如何在linux上使用netstat

按協議列出的網路統計資訊

要檢視協議的統計資訊,請使用-s(statistics)選項並傳入-t(TCP)、-u(UDP)或-x(UNIX)選項。如果您只是單獨使用-s(statistics)選項,您將看到所有協議的統計資訊。讓我們檢查一下TCP協議的統計資訊。

netstat -st | less

如何在linux上使用netstat

TCP連線的統計資訊集合以較少的格式顯示。

如何在linux上使用netstat

顯示程序名稱和PID

使用套接字檢視程序的程序ID(PID)以及該程序的名稱非常有用。p(程式)選項就是這樣做的。讓我們看看對於使用處於偵聽狀態的TCP套接字的程序,PIDs和程序名是什麼。我們使用sudo來確保接收所有可用的資訊,包括通常需要root許可權的任何資訊。

sudo netstat -p -at

如何在linux上使用netstat

以下是格式化表中的輸出:

Active Internet connecti*** (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 localhost:domain 0.0.0.0:* LISTEN 6927/systemd-resolv tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 751/sshd tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN 7687/cupsd tcp 0 0 localhost:**tp 0.0.0.0:* LISTEN 1176/master tcp6 0 0 [::]:ssh [::]:* LISTEN 751/sshd tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN 7687/cupsd tcp6 0 0 ip6-localhost:**tp [::]:* LISTEN 1176/master

我們有一個額外的列叫做“PID/program name”,這個列列出了使用每個套接字的程序的PID和名稱。

列出數字地址

我們可以採取的另一個消除歧義的步驟是將本地和遠端地址顯示為IP地址,而不是它們的解析域名和主機名。如果使用-n(數字)選項,IPv4地址將以點十進位制格式顯示:

sudo netstat -an | less

如何在linux上使用netstat

IP地址顯示為數字值。還顯示了埠號,用冒號“:”與IP地址隔開。

如何在linux上使用netstat

IP地址127.0.0.1表示套接字繫結到本地計算機的環回地址。您可以將IP地址0.0.0.0視為本地地址的“預設路由”,外部地址的“任意IP地址”。顯示為“:”的IPv6地址也都是零地址。

可以很容易地檢查列出的埠,以瞭解其通常用途:

  • 22:這是安全Shell(SSH)偵聽埠。
  • 25:這是簡單郵件傳輸協議(SMTP)偵聽埠。
  • 53:這是域名系統(DNS)偵聽埠。
  • 68:這是動態主機配置協議(DHCP)偵聽埠。
  • 631:這是通用UNIX列印系統(CUPS)偵聽埠。

相關:127.0.0.1和0.0.0.0之間有什麼區別?

顯示路由表

r(route)選項顯示核心路由表。

sudo netstat -r

如何在linux上使用netstat

下面是整潔表格中的輸出:

Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default Vigor.router 0.0.0.0 UG 0 0 0 enp0s3 link-local 0.0.0.0 255.255.0.0 U 0 0 0 enp0s3 192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3

下面是這些列的含義:

  • 目標:目標網路或目標主機裝置(如果目標不是網路)。
  • 閘道器:閘道器地址。如果未設定閘道器地址,則此處會顯示星號“*”。
  • Genmask:路由的子網掩碼。
  • 標誌:見下面的標誌表。
  • 此路由上TCP連線的預設最大段大小這是一個TCP段中可以接收的最大資料量。
  • 視窗:此路由上TCP連線的預設視窗大小,指示在接收緩衝區滿之前可以傳輸和接收的資料包數。實際上,資料包由接收應用程式使用。
  • 初始往返時間。核心引用此值,以便對響應緩慢的遠端連線的TCP引數進行動態調整。
  • Iface:網路介面,透過該路由傳送的資料包從該介面傳輸。

標誌值可以是以下值之一:

  • U:路線是向上的。
  • H:目標是一個主機,也是這個路由上唯一可能的目的地。
  • G:使用閘道器。
  • R:恢復動態路由的路由。
  • D:由路由守護程序動態安裝。
  • M:路由守護程式在接收到Internet控制訊息協議(ICMP)資料包時修改。
  • A:由自動DNS和DHCP配置檔案生成器addrconf安裝。
  • C:快取條目。
  • !:拒絕路由。

查詢程序使用的埠

如果我們透過grep管道傳輸netstat的輸出,我們就可以按名稱搜尋程序,並標識它正在使用的埠。我們使用前面使用的-a(all)、-n(numeric)和-p(program)選項,並搜尋“sshd”

sudo netstat -anp | grep "sshd"

如何在linux上使用netstat

grep找到了目標字串,我們看到sshd守護程序正在使用埠22。

當然,我們也可以反過來做。如果我們搜尋“:22”,我們可以找出哪個程序正在使用該埠(如果有的話)。

sudo netstat -anp | grep ":22"

如何在linux上使用netstat

這次grep找到“:22”目標字串,我們看到使用這個埠的程序是sshd守護程序,程序ID 751。

列出網路介面

i(interfaces)選項將顯示netstat可以發現的網路介面表。

sudo netstat -i

如何在linux上使用netstat

以下是更清晰的輸出:

Kernel Interface table Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg enp0s3 1500 4520671 0 0 0 4779773 0 0 0 BMRU lo 65536 30175 0 0 0 30175 0 0 0 LRU

這就是這些列的含義:

  • Iface:介面的名稱。enp0s3介面是與外界的網路介面,lo介面是環回介面。環回介面允許程序使用網路協議在計算機內進行內部通訊,即使計算機未連線到網路。
  • MTU:最大傳輸單位(MTU)。這是可以傳送的最大的“資料包”。它由一個包含路由和協議標誌的頭、其他元資料以及實際傳輸的資料組成。
  • RX-OK:接收的資料包數,無錯誤。
  • RX-ERR:接收到的資料包數,有錯誤。我們希望這個越低越好。
  • RX-DRP:丟棄(即丟失)的資料包數。我們也希望這是儘可能低。
  • RX-OVR:接收時由於溢位而丟失的資料包數。這通常意味著接收緩衝區已滿,無法接受更多資料,但接收到更多資料,必須丟棄。這個數字越低越好,零是完美的。
  • TX-OK:傳輸的資料包數,無錯誤。
  • RX-ERR:傳輸的資料包數,有錯誤。我們希望這是零。
  • RX-DRP:傳輸時丟棄的資料包數。理想情況下,這應該是零。
  • RX-OVR:傳輸時由於溢位而丟失的資料包數。這通常意味著傳送緩衝區已滿,無法接受更多資料,但更多資料已準備好傳輸,必須丟棄。
  • 弗萊格:旗幟。請參見下面的標誌表。

這些標誌表示以下內容:

  • 廣播地址正在使用中。
  • L:這個介面是一個環回裝置。
  • M:所有的資料包都被接收到了(也就是說,在混雜模式下)。任何東西都不會被過濾或丟棄。
  • O:此介面的地址解析協議(ARP)已關閉。
  • P:這是點對點(PPP)連線。
  • R:介面正在執行。
  • U:介面打開了。

列出多播組成員身份

簡單地說,多播傳輸使資料包只發送一次,而不管接收者的數量如何。例如,對於像影片流這樣的服務,從傳送者的角度來看,這將極大地提高效率。

g(groups)選項使netstat列出每個介面上套接字的多播組成員身份。

sudo netstat -g

如何在linux上使用netstat

這些列非常簡單:

  • 介面:套接字正在傳輸的介面的名稱。
  • RefCnt:引用計數,它是附加到套接字的程序數。
  • 組:多播組的名稱或識別符號。

新來的孩子們

route、ip、ifconfig和ss命令可以提供netstat能夠向您展示的許多內容。它們都是很棒的命令,值得一看。

我們將重點放在netstat上,因為它是普遍可用的,無論您使用的是哪種類似Unix的作業系統,甚至是不太熟悉的作業系統。

  • 發表於 2021-04-14 19:17
  • 閱讀 ( 48 )
  • 分類:網際網路

你可能感興趣的文章

關於javarmi註冊中心以及如何使用它的所有內容

... 使用netstat命令檢查指定埠上是否確實存在偵聽器: ...

  • 發佈於 2021-03-12 15:58
  • 閲讀 ( 65 )

在linux上保護隱私的10大技巧

... netstat -lt ...

  • 發佈於 2021-03-13 08:16
  • 閲讀 ( 59 )

4您應該注意的linux安全問題

...殭屍的殭屍客戶端。 使用包嗅探器(例如netstat)來檢測指向同一個未識別地址的傳出流量。 ...

  • 發佈於 2021-03-15 15:54
  • 閲讀 ( 48 )

如何在linux上安裝和使用powershell

... 在本文中,我將向您展示如何在Linux上安裝、執行和使用PowerShell! ...

  • 發佈於 2021-03-16 02:34
  • 閲讀 ( 53 )

什麼在佔用我的頻寬?監視家庭網路使用的5個技巧

... 4使用netstat發現網路問題 ...

  • 發佈於 2021-03-18 05:41
  • 閲讀 ( 50 )

關於linux最常見的問題。。。回答

...也是免費的。不僅如此,你還可以自由地看看這些程式是如何**的。如果您有專業知識,您可以使用此程式碼建立自己的軟體。 ...

  • 發佈於 2021-03-25 12:19
  • 閲讀 ( 59 )

如何在linux中新增使用者

想在Linux系統上新增使用者但不知道如何新增?在Linux上使用命令列介面管理使用者無疑是一項複雜的工作。而對於初學者來說,即使新增新使用者也是一場噩夢。 ...

  • 發佈於 2021-03-26 23:29
  • 閲讀 ( 69 )

如何從windows7升級到linux

...引導到Linux並安裝它之前,您可能需要先備份檔案。無論如何,備份關鍵檔案總是個好主意。 相關:初學者的最佳Linux發行版 啟動媒體並在安裝前試用 建立介質後,您現在可以重新啟動Windows 7 PC,選擇建立的介質作為啟動裝置...

  • 發佈於 2021-04-02 18:19
  • 閲讀 ( 68 )

windows10的新bashshell所能做的一切

...些指南匯總到一個大列表中。 windows上linux入門 相關:如何在windows10上安裝和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安裝Linux環境和bashshell。但是,它確實需要64位版本的Windows10。您只需啟用Windows Subs...

  • 發佈於 2021-04-06 14:44
  • 閲讀 ( 57 )

如何在windows10上安裝和使用linux bash shell

...令列應用程式都能正常工作,因為這個特性並不完美。 如何在windows10上安**ash 相關:如何知道我執行的是32位還是64位Windows? 此功能在32位版本的Windows 10上不起作用,因此請確保您使用的是64位版本的Windows。無論如何,如果你...

  • 發佈於 2021-04-06 16:32
  • 閲讀 ( 55 )
qygib7812
qygib7812

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦