Skip to content

Commit

Permalink
Merge pull request #31 from CodeDead/feature/hide-unknown
Browse files Browse the repository at this point in the history
feat: added an option to hide unknown ports in the ui and in exports
  • Loading branch information
CodeDead authored Oct 13, 2024
2 parents 923d1d6 + 3f50cac commit a135d8c
Show file tree
Hide file tree
Showing 12 changed files with 108 additions and 39 deletions.
4 changes: 4 additions & 0 deletions src/contexts/MainContextProvider/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -47,7 +49,9 @@ const initState = {
threads,
timeout,
noClosed,
noUnknown,
exportNoClosed,
exportNoUnknown,
sort,
scanResults: null,
themeToggle,
Expand Down
2 changes: 2 additions & 0 deletions src/languages/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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"
}
2 changes: 2 additions & 0 deletions src/languages/es_es.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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"
}
2 changes: 2 additions & 0 deletions src/languages/fr_fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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"
}
2 changes: 2 additions & 0 deletions src/languages/it_it.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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"
}
2 changes: 2 additions & 0 deletions src/languages/nl_nl.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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"
}
2 changes: 2 additions & 0 deletions src/languages/zh_cn.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
"threads": "运行线程",
"timeout": "超时时间(毫秒)",
"hideClosedPorts": "隐藏未开启的端口",
"hideUnknownPorts": "隐藏未知的端口",
"sort": "按端口号对扫描结果排序",
"clear": "清空",
"open": "打开",
Expand All @@ -83,5 +84,6 @@
"runningLatestVersion": "已是最新版本!",
"themeToggleInTopBar": "在顶部栏显示明暗主题切换",
"exportIncludeClosedPorts": "导出时包含关闭的端口",
"exportIncludeUnknownPorts": "导出时包含未知的端口",
"unknown": "未知"
}
2 changes: 2 additions & 0 deletions src/reducers/MainReducer/Actions/actionTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';
12 changes: 12 additions & 0 deletions src/reducers/MainReducer/Actions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
});
17 changes: 17 additions & 0 deletions src/reducers/MainReducer/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) => {
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
Expand Down
13 changes: 8 additions & 5 deletions src/routes/Home/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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];

Expand Down Expand Up @@ -162,24 +162,27 @@ 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') {
let exportJson = JSON.parse(JSON.stringify(res));
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 = '<!DOCTYPE html><html lang="en"><head><title>Advanced PortChecker</title><style>table, th, td {border: 1px solid black;}</style></head><body><table><thead><tr><th>Address</th><th>Port</th><th>Host Name</th><th>Port Status</th><th>Scan Date</th></tr></thead><tbody>';
res.forEach((e) => {
if (!exportNoClosed && e.portStatus === 'Closed') return;
if ((!exportNoClosed && e.portStatus === 'Closed') || (!exportNoUnknown && e.portStatus === 'Unknown')) return;
toExport += `<tr><td>${e.address}</td><td>${e.port}</td><td>${e.hostName}</td><td>${e.portStatus}</td><td>${e.scanDate}</td></tr>`;
});
toExport += '</tbody></table></body></html>';
Expand Down Expand Up @@ -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;
}
Expand Down
87 changes: 53 additions & 34 deletions src/routes/Settings/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ import {
setAutoUpdate,
setCheckedForUpdates,
setColorOnDark,
setError, setExportNoClosed,
setError, setExportNoClosed, setExportNoUnknown,
setLanguageIndex,
setNoClosed,
setNoClosed, setNoUnknown,
setPageIndex,
setSort,
setThemeIndex, setThemeToggle,
Expand All @@ -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];

Expand Down Expand Up @@ -195,6 +196,56 @@ const Settings = () => {
)}
label={language.themeToggleInTopBar}
/>
<FormControlLabel
control={(
<Checkbox
checked={noClosed}
onChange={(e) => d1(setNoClosed(e.target.checked))}
value="noClosed"
/>
)}
label={language.hideClosedPorts}
/>
<FormControlLabel
control={(
<Checkbox
checked={noUnknown}
onChange={(e) => d1(setNoUnknown(e.target.checked))}
value="noUnknown"
/>
)}
label={language.hideUnknownPorts}
/>
<FormControlLabel
control={(
<Checkbox
checked={exportNoClosed}
onChange={(e) => d1(setExportNoClosed(e.target.checked))}
value="exportNoClosed"
/>
)}
label={language.exportIncludeClosedPorts}
/>
<FormControlLabel
control={(
<Checkbox
checked={exportNoUnknown}
onChange={(e) => d1(setExportNoUnknown(e.target.checked))}
value="exportNoUnknown"
/>
)}
label={language.exportIncludeUnknownPorts}
/>
<FormControlLabel
control={(
<Checkbox
checked={sort}
onChange={(e) => d1(setSort(e.target.checked))}
value="sort"
/>
)}
label={language.sort}
/>
<FormControl variant="outlined" sx={{ mt: 2 }}>
<InputLabel id="language-label">{language.language}</InputLabel>
<Select
Expand Down Expand Up @@ -234,38 +285,6 @@ const Settings = () => {
min={1}
fullWidth
/>
<FormGroup>
<FormControlLabel
control={(
<Checkbox
checked={noClosed}
onChange={(e) => d1(setNoClosed(e.target.checked))}
value="noClosed"
/>
)}
label={language.hideClosedPorts}
/>
<FormControlLabel
control={(
<Checkbox
checked={exportNoClosed}
onChange={(e) => d1(setExportNoClosed(e.target.checked))}
value="exportNoClosed"
/>
)}
label={language.exportIncludeClosedPorts}
/>
<FormControlLabel
control={(
<Checkbox
checked={sort}
onChange={(e) => d1(setSort(e.target.checked))}
value="sort"
/>
)}
label={language.sort}
/>
</FormGroup>
</CardContent>
</Card>
<Card sx={{ mt: 2 }}>
Expand Down

0 comments on commit a135d8c

Please sign in to comment.