diff --git a/src/components/Results/OpenPorts.tsx b/src/components/Results/OpenPorts.tsx
new file mode 100644
index 0000000..9a85c59
--- /dev/null
+++ b/src/components/Results/OpenPorts.tsx
@@ -0,0 +1,36 @@
+
+import styled from 'styled-components';
+import colors from 'styles/colors';
+import Card from 'components/Form/Card';
+import Heading from 'components/Form/Heading';
+import Row from 'components/Form/Row';
+
+const Outer = styled(Card)`
+
+small {
+ margin-top: 1rem;
+ opacity: 0.5;
+}
+`;
+
+const OpenPortsCard = (portData: any): JSX.Element => {
+ return (
+
+ Open Ports
+
+ {portData.openPorts.map((port: any) => (
+
+ {port}
+
+ )
+ )}
+
+
+ Unable to establish connections to:
+ {portData.failedPorts.join(', ')}
+
+
+ );
+}
+
+export default OpenPortsCard;
diff --git a/src/components/misc/ProgressBar.tsx b/src/components/misc/ProgressBar.tsx
index f3988cf..b54882d 100644
--- a/src/components/misc/ProgressBar.tsx
+++ b/src/components/misc/ProgressBar.tsx
@@ -144,6 +144,7 @@ const jobNames = [
'redirects',
'txt-records',
'status',
+ 'ports',
// 'server-info',
'whois',
] as const;
diff --git a/src/pages/Results.tsx b/src/pages/Results.tsx
index 707fac9..3116762 100644
--- a/src/pages/Results.tsx
+++ b/src/pages/Results.tsx
@@ -25,6 +25,7 @@ import DnsRecordsCard from 'components/Results/DnsRecords';
import RedirectsCard from 'components/Results/Redirects';
import TxtRecordCard from 'components/Results/TxtRecords';
import ServerStatusCard from 'components/Results/ServerStatus';
+import OpenPortsCard from 'components/Results/OpenPorts';
import ProgressBar, { LoadingJob, LoadingState, initialJobs } from 'components/misc/ProgressBar';
import keys from 'utils/get-keys';
import { determineAddressType, AddressType } from 'utils/address-type-checker';
@@ -198,6 +199,16 @@ const Results = (): JSX.Element => {
.then(res => parseShodanResults(res)),
});
+
+ // Check for open ports
+ const [portsResults] = useMotherHook({
+ jobId: 'ports',
+ updateLoadingJobs,
+ addressInfo: { address: ipAddress, addressType: 'ipV4', expectedAddressTypes: ['ipV4', 'ipV6'] },
+ fetchRequest: () => fetch(`/check-ports?url=${ipAddress}`)
+ .then(res => res.json()),
+ });
+
// Fetch and parse domain whois results
const [whoIsResults] = useMotherHook({
jobId: 'whois',
@@ -282,6 +293,7 @@ const Results = (): JSX.Element => {
{ title: 'Redirects', result: redirectResults, Component: RedirectsCard },
{ title: 'TXT Records', result: txtRecordResults, Component: TxtRecordCard },
{ title: 'Server Status', result: serverStatusResults, Component: ServerStatusCard },
+ { title: 'Open Ports', result: portsResults, Component: OpenPortsCard },
];
return (