mirror of
https://github.com/Lissy93/web-check.git
synced 2025-05-22 15:10:43 +02:00
Working on traceroute component
This commit is contained in:
parent
a8981b8ca7
commit
a6ecbd3406
@ -76,6 +76,11 @@
|
|||||||
to = "/.netlify/functions/check-ports"
|
to = "/.netlify/functions/check-ports"
|
||||||
status = 301
|
status = 301
|
||||||
force = true
|
force = true
|
||||||
|
[[redirects]]
|
||||||
|
from = "/trace-route"
|
||||||
|
to = "/.netlify/functions/trace-route"
|
||||||
|
status = 301
|
||||||
|
force = true
|
||||||
|
|
||||||
# For router history mode, ensure pages land on index
|
# For router history mode, ensure pages land on index
|
||||||
[[redirects]]
|
[[redirects]]
|
||||||
|
35
server/lambda/trace-route.js
Normal file
35
server/lambda/trace-route.js
Normal 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}` }),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
28
src/components/Results/TraceRoute.tsx
Normal file
28
src/components/Results/TraceRoute.tsx
Normal 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;
|
@ -145,6 +145,7 @@ const jobNames = [
|
|||||||
'txt-records',
|
'txt-records',
|
||||||
'status',
|
'status',
|
||||||
'ports',
|
'ports',
|
||||||
|
'trace-route',
|
||||||
// 'server-info',
|
// 'server-info',
|
||||||
'whois',
|
'whois',
|
||||||
] as const;
|
] as const;
|
||||||
|
@ -26,6 +26,8 @@ import RedirectsCard from 'components/Results/Redirects';
|
|||||||
import TxtRecordCard from 'components/Results/TxtRecords';
|
import TxtRecordCard from 'components/Results/TxtRecords';
|
||||||
import ServerStatusCard from 'components/Results/ServerStatus';
|
import ServerStatusCard from 'components/Results/ServerStatus';
|
||||||
import OpenPortsCard from 'components/Results/OpenPorts';
|
import OpenPortsCard from 'components/Results/OpenPorts';
|
||||||
|
import TraceRouteCard from 'components/Results/TraceRoute';
|
||||||
|
|
||||||
import ProgressBar, { LoadingJob, LoadingState, initialJobs } from 'components/misc/ProgressBar';
|
import ProgressBar, { LoadingJob, LoadingState, initialJobs } from 'components/misc/ProgressBar';
|
||||||
import keys from 'utils/get-keys';
|
import keys from 'utils/get-keys';
|
||||||
import { determineAddressType, AddressType } from 'utils/address-type-checker';
|
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()),
|
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 */
|
/* Cancel remaining jobs after 10 second timeout */
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const checkJobs = () => {
|
const checkJobs = () => {
|
||||||
@ -286,6 +296,7 @@ const Results = (): JSX.Element => {
|
|||||||
{ title: 'DNS Records', result: dnsResults, Component: DnsRecordsCard },
|
{ title: 'DNS Records', result: dnsResults, Component: DnsRecordsCard },
|
||||||
{ title: 'Performance', result: lighthouseResults, Component: LighthouseCard },
|
{ title: 'Performance', result: lighthouseResults, Component: LighthouseCard },
|
||||||
{ title: 'Cookies', result: cookieResults, Component: CookiesCard },
|
{ title: 'Cookies', result: cookieResults, Component: CookiesCard },
|
||||||
|
{ title: 'Trace Route', result: traceRouteResults, Component: TraceRouteCard },
|
||||||
{ title: 'Screenshot', result: lighthouseResults?.fullPageScreenshot?.screenshot, Component: ScreenshotCard },
|
{ title: 'Screenshot', result: lighthouseResults?.fullPageScreenshot?.screenshot, Component: ScreenshotCard },
|
||||||
{ title: 'Technologies', result: technologyResults, Component: BuiltWithCard },
|
{ title: 'Technologies', result: technologyResults, Component: BuiltWithCard },
|
||||||
{ title: 'Crawl Rules', result: robotsTxtResults, Component: RobotsTxtCard },
|
{ title: 'Crawl Rules', result: robotsTxtResults, Component: RobotsTxtCard },
|
||||||
|
Loading…
Reference in New Issue
Block a user