diff --git a/src/contexts/MainContextProvider/index.jsx b/src/contexts/MainContextProvider/index.jsx index c2a2d48..396d585 100644 --- a/src/contexts/MainContextProvider/index.jsx +++ b/src/contexts/MainContextProvider/index.jsx @@ -16,7 +16,9 @@ const colorOnDark = localStorage.colorOnDark ? (localStorage.colorOnDark === 'tr const threads = localStorage.threads ? parseFloat(localStorage.threads) : 1; const timeout = localStorage.timeout ? parseFloat(localStorage.timeout) : 250; const noClosed = localStorage.noClosed ? (localStorage.noClosed === 'true') : false; +const noUnknown = localStorage.noUnknown ? (localStorage.noUnknown === 'true') : false; const exportNoClosed = localStorage.exportNoClosed ? (localStorage.exportNoClosed === 'true') : true; +const exportNoUnknown = localStorage.exportNoUnknown ? (localStorage.exportNoUnknown === 'true') : true; const sort = localStorage.sort ? (localStorage.sort === 'true') : true; const themeToggle = localStorage.themeToggle ? (localStorage.themeToggle === 'true') : true; @@ -47,7 +49,9 @@ const initState = { threads, timeout, noClosed, + noUnknown, exportNoClosed, + exportNoUnknown, sort, scanResults: null, themeToggle, diff --git a/src/languages/en_us.json b/src/languages/en_us.json index 112ab2a..f9e405d 100644 --- a/src/languages/en_us.json +++ b/src/languages/en_us.json @@ -73,6 +73,7 @@ "threads": "Threads", "timeout": "Timeout (milliseconds)", "hideClosedPorts": "Hide closed ports", + "hideUnknownPorts": "Hide unknown ports", "sort": "Sort results by port number", "clear": "Clear", "open": "Open", @@ -83,5 +84,6 @@ "runningLatestVersion": "You are running the latest version.", "themeToggleInTopBar": "Toggle theme in top bar", "exportIncludeClosedPorts": "Include closed ports in exports", + "exportIncludeUnknownPorts": "Include unknown ports in exports", "unknown": "Unknown" } diff --git a/src/languages/es_es.json b/src/languages/es_es.json index d175bc8..d62c89e 100644 --- a/src/languages/es_es.json +++ b/src/languages/es_es.json @@ -73,6 +73,7 @@ "threads": "Hilos", "timeout": "Tiempo de espera (milisegundos)", "hideClosedPorts": "Ocultar puertos cerrados", + "hideUnknownPorts": "Ocultar puertos desconocidos", "sort": "Ordenar resultados por número de puerto", "clear": "Limpiar todo", "open": "Abierto", @@ -83,5 +84,6 @@ "runningLatestVersion": "Estás ejecutando la última versión.", "themeToggleInTopBar": "Alternar tema en la barra superior", "exportIncludeClosedPorts": "Incluir puertos cerrados en las exportaciones", + "exportIncludeUnknownPorts": "Incluir puertos desconocidos en las exportaciones", "unknown": "Desconocido" } diff --git a/src/languages/fr_fr.json b/src/languages/fr_fr.json index 9bf4e11..ff23e58 100644 --- a/src/languages/fr_fr.json +++ b/src/languages/fr_fr.json @@ -73,6 +73,7 @@ "threads": "Threads", "timeout": "Délai d'attente (en millisecondes)", "hideClosedPorts": "Masquer les ports fermés", + "hideUnknownPorts": "Masquer les ports inconnus", "sort": "Trier les résultats par numéro de port", "clear": "Effacer", "open": "Ouvert", @@ -83,5 +84,6 @@ "runningLatestVersion": "Vous utilisez la dernière version.", "themeToggleInTopBar": "Basculer le thème dans la barre supérieure", "exportIncludeClosedPorts": "Inclure les ports fermés dans les exportations", + "exportIncludeUnknownPorts": "Inclure les ports inconnus dans les exportations", "unknown": "Inconnu" } diff --git a/src/languages/it_it.json b/src/languages/it_it.json index 5dec180..005c15c 100644 --- a/src/languages/it_it.json +++ b/src/languages/it_it.json @@ -73,6 +73,7 @@ "threads": "Thread", "timeout": "Timeout (millisecondi)", "hideClosedPorts": "Nascondi porte chiuse", + "hideUnknownPorts": "Nascond porta sconosciuta", "sort": "Ordina risultati per numero di porta", "clear": "Azzera", "open": "Apri", @@ -83,5 +84,6 @@ "runningLatestVersion": "La versione in uso è aggiornata.", "themeToggleInTopBar": "Attiva/disattiva tema nella barra superiore", "exportIncludeClosedPorts": "Includi porte chiuse nelle esportazioni", + "exportIncludeUnknownPorts": "Includi porte sconosciute nelle esportazioni", "unknown": "Sconosciuto" } diff --git a/src/languages/nl_nl.json b/src/languages/nl_nl.json index 4377ba0..8013321 100644 --- a/src/languages/nl_nl.json +++ b/src/languages/nl_nl.json @@ -73,6 +73,7 @@ "threads": "Threads", "timeout": "Timeout (milliseconden)", "hideClosedPorts": "Verberg gesloten poorten", + "hideUnknownPorts": "Verberg onbekende poorten", "sort": "Sorteer volgens poortnummer", "clear": "Wissen", "open": "Open", @@ -83,5 +84,6 @@ "runningLatestVersion": "U gebruikt de laatste versie.", "themeToggleInTopBar": "Thema toggle in de bovenste balk", "exportIncludeClosedPorts": "Gesloten poorten opnemen in export", + "exportIncludeUnknownPorts": "Onbekende poorten opnemen in export", "unknown": "Onbekend" } diff --git a/src/languages/zh_cn.json b/src/languages/zh_cn.json index 3e0550e..51fb7c5 100644 --- a/src/languages/zh_cn.json +++ b/src/languages/zh_cn.json @@ -73,6 +73,7 @@ "threads": "运行线程", "timeout": "超时时间(毫秒)", "hideClosedPorts": "隐藏未开启的端口", + "hideUnknownPorts": "隐藏未知的端口", "sort": "按端口号对扫描结果排序", "clear": "清空", "open": "打开", @@ -83,5 +84,6 @@ "runningLatestVersion": "已是最新版本!", "themeToggleInTopBar": "在顶部栏显示明暗主题切换", "exportIncludeClosedPorts": "导出时包含关闭的端口", + "exportIncludeUnknownPorts": "导出时包含未知的端口", "unknown": "未知" } diff --git a/src/reducers/MainReducer/Actions/actionTypes.js b/src/reducers/MainReducer/Actions/actionTypes.js index 100860a..dc9a161 100644 --- a/src/reducers/MainReducer/Actions/actionTypes.js +++ b/src/reducers/MainReducer/Actions/actionTypes.js @@ -16,8 +16,10 @@ export const SET_IS_SCANNING = 'SET_IS_SCANNING'; export const SET_THREADS = 'SET_THREADS'; export const SET_TIMEOUT = 'SET_TIMEOUT'; export const SET_NO_CLOSED = 'SET_NO_CLOSED'; +export const SET_NO_UNKNOWN = 'SET_NO_UNKNOWN'; export const SET_SORT = 'SET_SORT'; export const SET_SCAN_RESULTS = 'SET_SCAN_RESULTS'; export const SET_THEME_TOGGLE = 'SET_THEME_TOGGLE'; export const SET_EXPORT_NO_CLOSED = 'SET_EXPORT_NO_CLOSED'; +export const SET_EXPORT_NO_UNKNOWN = 'SET_EXPORT_NO_UNKNOWN'; export const SET_IS_CANCELLING = 'SET_IS_CANCELLING'; diff --git a/src/reducers/MainReducer/Actions/index.js b/src/reducers/MainReducer/Actions/index.js index ecd7b09..8dc9fe7 100644 --- a/src/reducers/MainReducer/Actions/index.js +++ b/src/reducers/MainReducer/Actions/index.js @@ -8,11 +8,13 @@ import { SET_END_PORT, SET_ERROR, SET_EXPORT_NO_CLOSED, + SET_EXPORT_NO_UNKNOWN, SET_IS_CANCELLING, SET_IS_SCANNING, SET_LANGUAGE_INDEX, SET_LOADING, SET_NO_CLOSED, + SET_NO_UNKNOWN, SET_PAGE_INDEX, SET_SCAN_RESULTS, SET_SORT, @@ -163,3 +165,13 @@ export const setIsCancelling = (value) => ({ type: SET_IS_CANCELLING, payload: value, }); + +export const setNoUnknown = (value) => ({ + type: SET_NO_UNKNOWN, + payload: value, +}); + +export const setExportNoUnknown = (value) => ({ + type: SET_EXPORT_NO_UNKNOWN, + payload: value, +}); diff --git a/src/reducers/MainReducer/index.js b/src/reducers/MainReducer/index.js index 9cfc15d..0aa6a3a 100644 --- a/src/reducers/MainReducer/index.js +++ b/src/reducers/MainReducer/index.js @@ -22,6 +22,8 @@ import { SET_THEME_TOGGLE, SET_EXPORT_NO_CLOSED, SET_IS_CANCELLING, + SET_NO_UNKNOWN, + SET_EXPORT_NO_UNKNOWN, } from './Actions/actionTypes'; const MainReducer = (state, action) => { @@ -64,8 +66,11 @@ const MainReducer = (state, action) => { threads: 1, timeout: 300, noClosed: false, + noHidden: false, sort: true, themeToggle: true, + exportNoClosed: true, + exportNoHidden: true, }; case SET_AUTO_UPDATE: localStorage.autoUpdate = action.payload; @@ -173,6 +178,18 @@ const MainReducer = (state, action) => { ...state, isCancelling: action.payload, }; + case SET_NO_UNKNOWN: + localStorage.noUnknown = action.payload; + return { + ...state, + noUnknown: action.payload, + }; + case SET_EXPORT_NO_UNKNOWN: + localStorage.exportNoUnknown = action.payload; + return { + ...state, + exportNoUnknown: action.payload, + }; default: return state; } diff --git a/src/routes/Home/index.jsx b/src/routes/Home/index.jsx index 45ca9db..6d5097c 100644 --- a/src/routes/Home/index.jsx +++ b/src/routes/Home/index.jsx @@ -37,7 +37,7 @@ const Home = () => { const { languages, languageIndex, address, startPort, endPort, timeout, threads, noClosed, sort, isScanning, scanResults, exportNoClosed, - isCancelling, + isCancelling, noUnknown, exportNoUnknown, } = state; const language = languages[languageIndex]; @@ -162,7 +162,7 @@ const Home = () => { if (type === 'text/plain') { res.forEach((e) => { - if (!exportNoClosed && e.portStatus === 'Closed') return; + if ((!exportNoClosed && e.portStatus === 'Closed') || (!exportNoUnknown && e.portStatus === 'Unknown')) return; toExport += `${e.address} ${e.port} ${e.hostName} ${e.portStatus} ${e.scanDate}\n`; }); } else if (type === 'application/json') { @@ -170,16 +170,19 @@ const Home = () => { if (!exportNoClosed) { exportJson = exportJson.filter((e) => e.portStatus !== 'Closed'); } + if (!exportNoUnknown) { + exportJson = exportJson.filter((e) => e.portStatus !== 'Unknown'); + } toExport = JSON.stringify(exportJson, null, 2); } else if (type === 'text/csv') { res.forEach((e) => { - if (!exportNoClosed && e.portStatus === 'Closed') return; + if ((!exportNoClosed && e.portStatus === 'Closed') || (!exportNoUnknown && e.portStatus === 'Unknown')) return; toExport += `"${e.address.replaceAll('"', '""')}","${e.port}","${e.hostName.replaceAll('"', '""')}","${e.portStatus.replaceAll('"', '""')}","${e.scanDate.replaceAll('"', '""')}",\n`; }); } else if (type === 'text/html') { toExport = 'Advanced PortChecker'; res.forEach((e) => { - if (!exportNoClosed && e.portStatus === 'Closed') return; + if ((!exportNoClosed && e.portStatus === 'Closed') || (!exportNoUnknown && e.portStatus === 'Unknown')) return; toExport += ``; }); toExport += '
AddressPortHost NamePort StatusScan Date
${e.address}${e.port}${e.hostName}${e.portStatus}${e.scanDate}
'; @@ -286,7 +289,7 @@ const Home = () => { if (scanResults && scanResults.length > 0) { // eslint-disable-next-line no-restricted-syntax for (const res of scanResults) { - if (noClosed && res.portStatus === 'Closed') { + if ((noClosed && res.portStatus === 'Closed') || (noUnknown && res.portStatus === 'Unknown')) { // eslint-disable-next-line no-continue continue; } diff --git a/src/routes/Settings/index.jsx b/src/routes/Settings/index.jsx index a90ab56..c125a43 100644 --- a/src/routes/Settings/index.jsx +++ b/src/routes/Settings/index.jsx @@ -42,9 +42,9 @@ import { setAutoUpdate, setCheckedForUpdates, setColorOnDark, - setError, setExportNoClosed, + setError, setExportNoClosed, setExportNoUnknown, setLanguageIndex, - setNoClosed, + setNoClosed, setNoUnknown, setPageIndex, setSort, setThemeIndex, setThemeToggle, @@ -64,6 +64,7 @@ const Settings = () => { const { languageIndex, autoUpdate, colorOnDark, themeIndex, themeType, threads, timeout, noClosed, sort, themeToggle, exportNoClosed, + noUnknown, exportNoUnknown, } = state; const language = state.languages[languageIndex]; @@ -195,6 +196,56 @@ const Settings = () => { )} label={language.themeToggleInTopBar} /> + d1(setNoClosed(e.target.checked))} + value="noClosed" + /> + )} + label={language.hideClosedPorts} + /> + d1(setNoUnknown(e.target.checked))} + value="noUnknown" + /> + )} + label={language.hideUnknownPorts} + /> + d1(setExportNoClosed(e.target.checked))} + value="exportNoClosed" + /> + )} + label={language.exportIncludeClosedPorts} + /> + d1(setExportNoUnknown(e.target.checked))} + value="exportNoUnknown" + /> + )} + label={language.exportIncludeUnknownPorts} + /> + d1(setSort(e.target.checked))} + value="sort" + /> + )} + label={language.sort} + /> {language.language}