Categories: Linux

Linux 查詢網路連接埠 Port 是否有被使用教學與範例

介紹如何在 Linux 中使用 netstatlsofssnmap 指令檢查系統連接埠(port)是否有被使用。

netstat 指令

netstat 指令可以用來查詢目前系統上處於傾聽(listen)狀態的連接埠:

# 查詢所有開啟的 TCP 與 UDP 連接埠
sudo netstat -tulpn | grep LISTEN

這裡所使用的參數意義如下:

  • -t:列出 TCP 傳輸協定的連線。
  • -u:列出 UDP 傳輸協定的連線。
  • -l:列出傾聽(listen)狀態的埠口。
  • -p:列出使用連接埠的應用程式與 PID。
  • -n:顯示 IP 位址,不進行 DNS 查詢。

執行之後的輸出大致會像這樣:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1068/nginx: master
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      797/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1066/sshd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      8870/cupsd
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      1012/postgres
tcp6       0      0 :::80                   :::*                    LISTEN      1068/nginx: master
tcp6       0      0 :::22                   :::*                    LISTEN      1066/sshd

在這個輸出中會包含傳輸協定(例如 tcp)、傾聽位址與埠號(例如 0.0.0.0:22),以及使用連接埠的應用程式與 PID(例如 1066/sshd)。

lsof 指令

若要以 lsof 指令查詢目前系統上處於傾聽狀態的連接埠,可以執行:

# 查詢所有開啟的 TCP 與 UDP 連接埠
sudo lsof -i -P -n | grep LISTEN

這裡所使用的參數意義如下:

  • -i:列出網路連線。
  • -P:以數值顯示連接埠號,不轉換為連接埠名稱。
  • -n:顯示 IP 位址,不進行 DNS 查詢。

執行之後的輸出大致會像這樣:

systemd-r   797 systemd-resolve   13u  IPv4  18302      0t0  TCP 127.0.0.53:53 (LISTEN)
postgres   1012        postgres    7u  IPv4  23403      0t0  TCP 127.0.0.1:5432 (LISTEN)
sshd       1066            root    3u  IPv4  25805      0t0  TCP *:22 (LISTEN)
sshd       1066            root    4u  IPv6  25807      0t0  TCP *:22 (LISTEN)
nginx      1068            root    6u  IPv4  25810      0t0  TCP *:80 (LISTEN)
nginx      1068            root    7u  IPv6  25811      0t0  TCP *:80 (LISTEN)
nginx      1069        www-data    6u  IPv4  25810      0t0  TCP *:80 (LISTEN)
nginx      1069        www-data    7u  IPv6  25811      0t0  TCP *:80 (LISTEN)
nginx      1070        www-data    6u  IPv4  25810      0t0  TCP *:80 (LISTEN)
nginx      1070        www-data    7u  IPv6  25811      0t0  TCP *:80 (LISTEN)
cupsd      8870            root    7u  IPv4 501711      0t0  TCP 127.0.0.1:631 (LISTEN)

ss 指令

ss 指令的作用與參數用法都類似 netstat 指令,但是可以提供更多的細部資訊:

# 查詢所有開啟的 TCP 與 UDP 連接埠
sudo ss -tulpn | grep LISTEN
tcp   LISTEN  0       511                   0.0.0.0:80            0.0.0.0:*      users:(("nginx",pid=1070,fd=6),("nginx",pid=1069,fd=6),("nginx",pid=1068,fd=6))
tcp   LISTEN  0       128             127.0.0.53%lo:53            0.0.0.0:*      users:(("systemd-resolve",pid=797,fd=13))
tcp   LISTEN  0       128                   0.0.0.0:22            0.0.0.0:*      users:(("sshd",pid=1066,fd=3))
tcp   LISTEN  0       5                   127.0.0.1:631           0.0.0.0:*      users:(("cupsd",pid=8870,fd=7))
tcp   LISTEN  0       224                 127.0.0.1:5432          0.0.0.0:*      users:(("postgres",pid=1012,fd=7))
tcp   LISTEN  0       511                      [::]:80               [::]:*      users:(("nginx",pid=1070,fd=7),("nginx",pid=1069,fd=7),("nginx",pid=1068,fd=7))
tcp   LISTEN  0       128                      [::]:22               [::]:*      users:(("sshd",pid=1066,fd=4))

nmap 指令

nmap 指令是一個網路探測工具,可用於掃描本機所開啟的網路連接埠:

# 掃描 localhost 所有開啟的 TCP 與 UDP 連接埠
sudo nmap -sT -sU localhost

這裡的 -sT-sU 參數分別代表針對 TCP 與 UDP 連線進行掃描,輸出會類似這樣:

Starting Nmap 7.60 ( https://nmap.org ) at 2021-04-27 08:58 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000055s latency).
Not shown: 1994 closed ports
PORT     STATE         SERVICE
22/tcp   open          ssh
80/tcp   open          http
631/tcp  open          ipp
5432/tcp open          postgresql
631/udp  open|filtered ipp
5353/udp open|filtered zeroconf

Nmap done: 1 IP address (1 host up) scanned in 2.75 seconds

nmap 也可以用來從外部掃描特定主機所開啟的網路連接埠:

# 掃描 192.168.1.2 所有開啟的 TCP 與 UDP 連接埠
sudo nmap -sT -sU 192.168.1.2

參考資料

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago