重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
執行 TCP 端口掃描的一種方式就是執行一部分。目標端口上的 TCP 三次握手用于識別端口是否接受連接。這一類型的掃描指代隱秘掃描, SYN 掃描,或者半開放掃描。這個秘籍演示了如何使用 Scapy 執行 TCP 隱秘掃描。
創新互聯專業為企業提供宜秀網站建設、宜秀做網站、宜秀網站設計、宜秀網站制作等企業網站建設、網頁設計與制作、宜秀企業網站模板建站服務,10年宜秀做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
為了使用 Scapy 執行 TCP 隱秘 掃描,你需要一個運行 TCP 網絡服務的遠程服務器。這個例子中我們使用 Metasploitable2 實例來執行任務。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。
此外,這一節也需要編寫腳本的更多信息,請參考第一章中的“使用文本編輯器*VIM 和 Nano)。
為了展示如何執行 SYN 掃描,我們需要使用 Scapy 構造 TCP SYN 請求,并識別和開放端口、關閉端口以及無響應系統有關的響應。為了向給定端口發送 TCP SYN 請求,我們首先需要構建請求的各個層面。我們需要構建的第一層就是 IP 層:
為了構建請求的 IP 層,我們需要將 IP 對象賦給變量 i 。通過調用 display 函數,我們可以確定對象的屬性配置。通常,發送和接受地址都設為回送地址, 127.0.0.1 。這些值可以通過修改目標地址來修改,也就是設置 i.dst 為想要掃描的地址的字符串值。通過再次調用 dislay 函數,我們看到不僅僅更新的目標地址,也自動更新了和默認接口相關的源 IP 地址。現在我們構建了請求的 IP 層,我們可以構建 TCP 層了。
為了構建請求的 TCP 層,我們使用和 IP 層相同的技巧。在這個立即中, TCP 對象賦給了 t 變量。像之前提到的那樣,默認的配置可以通過調用 display 函數來確定。這里我們可以看到目標端口的默認值為 HTTP 端口 80。對于我們的首次掃描,我們將 TCP 設置保留默認。現在我們創建了 TCP 和 IP 層,我們需要將它們疊放來構造請求。
我們可以通過以斜杠分離變量來疊放 IP 和 TCP 層。這些層面之后賦給了新的變量,它代表整個請求。我們之后可以調用 dispaly 函數來查看請求的配置。一旦構建了請求,可以將其傳遞給 sr1 函數來分析響應:
相同的請求可以不通過構建和堆疊每一層來執行。反之,我們使用單獨的一條命令,通過直接調用函數并傳遞合適的參數:
要注意當 SYN 封包發往目標 Web 服務器的 TCP 端口 80,并且該端口上運行了 HTTP 服務時,響應中會帶有 TCP 標識 SA 的值,這表明 SYN 和 ACK 標識都被激活。這個響應表明特定的目標端口是開放的,并接受連接。如果相同類型的封包發往不接受連接的端口,會收到不同的請求。
當 SYN 請求發送給關閉的端口時,返回的響應中帶有 TCP 標識 RA,這表明 RST 和 ACK 標識為都被激活。ACK 為僅僅用于承認請求被接受,RST 為用于斷開連接,因為端口不接受連接。作為替代,如果 SYN 封包發往崩潰的系統,或者防火墻過濾了這個請求,就可能接受不到任何信息。由于這個原因,在 sr1 函數在腳本中使用時,應該始終使用 timeout 選項,來確保腳本不會在無響應的主機上掛起。
如果函數對無響應的主機使用時, timeout 值沒有指定,函數會無限繼續下去。這個演示中, timout 值為 1秒,用于使這個函數更加完備,響應的值可以用于判斷是否收到了響應:
Python 的使用使其更易于測試變量來識別 sr1 函數是否對其復制。這可以用作初步檢驗,來判斷是否接收到了任何響應。對于接收到的響應,可以執行一系列后續檢查來判斷響應表明端口開放還是關閉。這些東西可以輕易使用 Python 腳本來完成,像這樣:
在這個 Python 腳本中,用于被提示來輸入 IP 地址,腳本之后會對定義好的端口序列執行 SYN 掃描。腳本之后會得到每個連接的響應,并嘗試判斷響應的 SYN 和 ACK 標識是否激活。如果響應中出現并僅僅出現了這些標識,那么會輸出相應的端口號碼。
運行這個腳本之后,輸出會顯示所提供的 IP 地址的系統上,前 100 個端口中的開放端口。
這一類型的掃描由發送初始 SYN 封包給遠程系統的目標 TCP 端口,并且通過返回的響應類型來判斷端口狀態來完成。如果遠程系統返回了 SYN+ACK 響應,那么它正在準備建立連接,我們可以假設這個端口開放。如果服務返回了 RST 封包,這就表明端口關閉并且不接收連接。此外,如果沒有返回響應,掃描系統和遠程系統之間可能存在防火墻,它丟棄了請求。這也可能表明主機崩潰或者目標 IP 上沒有關聯任何系統。
Nmap 擁有可以執行遠程系統 SYN 掃描的掃描模式。這個秘籍展示了如何使用 Namp 執行 TCP 隱秘掃描。
為了使用 Nmap 執行 TCP 隱秘掃描,你需要一個運行 TCP 網絡服務的遠程服務器。這個例子中我們使用 Metasploitable2 實例來執行任務。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。
就像多數掃描需求那樣,Nmap 擁有簡化 TCP 隱秘掃描執行過程的選項。為了使用 Nmap 執行 TCP 隱秘掃描,應使用 -sS 選項,并附帶被掃描主機的 IP 地址。
在提供的例子中,特定的 IP 地址的 TCP 80 端口上執行了 TCP 隱秘掃描。和 Scapy 中的技巧相似,Nmap 監聽響應并通過分析響應中所激活的 TCP 標識來識別開放端口。我們也可以使用 Namp 執行多個特定端口的掃描,通過傳遞逗號分隔的端口號列表。
在這個例子中,目標 IP 地址的端口 21、80 和 443 上執行了 SYN 掃描。我們也可以使用 Namp 來掃描主機序列,通過標明要掃描的第一個和最后一個端口號,以破折號分隔:
在所提供的例子中,SYN 掃描在 TCP 20 到 25 端口上執行。除了擁有指定被掃描端口的能力之外。Nmap 同時擁有配置好的 1000 和常用端口的列表。我們可以執行這些端口上的掃描,通過不帶任何端口指定信息來運行 Nmap:
在上面的例子中,掃描了 Nmap 定義的 1000 個常用端口,用于識別 Metasploitable2 系統上的大量開放端口。雖然這個技巧在是被多數設備上很高效,但是也可能無法識別模糊的服務或者不常見的端口組合。如果掃描在所有可能的 TCP 端口上執行,所有可能的端口地址值都需要被掃描。定義了源端口和目標端口地址的 TCP 頭部部分是 16 位長。并且,每一位可以為 1 或者 0。因此,共有 2 ** 16 或者 65536 個可能的 TCP 端口地址。對于要掃描的全部可能的地址空間,需要提供 0 到 65535 的端口范圍,像這樣:
這個例子中,Metasploitable2 系統上所有可能的 65536 和 TCP 地址都掃描了一遍。要注意該掃描中識別的多數服務都在標準的 Nmap 1000 掃描中識別過了。這就表明在嘗試識別目標的所有可能的攻擊面的時候,完整掃描是個最佳實踐。Nmap 可以使用破折號記法,掃描主機列表上的 TCP 端口:
這個例子中,TCP 80 端口的 SYN 掃描在指定地址范圍內的所有主機上執行。雖然這個特定的掃描僅僅執行在單個端口上,Nmap 也能夠同時掃描多個系統上的多個端口和端口范圍。此外,Nmap 也能夠進行配置,基于 IP 地址的輸入列表來掃描主機。這可以通過 -iL 選項并指定文件名,如果文件存放于執行目錄中,或者文件路徑來完成。Nmap 之后會遍歷輸入列表中的每個地址,并對地址執行特定的掃描。
Nmap SYN 掃描背后的底層機制已經討論過了。但是,Nmap 擁有多線程功能,是用于執行這類掃描的快速高效的方式。
除了其它已經討論過的工具之外,Metasploit 擁有用于 SYN 掃描的輔助模塊。這個秘籍展示了如何使用 Metasploit 來執行 TCP 隱秘掃描。
為了使用 Metasploit 執行 TCP 隱秘掃描,你需要一個運行 TCP 網絡服務的遠程服務器。這個例子中我們使用 Metasploitable2 實例來執行任務。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。
Metasploit 擁有可以對特定 TCP 端口執行 SYN 掃描的輔助模塊。為了在 Kali 中啟動 Metasploit,我們在終端中執行 msfconsole 命令。
為了在 Metasploit 中執行 SYN 掃描,以輔助模塊的相對路徑調用 use 命令。一旦模塊被選中,可以執行 show options 命令來確認或修改掃描配置。這個命令會展示四列的表格,包括 name 、 current settings 、 required 和 description 。 name 列標出了每個可配置變量的名稱。 current settings 列列出了任何給定變量的現有配置。 required 列標出對于任何給定變量,值是否是必須的。 description 列描述了每個變量的功能。任何給定變量的值可以使用 set 命令,并且將新的值作為參數來修改。
在上面的例子中, RHOSTS 值修改為我們打算掃描的遠程系統的 IP 地址。地外,線程數量修改為 20。 THREADS 的值定義了在后臺執行的當前任務數量。確定線程數量涉及到尋找一個平衡,既能提升任務速度,又不會過度消耗系統資源。對于多數系統,20 個線程可以足夠快,并且相當合理。 PORTS 值設為 TCP 端口 80(HTTP)。修改了必要的變量之后,可以再次使用 show options 命令來驗證。一旦所需配置驗證完畢,就可以執行掃描了。
上面的例子中,所指定的遠程主機的錢 100 個 TCP 端口上執行了 TCP SYN 掃描。雖然這個掃描識別了目標系統的多個設備,我們不能確認所有設備都識別出來,除非所有可能的端口地址都掃描到。定義來源和目標端口地址的TCP 頭部部分是 16 位長。并且,每一位可以為 1 或者 0。因此,共有 2 ** 16 或 65536 個可能的 TCP 端口地址。對于要掃描的整個地址空間,需要提供 0 到 65535 的 端口范圍,像這樣:
在這個李忠,遠程系統的所有開放端口都由掃描所有可能的 TCP 端口地址來識別。我們也可以修改掃描配置使用破折號記法來掃描地址序列。
這個例子中,TCP SYN 掃描執行在由 RHOST 變量指定的所有主機地址的 80 端口上。與之相似, RHOSTS 可以使用 CIDR 記法定義網絡范圍。
Metasploit SYN 掃描輔助模塊背后的底層原理和任何其它 SYN 掃描工具一樣。對于每個被掃描的端口,會發送 SYN 封包。SYN+ACK 封包會用于識別活動服務。使用 MEtasploit 可能更加有吸引力,因為它擁有交互控制臺,也因為它是個已經被多數滲透測試者熟知的工具。
除了我們之前學到了探索技巧,hping3 也可以用于執行端口掃描。這個秘籍展示了如何使用 hping3 來執行 TCP 隱秘掃描。
為了使用 hping3 執行 TCP 隱秘掃描,你需要一個運行 TCP 網絡服務的遠程服務器。這個例子中我們使用 Metasploitable2 實例來執行任務。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。
除了我們之前學到了探索技巧,hping3 也可以用于執行端口掃描。為了使用 hping3 執行端口掃描,我們需要以一個整數值使用 --scan 模式來指定要掃描的端口號。
上面的例子中,SYN 掃描執行在指定 IP 地址的 TCP 端口 80 上。 -S 選項指明了發給遠程系統的封包中激活的 TCP 標識。表格展示了接收到的響應封包中的屬性。我們可以從輸出中看到,接收到了SYN+ACK 響應,所以這表示目標主機端口 80 是開放的。此外,我們可以通過輸入夠好分隔的端口號列表來掃描多個端口,像這樣:
在上面的掃描輸出中,你可以看到,僅僅展示了接受到 SYN+ACK 標識的結果。要注意和發送到 443 端口的 SYN 請求相關的響應并沒有展示。從輸出中可以看出,我們可以通過使用 -v 選項增加詳細讀來查看所有響應。此外,可以通過傳遞第一個和最后一個端口地址值,來掃描端口范圍,像這樣:
這個例子中,100 個端口的掃描足以識別 Metasploitable2 系統上的服務。但是,為了執行 所有 TCP 端口的掃描,需要掃描所有可能的端口地址值。定義了源端口和目標端口地址的 TCP 頭部部分是 16 位長。并且,每一位可以為 1 或者 0。因此,共有 2 ** 16 或者 65536 個可能的 TCP 端口地址。對于要掃描的全部可能的地址空間,需要提供 0 到 65535 的端口范圍,像這樣:
hping3 不用于一些已經提到的其它工具,因為它并沒有 SYN 掃描模式。但是反之,它允許你指定 TCP 封包發送時的激活的 TCP 標識。在秘籍中的例子中, -S 選項讓 hping3 使用 TCP 封包的 SYN 標識。
在多數掃描工具當中,TCP 連接掃描比 SYN 掃描更加容易。這是因為 TCP 連接掃描并不需要為了生成和注入 SYN 掃描中使用的原始封包而提升權限。Scapy 是它的一大例外。Scapy 實際上非常難以執行完全的 TCP 三次握手,也不實用。但是,出于更好理解這個過程的目的,我們來看看如何使用 Scapy 執行連接掃描。
為了使用 Scapy 執行全連接掃描,你需要一個運行 UDP 網絡服務的遠程服務器。這個例子中我們使用 Metasploitable2 實例來執行任務。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。
此外,這一節也需要編寫腳本的更多信息,請參考第一章中的“使用文本編輯器*VIM 和 Nano)。
Scapy 中很難執行全連接掃描,因為系統內核不知道你在 Scapy 中發送的請求,并且嘗試阻止你和遠程系統建立完整的三次握手。你可以在 Wireshark 或 tcpdump 中,通過發送 SYN 請求并嗅探相關流量來看到這個過程。當你接收到來自遠程系統的 SYN+ACK 響應時,Linux 內核會攔截它,并將其看做來源不明的響應,因為它不知道你在 Scapy 中 發送的請求。并且系統會自動使用 TCP RST 封包來回復,因此會斷開握手過程。考慮下面的例子:
這個 Python 腳本的例子可以用做 POC 來演系統破壞三次握手的問題。這個腳本假設你將帶有開放端口活動系統作為目標。因此,假設 SYN+ACK 回復會作為初始 SYN 請求的響應而返回。即使發送了最后的 ACK 回復,完成了握手,RST 封包也會阻止連接建立。我們可以通過觀察封包發送和接受來進一步演示。
在這個 Python 腳本中,每個發送的封包都在傳輸之前展示,并且每個收到的封包都在到達之后展示。在檢驗每個封包所激活的 TCP 標識的過程中,我們可以看到,三次握手失敗了。考慮由腳本生成的下列輸出:
在腳本的輸出中,我們看到了四個封包。第一個封包是發送的 SYN 請求,第二個封包時接收到的 SYN+ACK 回復,第三個封包時發送的 ACK 回復,之后接收到了 RST 封包,它是最后的 ACK 回復的響應。最后一個封包表明,在建立連接時出現了問題。Scapy 中可能能夠建立完成的三次握手,但是它需要對本地 IP 表做一些調整。尤其是,如果你去掉發往遠程系統的 TSR 封包,你就可以完成握手。通過使用 IP 表建立過濾機制,我們可以去掉 RST 封包來完成三次握手,而不會干擾到整個系統(這個配置出于功能上的原理并不推薦)。為了展示完整三次握手的成功建立,我們使用 Netcat 建立 TCP 監聽服務。之后嘗試使用 Scapy 連接開放的端口。
這個例子中,我們在 TCP 端口 4444 開啟了監聽服務。我們之后可以修改之前的腳本來嘗試連接 端口 4444 上的 Netcat 監聽服務。
這個腳本中,SYN 請求發送給了監聽端口。收到 SYN+ACK 回復之后,會發送 ACK回復。為了驗證連接嘗試被系統生成的 RST 封包打斷,這個腳本應該在 Wireshark 啟動之后執行,來捕獲請求蓄力。我們使用 Wireshark 的過濾器來隔離連接嘗試序列。所使用的過濾器是 tcp (ip.src == 172.16.36.135 || ip.dst == 172.16.36.135) 。過濾器僅僅用于展示來自或發往被掃描系統的 TCP 流量。像這樣:
既然我們已經精確定位了問題。我們可以建立過濾器,讓我們能夠去除系統生成的 RST 封包。這個過濾器可以通過修改本地 IP 表來建立:
在這個例子中,本地 IP 表的修改去除了所有發往被掃描主機的目標地址的 TCP RST 封包。 list 選項隨后可以用于查看 IP 表的條目,以及驗證配置已經做了修改。為了執行另一次連接嘗試,我們需要確保 Natcat 仍舊監聽目標的 4444 端口,像這樣:
和之前相同的 Python 腳本可以再次使用,同時 WIreshark 會捕獲后臺的流量。使用之前討論的顯示過濾器,我們可以輕易專注于所需的流量。要注意三次握手的所有步驟現在都可以完成,而不會收到系統生成的 RST 封包的打斷,像這樣:
此外,如果我們看一看運行在目標系統的 Netcat 服務,我們可以注意到,已經建立了連接。這是用于確認成功建立連接的進一步的證據。這可以在下面的輸出中看到:
雖然這個練習對理解和解決 TCP 連接的問題十分有幫助,恢復 IP 表的條目也十分重要。RST 封包 是 TCP 通信的重要組成部分,去除這些響應會影響正常的通信功能。洗嘜按的命令可以用于刷新我們的 iptable 規則,并驗證刷新成功:
就像例子中展示的那樣, flush 選項應該用于清楚 IP 表的條目。我們可以多次使用 list 選項來驗證 IP 表的條目已經移除了。
執行 TCP 連接掃描的同居通過執行完整的三次握手,和遠程系統的所有被掃描端口建立連接。端口的狀態取決于連接是否成功建立。如果連接建立,端口被認為是開放的,如果連接不能成功建立,端口被認為是關閉的。
端口掃描:端口對應網絡服務及應用端程序
服務端程序的漏洞通過端口攻入
發現開放的端口
更具體的攻擊面
UDP端口掃描:
如果收到ICMP端口不可達,表示端口關閉
如果沒有收到回包,則證明端口是開放的
和三層掃描IP剛好相反
Scapy端口開發掃描
命令:sr1(IP(dst="192.168.45.129")/UDP(dport=53),timeout=1,verbose=1)
nmap -sU 192.168.45.129
TCP掃描:基于連接的協議
三次握手:基于正常的三次握手發現目標是否在線
隱蔽掃描:發送不完整的數據包,不建立完整的連接,如ACK包,SYN包,不會在應用層訪問,
僵尸掃描:不和目標系統產生交互,極為隱蔽
全連接掃描:建立完整的三次握手
所有的TCP掃描方式都是基于三次握手的變化來判斷目標系統端口狀態
隱蔽掃描:發送SYN數據包,如果收到對方發來的ACK數據包,證明其在線,不與其建立完整的三次握手連接,在應用層日志內不記錄掃描行為,十分隱蔽,網絡層審計會被發現跡象
僵尸掃描:是一種極其隱蔽的掃描方式,實施條件苛刻,對于掃描發起方和被掃描方之間,必須是需要實現地址偽造,必須是僵尸機(指的是閑置系統,并且系統使用遞增的IPID)早期的win xp,win 2000都是遞增的IPID,如今的LINUX,WINDOWS都是隨機產生的IPID
1,掃描者向僵尸機發送SYN+ACY,僵尸機判斷未進行三次握手,所以返回RST包,在RST數據包內有一個IPID,值記為X,那么掃描者就會知道被掃描者的IPID
2,掃描者向目標服務器發送SYN數據包,并且偽裝源地址為僵尸機,如果目標服務器端口開放,那么就會向僵尸機發送SYN+ACK數據包,那么僵尸機也會發送RST數據包,那么其IPID就是X+1(因為僵尸機足夠空閑,這個就為其收到的第二個數據包)
3,掃描者再向僵尸機發送SYN+ACK,那么僵尸機再次發送RST數據包,IPID為X+2,如果掃描者收到僵尸機的IPID為X+2,那么就可以判斷目標服務器端口開放
使用scapy發送數據包:首先開啟三臺虛擬機,
kali虛擬機:192.168.45.128
Linux虛擬機:192.168.45.129
windows虛擬機:192.168.45.132
發送SYN數據包:
通過抓包可以查看kali給linux發送syn數據包
linux虛擬機返回Kali虛擬機SYN+ACK數據包
kali系統并不知道使用者發送了SYN包,而其莫名其妙收到了SYN+ACK數據包,便會發RST包斷開連接
也可以使用下列該命令查看收到的數據包的信息,收到對方相應的SYN+ACK數據包,scapy默認從本機的80端口往目標系統的20號端口發送,當然也可以修改
如果向目標系統發送一個 隨機端口:
通過抓包的獲得:1,kali向linux發送SYN數據包,目標端口23456,
2,Linux系統由自己的23456端口向kali系統的20號端口返回RST+ACK數據包,表示系統端口未開放會話結束
使用python腳本去進行scapy掃描
nmap做隱蔽端口掃描:
nmap -sS? 192.168.45.129 -p 80,21,110,443 #掃描固定的端口
nmap -sS 192.168.45.129 -p 1-65535 --open? #掃描該IP地址下1-65535端口掃描,并只顯示開放的端口
nmap -sS 192.168.45.129 -p --open? #參數--open表示只顯示開放的端口
nmap -sS -iL iplist.txt -p 80
由抓包可知,nmap默認使用-sS掃描,發送SYN數據包,即nmap=nmap? -sS
hping3做隱蔽端口掃描:
hping3 192.168.45.129 --scan 80 -S? #參數--scan后面接單個端口或者多個端口.-S表示進行SYN掃描
hping3 192.168.45.129 --scan 80,21,25,443 -S
hping3 192.168.45.129 --scan 1-65535 -S
由抓包可得:
hping3 -c 100? -S? --spoof 192.168.45.200 -p ++1 192.168.45.129
參數-c表示發送數據包的數量
參數-S表示發送SYN數據包
--spoof:偽造源地址,后面接偽造的地址,
參數-p表示掃描的端口,++1表示每次端口號加1,那么就是發送SYN從端口1到端口100
最后面跟的是目標IP
通過抓包可以得知地址已偽造,但對于linux系統(192.168.45.129)來說,它收到了192.168.45.200的SYN數據包,那么就會給192.168.45.200回復SYN+ACK數據包,但該地址卻是kali偽造的地址,那么要查看目標系統哪些端口開放,必須登陸地址為kali偽造的地址即(192.168.45.200)進行抓包
hping3和nmap掃描端口的區別:1,hping3結果清晰明了
2,nmap首先對IP進行DNS反向解析,如果沒成功,那么便會對其端口發送數據包,默認發送SYN數據包
hping3直接向目標系統的端口發送SYN數據包,并不進行DNS反向解析
全連接端口掃描:如果單獨發送SYN數據包被被過濾,那么就使用全連接端口掃描,與目標建立三次握手連接,結果是最準確的,但容易被入侵檢測系統發現
response=sr1(IP(dst="192.168.45.129")/TCP(dport=80,flags="S"))
reply=sr1(IP(dst="192.168.45.129")/TCP(dport=80,flags="A",ack=(response[TCP].seq+1)))
抓包情況:首先kali向Linux發送SYN,Linux回復SYN+ACK給kali,但kali的系統內核不清楚kali曾給linux發送給SYN數據包,那么kali內核莫名其妙收到SYN+ACK包,那么便會返回RST請求斷開數據包給Linux,三次握手中斷,如今kali再給Linux發ACK確認數據包,Linux莫名其妙收到了ACK數據包,當然也會返回RST請求斷開數據包,具體抓包如下:
那么只要kali內核在收到SYN+ACK數據包之后,不發RST數據包,那么就可以建立完整的TCP三次握手,判斷目標主機端口是否開放
因為iptables存在于Linux內核中,通過iptables禁用內核發送RST數據包,那么就可以實現
使用nmap進行全連接端口掃描:(如果不指定端口,那么nmap默認會掃描1000個常用的端口,并不是1-1000號端口)
使用dmitry進行全連接端口掃描:
dmitry:功能簡單,但功能簡便
默認掃描150個最常用的端口
dmitry -p 192.168.45.129? #參數-p表示執行TCP端口掃描
dmitry -p 192.168.45.129 -o output? #參數-o表示把結果保存到一個文本文檔中去
使用nc進行全連接端口掃描:
nc -nv -w 1 -z 192.168.45.129 1-100:? ? ? 1-100表示掃描1-100號端口
參數-n表示不對Ip地址進行域名解析,只把其當IP來處理
參數-v表示顯示詳細信息
參數-w表示超時時間
-z表示打開用于掃描的模式
linux centos7 測試端口的連通性, 分別測試TCP端口與UDP端口
安裝nc命令
一、nc命令檢測端口的用法
1 這個需要Linux服務器里邊支持nc命令,檢查NC 是否安裝
2 安裝nc
3 探測端口
錯誤信息如下
百度了半天沒一個結果, google了一下就有結果了, 經測試成功.
4 原因分析:
-z參數原為掃描目標port是否打開, TCP三次握手成功則ok
但CentOS7新版的nc命令已取消了-z, 需輸入重定向 /dev/null 才能成功
5 探測 udp: 通過 nc -h 可以看出,只需要加個 -u 即可。
更多高級應用參考:
Linux中如何查看8080端口是否被占用?在Linux系統中,想要查看哪些端口被占用可通過命令進行查詢,比如:lsof、netstat命令。其中netstat命令是最為常見的,本文將為大家重點介紹一下,不了解的小伙伴一定要認真看完!
輸入命令:netstat -tln | grep 8080,來查看8080端口情況,按回車執行。
Linux netstat命令用于顯示網絡狀態。
利用netstat指令可讓你得知整個Linux系統的網絡情況。
語法
netstat [-acCeFghilMnNoprstuvVwx][-A網絡類型][--ip]
參數
-a或--all:顯示所有連線中的Socker。
-A網絡類型或--網絡類型:列出該網絡類型連線中的相關地址。
-c或--continuous:持續列出網絡狀態。
-C或--cache:顯示路由器配置的快取信息。
-e或--extend:顯示網絡其他相關信息。
-F或--fib:顯示路由緩存。
-g或--groups:顯示多重廣播功能群組組員名單。
-h或--help:在線幫助。
-i或--interfaces:顯示網絡界面信息表單。
-l或--listening:顯示監控中的服務器的Socket。
-M或--masquerade:顯示偽裝的網絡連線。
-n或--numeric:直接使用IP地址,而不通過域名服務器。
-N或--netlink或--symbolic:顯示網絡硬件外圍設備的符號連接名稱。
…………
參數較多,就不一一列舉了!
前言
如何確定端口是否在Linux或類unix系統下占用?怎么檢查哪些端口正在Linux服務器上被占用?Linux系統如何使用命令行檢查端口是否已經在占用?
查詢哪些端口正在服務器的網絡接口上被占用是非常重要的工作。您需要查詢打開端口以檢測入侵。除了入侵之外,出于故障排除的目的,可能有必要檢查服務器上的其他應用程序是否已經使用了某個端口。例如,您可以在同一系統上安裝Apache和Nginx服務器。因此,有必要了解Apache或Nginx是否使用TCP端口80或443。本教程提供了使用netstat、nmap和lsof命令查詢正在使用的端口并查看正在使用該端口的應用程序的步驟。
如何查詢端口是否在使用中:
檢查Linux上被占用的端口和應用程序:
Step1: 打開終端
Step2: 執行以下任意一條命令查看被占用的端口
查看端口22是否被占用:
較新版本的Linux使用以下查詢命令:
方法1: 使用lsof命令查詢占用端口
先安裝lsof命令
RHEL/CentOS系統:
Debian/Ubuntu系統安裝lsof命令
使用語法如下
OpenBSD
看到類似這樣的輸出結果:
sshd是進程名字
TCP 22表示sshd進程占用了TCP 22端口,正在監聽中(LISTEN)
1243表示sshd進程號
方法二:使用netstat查詢被占用的端口號
較新的Linux發行版已經不再默認集成netstat命令,而是使用新命令ss取代了。
如果要使用netstat命令,需要手動安裝net-tools套件:
RHEL/CentOS系統安裝net-tools套件,執行以下命令:
Debian/Ubuntu系統執行以下命令:
您可以使用netstat查詢被占用的端口和應用程序,如下所示。
執行以下命令查詢:
在Linux上,netstat命令已經廢棄了一段時間。因此,你需要使用ss命令如下:
或者:
其中ss命令選項如下:
-t : 只顯示Linux上的TCP套接字
-u : 在Linux上只顯示UDP套接字
-l : 監聽套接字。例如,TCP端口22由SSHD服務器打開。
-p : 列出打開套接字的進程名
-n : 不要解析服務名稱,即不要使用DNS
FreeBSD/MacOS X netstat 語法
FreeBSD/MacOS X查詢被占用的端口
或者
OpenBSD netstat 語法
OpenBSD查詢被占用的端口
或者
方法三:使用`nmap`命令查詢Linux被占用的端口
默認情況下,Linux發行版并沒有默認安裝nmap命令,
CentOS系統安裝nmap
Ubuntu系統安裝nmap
使用nmap查詢本機被占用的端口
查詢Linux系統被占用的UDP端口
查詢Linux系統被占用的TCP端口
你可以同時查詢被占用的TCP和UDP端口
結論:
本教程解釋了如何在Linux系統上使用命令行查詢TCP或者UDP端口是否被占用。有關更多信息,請參見nmap命令和lsof命令頁面
一、常用命令:
1,lsof -i端口號
2,netstat -tunlp|grep 端口號
這兩個命令都可以查看端口被什么進程占用。
二、lsof -i 需要 root 用戶的權限來執行,如下圖:
三、netstat命令
netstat -tunlp?用于顯示 tcp,udp 的端口和進程等相關情況。
netstat 查看端口占用語法格式:
netstat -tunlp | grep 端口號
擴展資料
一、更多 lsof 的命令擴展
1、lsof -i:8080:查看8080端口占用
2、lsof abc.txt:顯示開啟文件abc.txt的進程
3、lsof -c abc:顯示abc進程現在打開的文件
4、lsof -c -p 1234:列出進程號為1234的進程所打開的文件
5、lsof -g gid:顯示歸屬gid的進程情況
6、lsof +d /usr/local/:顯示目錄下被進程開啟的文件
7、lsof +D /usr/local/:同上,但是會搜索目錄下的目錄,時間較長
8、lsof -d 4:顯示使用fd為4的進程
9、lsof -i -U:顯示所有打開的端口和UNIX domain文件
二、更多netstat命令
1、netstat -ntlp ? //查看當前所有tcp端口
2、netstat -ntulp | grep 80 ? //查看所有80端口使用情況
3、netstat -ntulp | grep 3306 ? //查看所有3306端口使用情況
三、關閉端口
1、在查到端口占用的進程后,如果你要殺掉對應的進程可以使用 kill 命令:
kill -9 PID
2、如上實例,我們看到 8000 端口對應的 PID 為 26993,使用以下命令殺死進程:
kill -9 26993