這個topic有助於對網路,防火牆,服務等相關issue不甚了解的人能徹底一次搞清楚,有個問題很常見給大家看一下,"要如何知道某遠端主機的特定端口(port)有沒有通呢?" 有意思的是,不論是一般使用者或甚至是經驗尚淺的管理者,會給出這樣的答案,"Ping看看就知道啦~"
好了,我來為各位說明一下,首先,ping可以用來測要連接的對象是否有回應沒錯,但沒法測特定port通否,況且,ping的對象不見得一定會給予你回應哦~這個應該不難理解才是.在網際網路上保持低調是好的.不過還是給各位看一下ping要怎麼用好了..若想持續ping不中斷,可加" -t "這個參數,但若是只想ping個固定次數,例如5次呢,如下圖所示.

至於如何看出特定port有通否.通常目的是為了知道佔用該特定port的服務(Service)能否可以讓我連過去,例如80 port.這自然是從連接方的角度來看,但別忘了,要連到Internet上的某個主機的某個服務,不可能是暢行無阻直達的,中間還需要開通的關卡有哪些呢?情況可以很單純也可以很複雜,端視兩方所處網路環境的設定情況而不同.為了說明方便起見,我直接從提供服務的那一端show給大家看會更清楚.
這是一台Linux主機,提供了網頁服務要給使用者可以上來逛,此外也提供了SSH服務要給系統管理者連入以進行作業,至此你應該了解到,就這台Linux主機的本機(localhost)角度來看,至少,本機的port 22 (SSH服務), 及port 80 (Web服務),必須是處於傾聽狀態的,意即必須是有回應的.如下圖所示,當以telnet指令測localhost的port 80時,有得到幾行回應,那怎樣叫無回應呢?下圖又多測了一個port為5000,回應為connection refused,這在本機上得此回應,便代表了binding port 5000 的該服務並未啟動或啟動失敗.或是,並無任何服務傾聽port 5000,因此也自然不會有所回應.

至此大家便了解,先從本機看起的重要性,因為服務都起不來的話,更遑論要從A處連或從B處連了, 當然了,服務有回應的話,不見得都像上圖的port 80那樣子的數行字冒出來哦,有的服務沒有提示字,因此回應結果只有看到游標持續閃動,這也算是有回應哦~此時一樣輸入Ctrl + ] 即可exit.回到提示符號$,便可再繼續下指令了.
那麼,若想於該主機的本機上查出目前有哪些port處於listen狀態呢?用netstat即可查明,指令如下方2個圖所示.從其中還可看出process id及名稱,可得知與什麼服務相關.以及有什麼ip連過來存取服務等資訊.


但若開啟的服務很多,有不少port處於listen狀態,此時欲鎖定port 80的話,少不了要用上grep. 但由於是以"80"為關鍵字加以篩選,難免還是會有一些不必要的輸出內容.

那要如何更精準的查看呢? lsof就是你要的答案." -i: "之後接欲查的port即可,如下圖即是查80 , 22 此2個port. 的確皆有處於傾聽狀態,且可得知process id及服務名稱. 講到此剛好為各位釐清一下.都說port 80是web服務. 25是smtp, 21是ftp, 22是ssh,但別忘了,這只是預設值,慣用port,反過來說,可沒規定什麼服務就非得是listen什麼特定port哦~往往只是約定成俗罷了,意即,port是可以更改的,例如ssh並非一定要用22,可以改但別和本機上其它服務所佔用的port沖突到即可. 例如你把ssh服務改成port 7777,只要有需要連線的人知道更改後的port number,就不會連不上了.

也可以採用參數" -p "根據欲鎖定的process id,僅針對IPv4,查看該程序相關的服務,如下圖所示.

至此大家應該知道從何著手了,再回來一開始的問題,我要如何知道遠端主機的特定port有通否,首先,該服務必然要成功啟動並處於傾聽狀態,且其本機防火牆要開通其所listen的port.再來於該網路環境的閘道也要做好NAT,以使incoming的連線需求能順利轉到該主機之上,這樣就可以了.當然了,若有設限,例如只允許特定ip段或特定網域可連過來,也是可以辦到的.再則,連線發起方的所在網路環境亦可能存在對outgoing的限制,凡此種種,皆可能影響到連線成功與否.
綜上,相信你已完全了解來龍去脈了,在排查錯誤時,必然可以更加得心應手了哦~
請先 登入 以發表留言。