Compare commits

...

8 Commits

Author SHA1 Message Date
83fab5dbd3 1.0.12 2023-08-01 15:05:26 +02:00
174ba7f153 fix(core): update 2023-08-01 15:05:25 +02:00
be520e9dac 1.0.11 2023-08-01 13:02:05 +02:00
fd9211393b fix(core): update 2023-08-01 13:02:04 +02:00
5abf3bc0aa 1.0.10 2023-08-01 13:01:48 +02:00
9eb81694c7 fix(core): update 2023-08-01 13:01:48 +02:00
4978d56330 1.0.9 2023-08-01 12:49:59 +02:00
c13549ac82 fix(core): update 2023-08-01 12:49:59 +02:00
6 changed files with 64 additions and 3 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@apiclient.xyz/abuse.ch",
"version": "1.0.8",
"version": "1.0.12",
"private": false,
"description": "an unofficial client to retrieve abuse.ch data",
"main": "dist_ts/index.js",

View File

@ -13,4 +13,11 @@ tap.test('should deal with UrlHouse data', async () => {
console.log(data.length);
});
tap.test('should deal with FeodoTracker data', async () => {
const feodoTracker = new abuseCh.FeodoTracker();
const data = await feodoTracker.getData();
console.log(data.length);
console.log(data[1]);
});
tap.start();

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@apiclient.xyz/abuse.ch',
version: '1.0.8',
version: '1.0.12',
description: 'an unofficial client to retrieve abuse.ch data'
}

View File

@ -0,0 +1,52 @@
import * as plugins from './plugins.js';
import * as paths from './paths.js';
import * as helpers from './helpers.js';
export interface IFeodoTrackerData {
ip_address: string;
port: number;
status: string;
hostname: string | null;
as_number: number;
as_name: string;
country: string;
first_seen: string;
last_online: string;
malware: string;
}
export class FeodoTracker {
private static readonly FEODO_TRACKER_API_URL: string = 'https://feodotracker.abuse.ch/downloads/ipblocklist.json';
public async getData(): Promise<IFeodoTrackerData[]> {
const response = await plugins.nodeFetch(FeodoTracker.FEODO_TRACKER_API_URL, {
...(helpers.findProxy() ? {
agent: helpers.getAgent(),
} : {})
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data: IFeodoTrackerData[] = await response.json() as IFeodoTrackerData[];
// Ensure the data is an array and has the expected structure
if (!Array.isArray(data) || !data.every(item =>
typeof item.ip_address === 'string' &&
typeof item.port === 'number' &&
(typeof item.hostname === 'string' || item.hostname === null) &&
typeof item.as_number === 'number' &&
typeof item.as_name === 'string' &&
typeof item.country === 'string' &&
typeof item.first_seen === 'string' &&
typeof item.last_online === 'string' &&
typeof item.malware === 'string'
)) {
throw new Error(`Invalid data structure!`);
}
return data;
}
}

View File

@ -1,2 +1,3 @@
export * from './abuse.ch.classes.urlhouse.js';
export * from './abuse.ch.classes.feodotracker.js';
export * from './abuse.ch.classes.threatfox.js';
export * from './abuse.ch.classes.urlhouse.js';

View File

@ -5,3 +5,4 @@ export const nogitDir = plugins.path.join(packageDir, '.nogit');
export const urlHouseTmp = plugins.path.join(nogitDir, 'tmp.urlhaus');
export const threatFoxTmp = plugins.path.join(nogitDir, 'tmp.threatfox');
export const feodoTrackerTmp = plugins.path.join(nogitDir, 'tmp.feodotracker');