Skip to content

Instantly share code, notes, and snippets.

View kLiHz's full-sized avatar

kLiHz kLiHz

View GitHub Profile
@kLiHz
kLiHz / IPv4.ts
Last active July 28, 2024 05:02
Validate IP address (IPv4 / IPv6) in JavaScript / TypeScript
// WARNING: These code may be incorrect and may not be production ready, so use at your own risk.
export const dotDecimalIPv4Regex = /^((25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)$/;
const dottedComponentRegex = /^((0(?:x|X)[a-fA-F0-9]+)|(0[0-7]*)|([1-9]\d*))$/;
export function isIPv4(s: string): boolean {
const decimals = s.split('.');
// https://stackoverflow.com/questions/10133820/is-there-any-documentation-for-omitting-zeroes-in-dot-decimal-notation-of-ipv4-a
// https://linux.die.net/man/3/inet_aton
@kLiHz
kLiHz / main.ipynb
Last active July 21, 2024 22:31
Cloudflare datacenter colo lists
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@kLiHz
kLiHz / worker.js
Last active September 25, 2024 19:33
Reverse proxying share.dmhy.org
export default {
/**
* Default fetch event handler
* @param request {Request}
* @param env
* @param ctx
* @returns {Promise<Response>}
*/
async fetch(request, env, ctx) {
const url = new URL(request.url);
@kLiHz
kLiHz / ban.ts
Last active September 18, 2024 10:01
Automatically ban (suspicious) qBittorrent peers (which comes from several CN IP CIDRs and takes hundreds of GBs traffic by downloading something again and agian), based on client name and source IP prefixes, with JavaScript (Deno)
const endpoint = 'http://127.0.0.1:9876' || 'http://localhost:8080';
const username = 'admin';
const password = 'adminadmin';
const mainDataUrl = new URL('/api/v2/sync/maindata', endpoint);
const torrentPeersUrl = new URL('/api/v2/sync/torrentPeers', endpoint);
const banPeers = new URL('/api/v2/transfer/banPeers', endpoint);
async function login(username: string, password: string) {
const res = await fetch(
new URL('/api/v2/auth/login', endpoint),
@kLiHz
kLiHz / README.md
Last active May 11, 2024 03:08
Reverse Proxying rustup.rs with Cloudflare Workers

Suppose your Worker's domain is $REVERSE_PROXIED_RUSTUP_DOMAIN (e.g. rustup.muc.moe).

Usage

Visit $REVERSE_PROXIED_RUSTUP_DOMAIN for the website rustup.rs.

And set these environment variables for rustup:

  • RUSTUP_DIST_SERVER: https://$REVERSE_PROXIED_RUSTUP_DOMAIN
@kLiHz
kLiHz / changing-cloudflare-universal-ssl-ca.md
Last active March 22, 2024 06:13
Changing Cloudflare Universal SSL CA
@kLiHz
kLiHz / calc.py
Last active September 5, 2023 21:59
How much credit is necessary to give customer the cost price?
import csv
with open('items.csv') as f:
items = [{
'sales': int(i['sales']),
'cost': float(i['cost']),
'price': float(i['price']),
} for i in csv.DictReader(f, skipinitialspace=True)]
tot_sales = sum([i['sales'] for i in items])
@kLiHz
kLiHz / README.md
Last active July 29, 2023 11:27
Parse `tree` command txt output
#include <algorithm>
#include <string>
#include <iostream>
template<typename IntType>
class fraction {
IntType A;
IntType B;
public:
static IntType gcd(IntType x, IntType y) {
@kLiHz
kLiHz / demo.py
Created March 20, 2023 06:37
JavaScript-Like Wrapper for Python 3 URL Parser
from urllib.parse import urlparse, urljoin, parse_qsl, urlencode
class URLSearchParams:
def __init__(self, options: str = '', hook = None) -> None:
self.hook = hook
if type(options) is str:
if len(options) == 0:
self.l = list()
else:
self.l = parse_qsl(options[1:] if options[0] == '?' else options)