一、基礎概念
埠號是網路通信中的一個概念,用於標識一條通信鏈路的端點,主要用於標識不同的服務。
常用的埠號被固定分配給了一些常用的服務,如FTP、HTTP、SSH等;除此之外,還有大量的私有埠號未被固定分配,在使用時需要協商雙方自定義。
在Linux中,所有的網路通信都是基於socket來實現的,而socket通信的兩個端點都會被綁定到一個埠號以區別不同的通信鏈路。
二、查詢埠號的方法
1. netstat命令
$ netstat -tlnp
該命令可以列出當前系統中所有的TCP和UDP埠號以及佔用埠號的進程,其中:
- -t表示列出所有的TCP協議
- -u表示列出所有的UDP協議
- -l表示列出所有的正在監聽的埠號
- -n表示不對埠號進行反向域名解析,提高命令執行速度
- -p表示顯示佔用埠號的進程PID及名稱
示例:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd tcp6 0 0 :::80 :::* LISTEN 5678/httpd udp 0 0 0.0.0.0:68 0.0.0.0:* 901/dhclient
可以看到當前系統中TCP協議下22埠號被sshd進程佔用,TCP協議下80埠號被httpd進程佔用,UDP協議下68埠號被dhclient進程佔用。
2. lsof命令
$ sudo lsof -i :埠號
該命令可以查詢指定埠號的佔用進程,其中:
- -i表示查詢網路相關文件
- -p表示查詢指定進程PID相關的文件
示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1234 root 3u IPv4 12345 0t0 TCP *:ssh (LISTEN)
可以看到22埠號被sshd進程佔用。
3. ss命令
$ ss -ltnp | grep :埠號
該命令可以列出指定埠號的佔用進程,其中:
- -l表示只列出監聽狀態的埠號
- -t表示只列出TCP協議相關的埠號
- -n表示不對埠號進行反向域名解析,提高命令執行速度
- -p表示顯示佔用埠號的進程PID及名稱
示例:
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",1234,3))
可以看到22埠號被sshd進程佔用。
三、防火牆對埠號的管理
在Linux中,防火牆是管理網路連接的基本手段之一。
1. 查詢防火牆狀態
$ sudo systemctl status firewalld
該命令可以查詢當前防火牆的運行狀態。
2. 查詢防火牆規則
$ sudo firewall-cmd --list-all
該命令可以列出當前系統中所有的防火牆規則及其對應的埠號。
3. 打開/關閉埠號
$ sudo firewall-cmd --add-port=埠號/tcp --permanent $ sudo firewall-cmd --remove-port=埠號/tcp --permanent
該命令可以分別打開/關閉指定的埠號,並將規則永久寫入防火牆配置中。
四、小結
本文介紹了在Linux系統中查詢埠號的幾種方法,包括使用netstat、lsof、ss命令查詢,同時還介紹了防火牆對埠號的管理方法。
原創文章,作者:NVQV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/136295.html