Working on traceroute component

This commit is contained in:
Alicia Sykes 2023-07-02 18:03:18 +01:00
parent a8981b8ca7
commit a6ecbd3406
5 changed files with 80 additions and 0 deletions

View File

@ -76,6 +76,11 @@
to = "/.netlify/functions/check-ports"
status = 301
force = true
[[redirects]]
from = "/trace-route"
to = "/.netlify/functions/trace-route"
status = 301
force = true
# For router history mode, ensure pages land on index
[[redirects]]

View File

@ -0,0 +1,35 @@
const traceroute = require('traceroute');
const util = require('util');
const url = require('url');
// Convert traceroute.trace method to return a Promise
const traceroutePromise = util.promisify(traceroute.trace);
exports.handler = async function(event, context) {
const urlString = event.queryStringParameters.url;
try {
if (!urlString) {
throw new Error('URL parameter is missing!');
}
// Parse the URL and get the hostname
const urlObject = url.parse(urlString);
const host = urlObject.hostname;
if (!host) {
throw new Error('Invalid URL provided');
}
const result = await traceroutePromise(host);
return {
statusCode: 200,
body: JSON.stringify({ message: "Traceroute completed!", result }),
};
} catch (err) {
return {
statusCode: 500,
body: JSON.stringify({ message: `Error: ${err.message}` }),
};
}
};

View File

@ -0,0 +1,28 @@
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)``;
const TraceRouteCard = (traceRouteResponse: any): JSX.Element => {
console.log(traceRouteResponse.result);
const routes = traceRouteResponse.result;
console.log(Object.keys(routes));
return (
<Outer>
<Heading as="h3" align="left" color={colors.primary}>Trace Route</Heading>
{routes.map((route: any) => (
<Row lbl="" val="">
{/* <span>{route}</span> */}
<span>{Object.keys(route)[0]}</span>
</Row>
)
)}
</Outer>
);
}
export default TraceRouteCard;

View File

@ -145,6 +145,7 @@ const jobNames = [
'txt-records',
'status',
'ports',
'trace-route',
// 'server-info',
'whois',
] as const;

View File

@ -26,6 +26,8 @@ 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 TraceRouteCard from 'components/Results/TraceRoute';
import ProgressBar, { LoadingJob, LoadingState, initialJobs } from 'components/misc/ProgressBar';
import keys from 'utils/get-keys';
import { determineAddressType, AddressType } from 'utils/address-type-checker';
@ -253,6 +255,14 @@ const Results = (): JSX.Element => {
fetchRequest: () => fetch(`/server-status?url=${address}`).then(res => res.json()),
});
// Get trace route for a given hostname
const [traceRouteResults] = useMotherHook({
jobId: 'trace-route',
updateLoadingJobs,
addressInfo: { address, addressType, expectedAddressTypes: urlTypeOnly },
fetchRequest: () => fetch(`/trace-route?url=${address}`).then(res => res.json()),
});
/* Cancel remaining jobs after 10 second timeout */
useEffect(() => {
const checkJobs = () => {
@ -286,6 +296,7 @@ const Results = (): JSX.Element => {
{ title: 'DNS Records', result: dnsResults, Component: DnsRecordsCard },
{ title: 'Performance', result: lighthouseResults, Component: LighthouseCard },
{ title: 'Cookies', result: cookieResults, Component: CookiesCard },
{ title: 'Trace Route', result: traceRouteResults, Component: TraceRouteCard },
{ title: 'Screenshot', result: lighthouseResults?.fullPageScreenshot?.screenshot, Component: ScreenshotCard },
{ title: 'Technologies', result: technologyResults, Component: BuiltWithCard },
{ title: 'Crawl Rules', result: robotsTxtResults, Component: RobotsTxtCard },