cosmopolitan/net/http/iscloudflare.c
2022-10-04 23:32:16 -07:00

42 lines
2.9 KiB
C

/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
╞══════════════════════════════════════════════════════════════════════════════╡
│ Copyright 2022 Justine Alexandra Roberts Tunney │
│ │
│ Permission to use, copy, modify, and/or distribute this software for │
│ any purpose with or without fee is hereby granted, provided that the │
│ above copyright notice and this permission notice appear in all copies. │
│ │
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
#include "net/http/ip.h"
/**
* Returns true if `x` is Cloudflare IPv4 address.
*
* @see https://www.cloudflare.com/ips/ (April 8, 2021)
*/
bool IsCloudflareIp(uint32_t x) {
return (x & 0xfffffc00) == 0x6715f400 || // 103.21.244.0/22
(x & 0xfffffc00) == 0x6716c800 || // 103.22.200.0/22
(x & 0xfffffc00) == 0x671f0400 || // 103.31.4.0/22
(x & 0xfff80000) == 0x68100000 || // 104.16.0.0/13
(x & 0xfffc0000) == 0x68180000 || // 104.24.0.0/14
(x & 0xffffc000) == 0x6ca2c000 || // 108.162.192.0/18
(x & 0xfffffc00) == 0x83004800 || // 131.0.72.0/22
(x & 0xffffc000) == 0x8d654000 || // 141.101.64.0/18
(x & 0xfffe0000) == 0xa29e0000 || // 162.158.0.0/15
(x & 0xfff80000) == 0xac400000 || // 172.64.0.0/13
(x & 0xfffff000) == 0xadf53000 || // 173.245.48.0/20
(x & 0xfffff000) == 0xbc726000 || // 188.114.96.0/20
(x & 0xfffff000) == 0xbe5df000 || // 190.93.240.0/20
(x & 0xfffffc00) == 0xc5eaf000 || // 197.234.240.0/22
(x & 0xffff8000) == 0xc6298000; // 198.41.128.0/17
}