0

Get Top Attack Pairs (origin and target locations) By Layer 7 Attacks

by
Published Nov 16, 2023

Get the top attacks from origin to target location. Values are a percentage out of the total layer 7 attacks (with billing country). The attack magnitude can be defined by the number of mitigated requests or by the number of zones affected. You can optionally limit the number of attacks per origin/target location (useful if all the top attacks are from or to the same location).

Script cloudflare Verified

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 403 days ago
1
type Cloudflare = {
2
  token: string;
3
  email: string;
4
  key: string;
5
};
6
/**
7
 * Get Top Attack Pairs (origin and target locations) By Layer 7 Attacks
8
 * Get the top attacks from origin to target location. Values are a percentage out of the total layer 7 attacks (with billing country). The attack magnitude can be defined by the number of mitigated requests or by the number of zones affected. You can optionally limit the number of attacks per origin/target location (useful if all the top attacks are from or to the same location).
9
 */
10
export async function main(
11
  auth: Cloudflare,
12
  limit: string | undefined,
13
  name: string | undefined,
14
  dateRange: string | undefined,
15
  dateStart: string | undefined,
16
  dateEnd: string | undefined,
17
  asn: string | undefined,
18
  location: string | undefined,
19
  limitDirection: "ORIGIN" | "TARGET" | undefined,
20
  limitPerLocation: string | undefined,
21
  magnitude: "AFFECTED_ZONES" | "MITIGATED_REQUESTS" | undefined,
22
  format: "JSON" | "CSV" | undefined
23
) {
24
  const url = new URL(
25
    `https://api.cloudflare.com/client/v4/radar/attacks/layer7/top/attacks`
26
  );
27
  for (const [k, v] of [
28
    ["limit", limit],
29
    ["name", name],
30
    ["dateRange", dateRange],
31
    ["dateStart", dateStart],
32
    ["dateEnd", dateEnd],
33
    ["asn", asn],
34
    ["location", location],
35
    ["limitDirection", limitDirection],
36
    ["limitPerLocation", limitPerLocation],
37
    ["magnitude", magnitude],
38
    ["format", format],
39
  ]) {
40
    if (v !== undefined && v !== "") {
41
      url.searchParams.append(k, v);
42
    }
43
  }
44
  const response = await fetch(url, {
45
    method: "GET",
46
    headers: {
47
      "X-AUTH-EMAIL": auth.email,
48
      "X-AUTH-KEY": auth.key,
49
      Authorization: "Bearer " + auth.token,
50
    },
51
    body: undefined,
52
  });
53
  if (!response.ok) {
54
    const text = await response.text();
55
    throw new Error(`${response.status} ${text}`);
56
  }
57
  return await response.json();
58
}
59