1. 程式人生 > 其它 >2000系統如何檢視某埠對應服務_linux埠及查詢方法詳解

2000系統如何檢視某埠對應服務_linux埠及查詢方法詳解

技術標籤:2000系統如何檢視某埠對應服務443埠被system佔用netstat檢視埠狀態system exception 埠被佔用ubuntu命令查詢當前ip地址ubuntu開啟埠

服務是給系統提供功能的,在系統中除了有系統服務,還有網路服務。而每個網路服務都有自己的埠,一般埠號都是固定的。那麼,什麼是埠呢?我們知道,IP 地址是計算機在網際網路上的地址編號,每臺聯網的計算機都必須有自己的 IP 地址,而且必須是唯一的,這樣才能正常通訊。也就是說,在網際網路上是通過 IP 地址來確定不同計算機的位置的。大家可以把 IP 地址想象成家庭的"門牌號碼",不管你住的是大雜院、公寓樓還是別墅,都有自己的門牌號碼,而且門牌號碼是唯一的。如果知道了一臺伺服器的 IP 地址,我們就可以找到這臺伺服器。但是這臺伺服器上有可能搭建了多個網路服務,比如 WWW 服務、FTP 服務、Mail 服務,那麼我們到底需要伺服器為我們提供哪個網路服務呢?這時就要靠埠(Port)來區分了,因為每個網路服務對應的埠都是固定的。比如,WWW 服務對應的埠是 80,FTP 服務對應的埠是 20 和 21,Mail 服務對應的埠是 25 和 110。也就是說,IP 地址可以想象成"門牌號碼",而埠可以想象成"家庭成員",找到了 IP 地址只能找到你們家,只有找到了埠,寄信時才能找到真正的收件人。為了統一整個網際網路的埠和網路服務的對應關係,以便讓所有的主機都能使用相同的機制來請求或提供服務,同一個服務使用相同的埠,這就是協議。計算機中的協議主要分為兩大類:

  • 面向連線的可靠的TCP協議(Transmission Control Protocol,傳輸控制協議);

  • 面向無連線的不可靠的UDP協議(User Datagram Protocol,使用者資料報協議);

這兩種協議都支援 216,也就是 65535 個埠。這麼多埠怎麼記憶呢?系統給我們提供了服務與埠的對應檔案 /etc/services。檢視—下:

[[email protected] ~]#vi /etc/services…省略部分輸出…ftp-data 20/tcpftp-data 20/udp# 21 is registered to ftp, but also used by fspftp 21/tcpftp 21/udpfsp fspd#FTP服務的埠…省略部分輸出…smtp 25/tcp mailsmtp 25/udp mail#郵件傳送信件的埠…省略部分輸出…http 80/tcp www www-http #WorldWideWeb HTTPhttp 80/udp www www-http #HyperText Transfer Protocol#WWW服務的埠…省略部分輸出…pop3 110/tcp pop-3# POP version 3pop3 110/udp pop-3#郵件接收信件的埠…省略部分輸出…

網路服務的埠能夠修改嗎?當然是可以的,不過一旦修改了埠,那麼客戶機在訪問伺服器時很難知道伺服器對應的埠是什麼,也就不能正確地獲取服務了。所以,除非在實驗環境下,否則不要修改網路服務對應的埠。

查詢系統中已經啟動的服務

既然每個網路服務對應的埠是固定的,那麼是否可以通過查詢伺服器中開啟的埠,來判斷當前伺服器開啟了哪些服務?當然是可以的。雖然判斷伺服器中開啟的服務還有其他方法(如通過ps命令),但是通過埠的方法檢視最為準確。命令格式如下:

[[email protected] ~]# netstat 選項

選項:

  • -a:列出系統中所有網路連線,包括已經連線的網路服務、監聽的網路服務和 Socket 套接字;

  • -t:列出 TCP 資料;

  • -u:列出 UDF 資料;

  • -l:列出正在監聽的網路服務(不包含已經連線的網路服務);

  • -n:用埠號來顯示而不用服務名;

  • -p:列出該服務的程序 ID (PID);

舉個例子:

[[email protected] ~]# netstat -tlunp#列出系統中所有已經啟動的服務(已經監聽的埠),但不包含已經連線的網路服務Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0.0.0.0:53575 0.0.0.0:*LISTEN1200/rpc.statdtcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1181/rpcbindtcp 0 0 0.0.0.0:22 O.O.O.O:* LISTEN 1405/sshdtcp 0 0127.0.0.1:631 O.O.O.O:* LISTEN 1287/cupsdtcp 0 0 127.0.0.1:25 O.O.O.O:* LISTEN 1481/mastertcp 0 0 :::57454 :::* LISTEN 1200/rpc.statdtcp 0 0 :::111 :::* LISTEN 1181/rpcbindtcp 0 0 :::22 :::* LISTEN 1405/sshdtcp 0 0 ::1:631 :::* LISTEN 1287/cupsdtcp 0 0 ::1:25 :::* LISTEN 1481/masterudp 0 0 0.0.0.0:58322 0.0.0.0:* 1276/avahi-daemonudp 0 0 0.0.0.0:5353 O.O.O.O:* 1276/avahi-daemonudp 0 0 0.0.0.0:111 O.O.O.O:* 1181/rpcbindudp 0 0 0.0.0.0:631 O.O.O.O:* 1287/cupsdudp 0 0 0.0.0.0:56459 0.0.0.0:* 1200/rpc.statdudp 0 0 0.0.0.0:932 O.O.O.O:* 1181/rpcbindudp 0 0 0.0.0.0:952 O.O.O.O:* 1200/rpc.statdudp 0 0 :::111 :::* 1181/rpcbindudp 0 0 :::47858 :::* 1200/rpc.statdudp 0 0 :::932 :::* 1181/rpcbind

執行這條命令會看到伺服器上所有已經開啟的埠,也就是說,通過這些埠就可以知道當前伺服器上開啟了哪些服務。解釋一下命令的執行結果:

  • Proto:資料包的協議。分為 TCP 和 UDP 資料包;

  • Recv-Q:表示收到的資料已經在本地接收緩衝,但是還沒有被程序取走的資料包數量;

  • Send-Q:對方沒有收到的資料包數量;或者沒有 Ack 回覆的,還在本地緩衝區的資料包數量;

  • Local Address:本地 IP : 埠。通過埠可以知道本機開啟了哪些服務;

  • Foreign Address:遠端主機:埠。也就是遠端是哪個 IP、使用哪個埠連線到本機。由於這條命令只能檢視監聽埠,所以沒有 IP 連線到到本機;

  • State:連線狀態。主要有已經建立連線(ESTABLISED)和監聽(LISTEN)兩種狀態,當前只能檢視監聽狀態;

  • PID/Program name:程序 ID 和程序命令;

再舉個例子:

[[email protected] ~]# netstat -an#檢視所有的網路連線,包括已連線的網路服務、監聽的網路服務和Socket套接字Active Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 0.0.0.0:53575 0.0.0.0:* LISTENtcp 0 0 0.0.0.0:111 0.0.0.0:* LISTENtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTENtcp 0 0 127.0.0.1:631 0.0.0.0:* LISTENtcp 0 0 127.0.0.1:25 0.0.0.0:* LISTENtcp 0 0 192.168.0.210:22 192.168.0.105:4868 ESTABLISHEDtcp 0 0 :::57454 :::* LISTEN...省略部分輸出...udp 0 0 :::932 :::*Active UNIX domain sockets (servers and established)Proto RefCnt Flags Type State I-Node Path#Socket套接字輸出,後面有具體介紹Unix 2 [ ACC ] STREAM LISTENING 11712 /var/run/dbus/system_bus_socketunix 2 [ ACC ] STREAM LISTENING 8450 @/com/ubuntu/upstart unix 7. [ ] DGRAM 8651 @/org/kernel/udev/udevdunix 2 [ ACC ] STREAM LISTENING 11942 @/var/run/hald/dbus-b4QVLkivf1...省略部分輸出...

執行"netstat -an"命令能査看更多的資訊,在 Stated 中也看到了已經建立的連線(ESTABLISED)。這是 ssh 遠端管理命令產生的連線,ssh 對應的埠是 22。而且我們還看到了 Socket 套接字。在伺服器上,除網路服務可以繫結埠,用埠來接收客戶端的請求資料外,系統中的網路程式或我們自己開發的網路程式也可以繫結埠,用埠來接收客戶端的請求資料。這些網路程式就是通過 Socket 套接字來繫結埠的。也就是說,網路服務或網路程式要想在網路中傳遞資料,必須利用 Socke 套接字繫結埠,並進行資料傳遞。使用"netstat -an"命令檢視到的這些 Socke 套接字雖然不是網路服務,但是同樣會佔用埠,並在網路中傳遞資料。解釋一下 Socket 套接字的輸出:

  • Proto:協議,一般是unix;

  • RefCnt:連線到此Socket的程序數量;

  • Flags:連線標識;

  • Type:Socket訪問型別;

  • State:狀態,LISTENING表示監聽,CONNECTED表示已經建立連線;

  • I-Node:程式檔案的 i 節點號;

  • Path:Socke程式的路徑,或者相關資料的輸出路徑;

09953a06ca720aa62aa34e742dc14a28.png