Search Shortcut cmd + k | ctrl + k
netquack

DuckDB extension for parsing, extracting, and analyzing domains, URIs, and paths with ease.

Maintainer(s): hatamiarash7

Compatibility Matrix

This table covers all DuckDB releases that have not reached end-of-life, including LTS releases, and shows the 2 most recent patch releases of each. Older patch releases are not listed, but the extension may be available for them as well.

Platform 1.4.4 1.4.5 1.5.5 1.5.6 2.0.0
Linux AMD64
Linux ARM64
macOS AMD64
macOS ARM64
Windows AMD64
Windows ARM64
WebAssembly

Installing and Loading

INSTALL netquack FROM community;
LOAD netquack;

About netquack

This extension designed to simplify working with domains, URIs, IPs, and web paths directly within your database queries. Whether you're extracting top-level domains (TLDs), parsing URI components, or analyzing web paths, Netquack provides a suite of intuitive functions to handle all your network tasks efficiently. Built for data engineers, analysts, and developers.

With Netquack, you can unlock deeper insights from your web-related datasets without the need for external tools or complex workflows.

Check the documentation for more details and examples on each function.

Added Functions

function_name function_type description comment examples
extract_domain scalar Extracting the main domain from a URL NULL [SELECT extract_domain('a.example.com') as domain;]
extract_host scalar Extracting the hostname from a URL NULL [SELECT extract_host('https://b.a.example.com/path/path') as host;]
extract_path scalar Extracting the path from a URL NULL [SELECT extract_path('example.com/path/path/image.png') as path;]
extract_query_string scalar Extracting the query string from a URL NULL [SELECT extract_query_string('example.com?key=value') as query;]
extract_query_parameters table Extracting the query parameters from a URL NULL [SELECT * FROM extract_query_parameters('example.com?key=value&key2=value2');]
extract_schema scalar Extracting the schema from a URL NULL [SELECT extract_schema('mailto:[email protected]') as schema;]
extract_subdomain scalar Extracting the subdomain from a URL NULL [SELECT extract_subdomain('test.example.com.ac') as dns_record;]
extract_sld scalar Extracts the label just before the public suffix (second-level domain) from a URL. NULL [SELECT extract_sld('https://mail.google.co.uk/inbox');]
extract_tld scalar Extracting the top-level domain from a URL NULL [SELECT extract_tld('a.example.com') as tld;]
extract_port scalar Extracting the port from a URL NULL [SELECT extract_port('https://example.com:8080') as port;]
extract_extension scalar Extracting the file extension from a URL NULL [SELECT extract_extension('https://example.com/path/file.txt') as extension;]
parse_uri scalar Parse and returns every URI component in a single STRUCT call NULL [SELECT parse_uri('https://example.com:8080/path?q=1#section') AS uri;]
is_valid_ip scalar Validates IPv4 and IPv6 addresses NULL [SELECT is_valid_ip('192.168.1.1');]
is_private_ip scalar Checks if an IP belongs to a private/reserved range (15 IPv4 + 7 IPv6 ranges) NULL [SELECT is_private_ip('10.0.0.1');]
ip_to_int scalar Converts IPv4 to 32-bit unsigned integer NULL [SELECT ip_to_int('192.168.1.1');]
int_to_ip scalar Converts integer back to IPv4 dotted-quad notation NULL [SELECT int_to_ip(3232235777::UBIGINT);]
ip_version scalar Returns 4 (IPv4), 6 (IPv6), or NULL (invalid) NULL [SELECT ip_version('::1');]
ip_in_range scalar Returns true if the IP address falls within the given IPv4 or IPv6 CIDR block. NULL [SELECT ip_in_range('192.168.1.100', '192.168.1.0/24');]
ip_to_ptr scalar Builds the reverse DNS (in-addr.arpa / ip6.arpa) name for an IPv4 or IPv6 address. NULL [SELECT ip_to_ptr('192.168.1.1');]
ipv6_compress scalar Formats an IPv6 address in its shortest RFC 5952 canonical form. NULL [SELECT ipv6_compress('2001:0db8:0000:0000:0000:0000:0000:0001');]
ipv6_expand scalar Expands an IPv6 address to eight zero-padded hexadecimal groups. NULL [SELECT ipv6_expand('2001:db8::1');]
is_ipv4_mapped scalar Returns true if the address is an IPv4-mapped IPv6 address (::ffff:0:0/96). NULL [SELECT is_ipv4_mapped('::ffff:192.168.1.1');]
ip_type scalar Classifies an IP as public, private, loopback, link_local, multicast, cgnat, documentation, or reserved. NULL [SELECT ip_type('100.64.0.1');]
is_bogon scalar Returns true if the IP is not globally routable (any ip_type other than public). NULL [SELECT is_bogon('10.0.0.1');]
ip_anonymize scalar Truncates an IP for privacy by zeroing all bits after /24 (IPv4) or /48 (IPv6). NULL [SELECT ip_anonymize('192.168.1.123');]
ipcalc table Calculating IP information from a CIDR notation NULL [SELECT * FROM ipcalc('192.168.1.0/24');]
get_tranco_rank scalar Getting the Tranco rank of a domain NULL [SELECT get_tranco_rank('cloudflare.com') as rank;]
get_tranco_rank_category scalar Getting the Tranco rank category of a domain NULL [SELECT get_tranco_rank_category('cloudflare.com') as category;]
tranco_list table Returns the cached Tranco list as rows of rank, domain, and category for joins. NULL [SELECT * FROM tranco_list() LIMIT 10;]
normalize_url scalar Normalizes a URL by applying RFC 3986 rules (lowercasing, default port removal, dot resolution, query sorting, fragment removal) NULL [SELECT normalize_url('HTTP://WWW.EXAMPLE.COM:80/a/b/../c/?z=1&a=2#frag') AS url;]
extract_fragment scalar Extracts the fragment (after #) from a URL NULL [SELECT extract_fragment('http://example.com/page#section') AS fragment;]
domain_depth scalar Returns the number of dot-separated levels in a domain NULL [SELECT domain_depth('www.example.com') AS depth;]
base64_encode scalar Encodes a string into Base64 format NULL [SELECT base64_encode('Hello World') AS encoded;]
base64_decode scalar Decodes a Base64-encoded string back to its original form NULL [SELECT base64_decode('SGVsbG8gV29ybGQ=') AS decoded;]
is_valid_url scalar Checks whether a string is a well-formed URL with scheme, authority, and host NULL [SELECT is_valid_url('https://example.com');]
is_valid_domain scalar Validates a domain name against RFC 1035 / RFC 1123 rules NULL [SELECT is_valid_domain('example.com');]
is_public_suffix scalar Returns true if the domain is exactly a public suffix in the Public Suffix List (e.g. co.uk). NULL [SELECT is_public_suffix('co.uk');]
is_known_tld scalar Returns true if the label is a top-level domain listed in the Public Suffix List. NULL [SELECT is_known_tld('com');]
extract_path_segments table Splits a URL path into individual segment rows with index and value NULL [SELECT * FROM extract_path_segments('https://example.com/a/b/c');]
url_encode scalar Percent-encodes a string per RFC 3986 (unreserved characters pass through) NULL [SELECT url_encode('hello world');]
url_decode scalar Decodes a percent-encoded string back to its original form (also decodes + as space) NULL [SELECT url_decode('hello%20world');]
defang scalar Defangs a URL, email, or IP in CyberChef style so it is not clickable (hxxps[://]example[.]com). NULL [SELECT defang('https://example.com:443/path');]
refang scalar Restores a defanged URL, email, or IP (e.g. hxxps[://]example[.]com) to its original form. NULL [SELECT refang('hxxps[://]example[.]com[:]443/path');]
url_to_surt scalar Converts a URL to a Sort-friendly URI Reordering Transform (SURT) key as used by web archives. NULL [SELECT url_to_surt('https://www.example.com/Path/?b=2&a=1');]
surt_to_url scalar Converts a SURT key back into a URL, assuming http when the SURT carries no scheme. NULL [SELECT surt_to_url('com,example)/path?a=1&b=2');]
extract_urls scalar Extracts every scheme://… URL found in free text, in order of appearance. NULL [SELECT extract_urls('Visit https://example.com/login or ftp://files.example.org now');]
extract_domains scalar Extracts every lowercased domain name with a known TLD found in free text, in order of appearance. NULL [SELECT extract_domains('Mail from [email protected] about login.bad-site.net');]
extract_ips scalar Extracts every valid IPv4 and IPv6 address found in free text, in order of appearance. NULL [SELECT extract_ips('Blocked 203.0.113.5:443 and 2001:db8::1 at the edge');]
update_tranco scalar Update tranco data NULL [SELECT update_tranco(true);]
netquack_version table Returns the version of Netquack NULL [SELECT netquack_version() as version;]
ip_anonymize scalar Truncates an IP for privacy by zeroing all bits after /24 (IPv4) or /48 (IPv6). NULL [SELECT ip_anonymize('192.168.1.123');]

Overloaded Functions

This extension does not add any function overloads.

Added Types

This extension does not add any types.

Added Settings

This extension does not add any settings.