国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

高效端口掃描:SpringBoot + nmap4j 獲取端口神器!

0
分享至

Java精選面試題(微信小程序):5000+道面試題和選擇題,真實(shí)面經(jīng),簡歷模版,包含Java基礎(chǔ)、并發(fā)、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構(gòu)設(shè)計、大廠真題等,在線隨時刷題!

序言

今天在工作的時候,領(lǐng)導(dǎo)突然安排和我說一個需求,就是根據(jù)一個 ip 和 端口去獲取對應(yīng)服務(wù)上對應(yīng)端口的信息,當(dāng)時主要是為了確定數(shù)據(jù)庫的版本和型號,比如 MySQL、Oracle 這些數(shù)據(jù)庫,我后面嘗試發(fā)現(xiàn)其他端口也可以獲取信息。

這個在公司里之前是通過 python 來寫的,python 里面剛好有這個模塊,但是 Java 沒有,所以寫這篇文章記錄一下,幫助大家以后避免踩坑。

代碼已經(jīng)提交到了我的GitHub:

https://github.com/maoshengyzx/SpringBoot

nmap4j

nmap4j 是一個用于 Java 語言的 Nmap 端口掃描器的包裝庫,它允許 Java 開發(fā)者在自己的項目中方便地調(diào)用 Nmap 的功能進(jìn)行網(wǎng)絡(luò)掃描和探測。

GitHub地址:

https://github.com/narkisr/nmap4j

在運(yùn)行這個代碼之前,我們是需要下載 nmap 的可執(zhí)行文件,地址為:

https://nmap.org/download.html#windows

這里下載第一個,下載后安裝就行了。

代碼說明

接下來和大家說一下 nmap4j 中的測試代碼,這里面有個坑,我當(dāng)時找了好久,代碼在test/org/nmap4j/Nmap4jTest.java

publicclassNmap4jTest{ @Test publicvoidbasicNmap4jUsageTest(){ try {                // 這里的路徑要改為剛才 nmap 軟件的安裝路徑    String path = "/usr/local" ;        Nmap4j nmap4j = new Nmap4j( path ) ;                // 這地方使用了 -oX 后面要跟文件名稱    nmap4j.addFlags( "-sV -T5 -O -oX -" ) ;    nmap4j.includeHosts( "localhost" ) ;    nmap4j.execute() ;    if( !nmap4j.hasError() ) {                              NMapRun nmapRun = nmap4j.getResult() ;  // 這一行一定要注釋掉,不然會一直報錯     String output = nmap4j.getOutput() ;  // 這一樣代碼意義也不大,我直接刪掉了     if( output == null ) {      fail() ;     }     String errors = nmap4j.getExecutionResults().getErrors() ;     if (errors == null ) {      fail() ;     }    }   } catch (NMapInitializationException e) {    // TODO Auto-generated catch block    e.printStackTrace();    fail() ;   } catch (NMapExecutionException e) {    // TODO Auto-generated catch block    e.printStackTrace();    fail() ;   }  } }
參數(shù)說明:

目標(biāo)選擇參數(shù):

  • -iL從文件中讀取掃描目標(biāo)列表。例如,nmap -iL targets.txt,會從targets.txt文件中讀取每行一個的 IP 地址或域名作為掃描目標(biāo)。

  • -iR隨機(jī)選擇指定數(shù)量的主機(jī)進(jìn)行掃描。如nmap -iR 100,會隨機(jī)選取 100 個主機(jī)進(jìn)行掃描。

  • --exclude 排除指定的主機(jī)或網(wǎng)絡(luò)不進(jìn)行掃描。例如,nmap 192.168.1.0/24 --exclude 192.168.1.100,192.168.1.200,將掃描192.168.1.0/24網(wǎng)段,但排除192.168.1.100192.168.1.200這兩臺主機(jī)。

  • --excludefile 從文件中讀取要排除的主機(jī)或網(wǎng)絡(luò)列表。

掃描類型參數(shù):

  • -sSTCP SYN 掃描,也稱為半開放掃描。它發(fā)送 SYN 包到目標(biāo)端口,如果收到SYN/ACK響應(yīng),就表示端口開放;如果收到 RST 響應(yīng),則表示端口關(guān)閉。這種掃描方式速度快,且不容易被目標(biāo)系統(tǒng)記錄,相對隱蔽,例如nmap -sS 192.168.1.100

  • -sTTCP 連接掃描,通過完整的 TCP 三次握手來確定端口是否開放。這種掃描方式最準(zhǔn)確,但也最容易被檢測到,如nmap -sT 192.168.1.100。

  • -sUUDP 掃描,用于檢測目標(biāo)主機(jī)上的 UDP 端口是否開放。因為 UDP 是無連接協(xié)議,所以判斷端口狀態(tài)相對復(fù)雜,nmap -sU 192.168.1.100可對指定主機(jī)進(jìn)行 UDP 掃描。

  • -sF、-sX、-sN分別是 FIN 掃描、XMAS 掃描和 NULL 掃描。這些掃描方式通過發(fā)送特殊標(biāo)志位的 TCP 包來判斷端口狀態(tài),常用于繞過一些簡單的防火墻檢測。

端口指定參數(shù):

  • -p指定要掃描的端口范圍。可以是單個端口,如-p 80;也可以是多個端口,如-p 80,443,8080;還可以是端口范圍,如-p 1-1000表示掃描 1 到 1000 號端口。

  • --top-ports掃描最常用的指定數(shù)量的端口。例如,nmap --top-ports 100 192.168.1.100會掃描目標(biāo)主機(jī)上最常用的 100 個端口。

  • -F快速掃描模式,只掃描一些常見的端口,相當(dāng)于-p 1-1024加上一些其他常用端口。

服務(wù)探測參數(shù):

  • -sV啟用服務(wù)版本探測,嘗試確定目標(biāo)主機(jī)上運(yùn)行的服務(wù)及其版本信息。例如,nmap -sV 192.168.1.100可以掃描出目標(biāo)主機(jī)開放端口上運(yùn)行的服務(wù)名稱和版本號。

  • --version-intensity設(shè)置服務(wù)版本探測的強(qiáng)度,級別越高,探測越全面,但耗時也越長,取值范圍是 0 到 9。

操作系統(tǒng)探測參數(shù):

  • -O啟用操作系統(tǒng)探測,嘗試識別目標(biāo)主機(jī)的操作系統(tǒng)類型和版本。如nmap -O 192.168.1.100

  • --osscan-limit限制操作系統(tǒng)探測只對可能的目標(biāo)進(jìn)行,這樣可以加快掃描速度,但可能會降低準(zhǔn)確性。

  • --osscan-guess更積極地猜測操作系統(tǒng)類型,當(dāng) Nmap 不確定時會給出更寬泛的猜測結(jié)果。

輸出參數(shù):

  • -oN將掃描結(jié)果以正常格式保存到指定文件。例如,nmap -oN scan_results.txt 192.168.1.100會把掃描結(jié)果保存到scan_results.txt文件中。

  • -oX將掃描結(jié)果以 XML 格式保存到指定文件,方便后續(xù)使用腳本或其他工具進(jìn)行解析和處理。

  • -oG將掃描結(jié)果以 Grep 格式保存,這種格式便于使用文本處理工具進(jìn)行分析。

  • -oA以多種格式(包括正常、XML 和 Grep 格式)保存掃描結(jié)果,文件名為指定的基本名稱加上相應(yīng)的擴(kuò)展名。

  • -v詳細(xì)輸出模式,顯示更多的掃描過程信息,如發(fā)送的數(shù)據(jù)包、收到的響應(yīng)等。使用多個v可以增加詳細(xì)程度,如-vv-vvv。

這里給大家看一下改造后的代碼:

/**  * 使用 nmap4j 工具進(jìn)行掃描  *  * @param ip    目標(biāo) ip  * @param ports 目標(biāo)端口  * @return 端口信息列表  */ @RequestMapping("/querydb") public List   querydb(@RequestParam(value = "ip") String ip, @RequestParam("ports") List ports)  {     ArrayList portInfos =  new ArrayList<>();     // 1.拼接端口     String portStr = StrUtil.join(",", ports);     //2. 指定 nmap 路徑     String path = "D:/StudyApps/nmap";     String fileName = "temp_result.xml";     Nmap4j nmap4j = new Nmap4j(path);     //3.讀取端口耗時較長,可以使用異步     CompletableFuture future = CompletableFuture.runAsync(() -> {         nmap4j.addFlags("-sV -p " + portStr + " -T5 -O -oX " + fileName);         nmap4j.includeHosts(ip);         try {             nmap4j.execute();         } catch (Exception e) {             thrownew RuntimeException(e);         }     }, threadPoolExecutor);     future.join();     //4. 獲取端口信息     return getPortInfo(portInfos, fileName); }

/**      * 獲取 ip + 端口信息,封裝為集合返回前端      *      * @param portInfos 返回前端集合      * @param fileName  臨時的 xml 文件      * @return 信息列表      */     @SneakyThrows     private List   getPortInfo(List portInfos, String fileName) {         // 獲取項目所在路徑         String projectPath = System.getProperty("user.dir");         // 拼接文件路徑         String filePath = projectPath + FileUtil.FILE_SEPARATOR + fileName;         log.info("文件路徑:{}", filePath);         // nmap 返回 xml 格式固定,使用 dom4j 解析         SAXReader reader = new SAXReader();         org.dom4j.Document document = reader.read(FileUtil.file(filePath));         org.dom4j.Element rootElement = document.getRootElement();         org.dom4j.Element element = rootElement.element("host");         org.dom4j.Element xmlPorts = element.element("ports");         List port = xmlPorts.elements( "port");         for (org.dom4j.Element port1 : port) {             Element service = port1.element("service");             String product = service.attributeValue("product");             String version = service.attributeValue("version");             NmapPortInfo nmapPortInfo = new NmapPortInfo(product, version);             portInfos.add(nmapPortInfo);         }         // 刪除臨時文件         FileUtil.del(filePath);         return portInfos;     } }

我這里就是沒有去按照官網(wǎng)上的寫法,我的思路是文件已經(jīng)下載了我直接去讀取 xml 文件解決會更快,這里是使用 dom4j 來讀取的 xml 文件。代碼就這么多,最后請求是可以獲取到數(shù)據(jù)的:

補(bǔ)充

由于這段代碼是在windows上運(yùn)行的,而在實(shí)際的環(huán)境中項目都會部署到 Linux 環(huán)境匯總,所以我不得不在 Linux 上去運(yùn)行調(diào)試這段代碼。代碼如下:

/**  * 使用 nmap4j 工具進(jìn)行掃描, linux系統(tǒng)  *  * @param ip    目標(biāo) ip  * @param ports 目標(biāo)端口  * @return 端口信息列表  */ @GetMapping("/linux/querydb") @SneakyThrows public List   linuxQuerydb(@RequestParam(value = "ip") String ip, @RequestParam("ports") List ports)  {     ArrayList portInfos =  new ArrayList<>();     // 1.拼接端口     String portStr = StrUtil.join(",", ports);     String fileName = "temp_result.xml";     //2. linux namp 命令     String nmapCommand = "nmap -sV -p " + portStr + " -T5 -O -oX " + fileName + " " + ip;     //3. 讀取端口耗時較長,可以使用異步     CompletableFuture future = CompletableFuture.runAsync(() -> {         Process nampProcess = null;         try {             // 3. 運(yùn)行命令             nampProcess = Runtime.getRuntime().exec(nmapCommand);             // 4. 等待命令執(zhí)行完成             nampProcess.waitFor();         } catch (Exception e) {             thrownew RuntimeException(e);         }     }, threadPoolExecutor);     future.join();     // 5. 獲取端口信息     return getPortInfo(portInfos, fileName); }

這里的初步思路是直接調(diào)用 Linux 的命令執(zhí)行 nmap (Linux系統(tǒng)中必須下載 nmap)。至于下載這里就不多說了,大家只需要注意下載的版本最好也為 7.95,其他版本下載的 xml 文件有問題,無法解析。

總結(jié)

忘記和大家說了,nmap4j 在maven倉庫是搜不到的,所以只通過 jar 包的方式來引入,地址為:

https://master.dl.sourceforge.net/project/nmap4j/1.1.0/org.nmap4j-1.1.0-RELEASE.zip?viasf=1

作者:發(fā)憤圖強(qiáng)的羔羊

來源:https://juejin.cn/post/7458189303063035958

公眾號“Java精選”所發(fā)表內(nèi)容注明來源的,版權(quán)歸原出處所有(無法查證版權(quán)的或者未注明出處的均來自網(wǎng)絡(luò),系轉(zhuǎn)載,轉(zhuǎn)載的目的在于傳遞更多信息,版權(quán)屬于原作者。如有侵權(quán),請聯(lián)系,筆者會第一時間刪除處理!

最近有很多人問,有沒有讀者交流群!加入方式很簡單,公眾號Java精選,回復(fù)“加群”,即可入群!

文章有幫助的話,點(diǎn)在看,轉(zhuǎn)發(fā)吧!

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
被曝生下畸形兒傳聞僅1月,闞清子官宣喜訊,連發(fā)三文表明態(tài)度

被曝生下畸形兒傳聞僅1月,闞清子官宣喜訊,連發(fā)三文表明態(tài)度

一口娛樂
2026-01-29 09:31:09
已確認(rèn),浙江有大到暴雪!今晚變天

已確認(rèn),浙江有大到暴雪!今晚變天

魯中晨報
2026-01-29 13:39:09
不敢置信!女子十二樂坊成員直播養(yǎng)不活自己,一晚上打賞不到3000

不敢置信!女子十二樂坊成員直播養(yǎng)不活自己,一晚上打賞不到3000

云中浮生
2026-01-24 21:37:46
奇葩!35歲女子4年不回家,母親來探望卻被懟,女子:就當(dāng)我死了

奇葩!35歲女子4年不回家,母親來探望卻被懟,女子:就當(dāng)我死了

娛樂帝皇丸
2026-01-28 15:18:51
16歲武漢男生凌晨離家,失聯(lián)超70小時, 父親:未帶手機(jī)現(xiàn)金,最后出現(xiàn)在橋上不見蹤跡

16歲武漢男生凌晨離家,失聯(lián)超70小時, 父親:未帶手機(jī)現(xiàn)金,最后出現(xiàn)在橋上不見蹤跡

大風(fēng)新聞
2026-01-29 13:53:22
人民日報怒批!炫富、偷稅749萬、跑國外,現(xiàn)又來“割內(nèi)地韭菜”

人民日報怒批!炫富、偷稅749萬、跑國外,現(xiàn)又來“割內(nèi)地韭菜”

小熊侃史
2026-01-18 07:20:09
港股地產(chǎn)股大漲,融創(chuàng)中國漲超30%

港股地產(chǎn)股大漲,融創(chuàng)中國漲超30%

每日經(jīng)濟(jì)新聞
2026-01-29 11:39:06
外交部:繼續(xù)深化國際執(zhí)法合作 加大力度打擊網(wǎng)賭電詐

外交部:繼續(xù)深化國際執(zhí)法合作 加大力度打擊網(wǎng)賭電詐

財聯(lián)社
2026-01-29 15:26:24
尼帕病毒來勢洶洶,建議:每家最好備6樣?xùn)|西,關(guān)鍵時刻能救命呢

尼帕病毒來勢洶洶,建議:每家最好備6樣?xùn)|西,關(guān)鍵時刻能救命呢

現(xiàn)代小青青慕慕
2026-01-28 08:59:53
阿富汗的鍋,拜登不背!

阿富汗的鍋,拜登不背!

山河路口
2026-01-28 23:12:39
心理學(xué)上有一個詞叫:梅拉賓法則(搞好人際關(guān)系最好的辦法)

心理學(xué)上有一個詞叫:梅拉賓法則(搞好人際關(guān)系最好的辦法)

經(jīng)濟(jì)觀察報
2025-09-01 10:06:25
1971年,劉思齊蒙冤入獄后向毛主席求助,毛澤東作出:娃娃們無罪

1971年,劉思齊蒙冤入獄后向毛主席求助,毛澤東作出:娃娃們無罪

史海孤雁
2026-01-27 18:02:17
瞞不住了!美媒:美軍高官已進(jìn)臺島指揮導(dǎo)彈戰(zhàn),戰(zhàn)時先炸福建沿海

瞞不住了!美媒:美軍高官已進(jìn)臺島指揮導(dǎo)彈戰(zhàn),戰(zhàn)時先炸福建沿海

史智文道
2026-01-29 16:14:14
要打就打痛!中國手段已升級,日本:中方不批準(zhǔn)駐重慶總領(lǐng)事任命

要打就打痛!中國手段已升級,日本:中方不批準(zhǔn)駐重慶總領(lǐng)事任命

通文知史
2026-01-28 14:30:03
太頂了!明明什么都沒露,卻性感得要命!

太頂了!明明什么都沒露,卻性感得要命!

貴圈真亂
2025-12-20 12:02:06
最新傷勢情況曝光,德約科維奇直言:對辛納絕不舉白旗

最新傷勢情況曝光,德約科維奇直言:對辛納絕不舉白旗

體育妞世界
2026-01-29 12:38:11
起風(fēng)了!加拿大已改口,禁止與中國簽協(xié)定,65萬噸油菜籽白買了?

起風(fēng)了!加拿大已改口,禁止與中國簽協(xié)定,65萬噸油菜籽白買了?

墨印齋
2026-01-29 11:47:54
加快男性衰老的因素:喝酒僅第5,排在第1的,很多男性還沒發(fā)現(xiàn)!

加快男性衰老的因素:喝酒僅第5,排在第1的,很多男性還沒發(fā)現(xiàn)!

醫(yī)學(xué)科普匯
2026-01-27 10:41:31
中國人一年少買了10萬輛進(jìn)口寶馬

中國人一年少買了10萬輛進(jìn)口寶馬

第一財經(jīng)資訊
2026-01-29 10:34:13
1973年,毛主席問楊振寧:萬壽無疆科學(xué)嗎?楊振寧的回答,讓主席笑了

1973年,毛主席問楊振寧:萬壽無疆科學(xué)嗎?楊振寧的回答,讓主席笑了

寄史言志
2026-01-24 17:53:13
2026-01-29 17:15:00
Java精選
Java精選
一場永遠(yuǎn)也演不完的戲
1768文章數(shù) 3859關(guān)注度
往期回顧 全部

科技要聞

周亞輝的AI新賭局:國內(nèi)太卷 出海另起爐灶

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

體育要聞

詹姆斯哭了!騎士視頻致敬41歲超巨

娛樂要聞

張譯不再隱瞞!公開回應(yīng)退圈息影真相

財經(jīng)要聞

崔東樹:中國汽車未來年銷或達(dá)5000萬輛

汽車要聞

車長超5米還帶后輪轉(zhuǎn)向 比亞迪海豹08/海獅08將亮相

態(tài)度原創(chuàng)

健康
數(shù)碼
房產(chǎn)
公開課
軍事航空

耳石癥分類型,癥狀大不同

數(shù)碼要聞

這種電熱水袋國家早已禁售:別再用了

房產(chǎn)要聞

萬科難眠夜:前董事長郁亮失聯(lián),三筆債券靠深鐵才通過展期

公開課

李玫瑾:為什么性格比能力更重要?

軍事要聞

中國代表:支持伊朗國家穩(wěn)定 武力解決不了問題

無障礙瀏覽 進(jìn)入關(guān)懷版