Skip to content

Instantly share code, notes, and snippets.

View M0r13n's full-sized avatar
🦔

Leon Morten Richter M0r13n

🦔
View GitHub Profile
@M0r13n
M0r13n / fullmatch.py
Created December 26, 2024 10:54
Backport of pathlibs `full_match` to Python 3.10+
import pathlib
import re
import os
import functools
def _translate(pat, STAR, QUESTION_MARK):
res = []
add = res.append
i, n = 0, len(pat)
while i < n:
@M0r13n
M0r13n / tunny.py
Created February 9, 2025 13:32
Python script that demonstrates network namespace isolation and TUN device manipulation. The code creates a user namespace with root privileges and a network namespace, then sets up a TUN virtual network interface to handle ICMP (ping) traffic. It implements a basic IPv4 pseudo-gateway that responds to ICMP Echo Requests with Echo Replies.
#!/usr/bin/env python3
# sudo sysctl -w kernel.apparmor_restrict_unprivileged_unconfined=0
# sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
# unshare --user --map-user=0
from dataclasses import dataclass
import fcntl
import getpass
import multiprocessing
import os
@M0r13n
M0r13n / virt2phy.py
Created March 23, 2025 12:38
Python3: Translate virtual memory address into physical memory address using `/proc/self/pagemap`
import ctypes
import os
import sys
buffer = bytearray(1_000_000)
vaddr = ctypes.addressof(ctypes.c_char.from_buffer(buffer))
print(f'Allocated an array of {len(buffer)} bytes at 0x{vaddr:x}.')
@M0r13n
M0r13n / totp.py
Last active April 19, 2025 12:20
Basic HMAC-based One-Time Password Algorithm in Python
# Basic HMAC-based One-Time Password Algorithm in Python
# Based on RFC 4226 and RFC 6238
import base64
import datetime
import hashlib
import struct
import time
def dt(hmac_result: bytes) -> int:
@M0r13n
M0r13n / ais-encode.py
Created June 22, 2025 12:30
A CLI application that encodes NMEA AIS messages using pyais
#!/usr/bin/env python3
"""
AIS JSON to NMEA Encoder
This CLI application encodes JSON-formatted AIS (Automatic Identification System) data into NMEA sentences.
It reads JSON from stdin and outputs encoded NMEA AIS messages to stdout.
The encoder supports multiple input modes:
- Single JSON object
- Line-delimited JSON (one object per line)
@M0r13n
M0r13n / main.rs
Last active June 30, 2025 10:57
Read NMEA AIS messages from file using Rust
use nmea_parser::*;
use std::fs;
use std::time::Instant;
fn main() {
let mut parser = NmeaParser::new();
let mut tot = 0;
let start = Instant::now();
// Ignore file reading errors
@M0r13n
M0r13n / main.rs
Created June 30, 2025 11:17
Reading AIS messages from a file in Rust
use ais::lib;
use ais::sentence::{AisFragments, AisParser};
use lib::std::io::BufRead;
use std::fs::File;
use std::io::BufReader;
use std::time::Instant;
fn parse_nmea_line(parser: &mut AisParser, line: &[u8]) -> Result<(), ais::errors::Error> {
let sentence = parser.parse(line, true)?;
if let AisFragments::Complete(sentence) = sentence {