/net/ip/{ip}
Classify an IP address: normal forms, special-purpose block (IANA), mapped forms
ip: IPv4 or IPv6 address
curl "https://agent-helper.org/net/ip/192.168.1.10"Networking code tends to be written for the common case and to break at the edges. Address checks test for 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16 and forget the carrier-grade NAT range, link-local addresses, documentation prefixes, IPv4 addresses mapped into IPv6, and the other special-purpose blocks the IANA registries list. Subnet calculations assume IPv4, where a prefix length and a host count fit in a head; in IPv6 a single /64 holds more addresses than the entire IPv4 space, and the arithmetic has to work on 128-bit integers.
Domains have a trap of their own. The part of a host name that an organisation registers cannot be found by taking the last two labels: that gives co.uk for www.bbc.co.uk. The boundary is defined by the Public Suffix List, which is maintained by hand and changes, and cookie scoping and same-site checks depend on it.
URLs are parsed the way RFC 3986 describes, and the normalised form is shown next to every component and the rules that were applied, because libraries disagree about letter case, default ports, dot segments and percent-encoding.
Everything in this group is computed from local tables. Nothing is resolved in DNS and no URL is ever fetched, so a request here cannot make this service contact the addresses it is asked about. User-Agent parsing recognises browsers, HTTP libraries and AI agents, answers unknown for a string it cannot place, and reminds the reader that a User-Agent is whatever the client chose to send.
/net/ip/{ip}
Classify an IP address: normal forms, special-purpose block (IANA), mapped forms
ip: IPv4 or IPv6 address
curl "https://agent-helper.org/net/ip/192.168.1.10"/net/cidr/{prefix:path}
Prefix arithmetic: network, mask, broadcast, first/last host, size
prefix: address/length, e.g. 10.1.2.3/20 or 2001:db8::/48
curl "https://agent-helper.org/net/cidr/10.1.2.3/20"/net/contains?a=&b=
Relation between two prefixes or a prefix and an address: equal, contains, inside, disjoint
a: prefix or address; b: prefix or address
curl "https://agent-helper.org/net/contains?a=10.0.0.0/8&b=10.20.0.0/16"/net/aggregate?prefixes=
Merge a list of prefixes into the fewest covering prefixes
prefixes: comma-separated prefixes or addresses
curl "https://agent-helper.org/net/aggregate?prefixes=10.0.0.0/24,10.0.1.0/24,10.0.2.0/23,192.168.1.1"/net/subnets/{prefix:path}?length=
Split a prefix into subnets of a given length
prefix: prefix to split; length: new prefix length
curl "https://agent-helper.org/net/subnets/10.0.0.0/22?length=24"/net/range?start=&end=
Convert an address range to the minimal list of prefixes
start: first address; end: last address
curl "https://agent-helper.org/net/range?start=192.168.0.10&end=192.168.0.40"/net/url?url=
Parse and normalise a URL (RFC 3986) without fetching it
url: absolute URL (URL-encode it once when passing it here)
curl "https://agent-helper.org/net/url?url=HTTPS%3A%2F%2FUser%40Example.COM%3A443%2Fa%2F.%2Fb%2F..%2Fc%3Fx%3D1%26y%3D%257e%23frag"/net/domain/{host}
Registrable domain and public suffix (Public Suffix List), TLD validity
host: host name
curl "https://agent-helper.org/net/domain/www.bbc.co.uk"/net/useragent?[ua=]
Parse a User-Agent string (yours if ua= is omitted), including AI agents and HTTP libraries
ua (optional): User-Agent string; defaults to the one your client sent
curl "https://agent-helper.org/net/useragent?ua=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20Win64%3B%20x64)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F140.0.0.0%20Safari%2F537.36"