Developer Toolkit
Toolbox
A worker who wants to do his work well must first sharpen his tools.
Network, development and crypto utilities, updated as I need them.
Network Tools
Domains, IPs and DNS
Public IP Lookup
Check your public egress IP across several sources
IP Address Lookup
Look up IP geolocation and registration info via an open API
Domain Dig Lookup
Trace DNS resolution end to end to debug record problems
Whois Lookup
Query domain registration, owner and expiry details
DNS QPS Test
Load-test a domain to measure DNS capacity
ICP Filing Lookup
Check a mainland China domain’s ICP filing record
DNS Resolution Visualizer
Interactive view of the whole resolution chain
ASN Lookup
Find the autonomous system and carrier behind an IP
IPv6 Format Converter
Convert between expanded and compressed IPv6 notation
HSTS Preload Check
Check whether a domain is on the HSTS Preload list
Developer Tools
Code, text and conversion
UUID / GUID Generator
Generate UUIDs in bulk, with several versions and formats
FreeMarker Playground
Render and debug FreeMarker (FTL) templates online
Code Diff
Side-by-side diff to spot what changed
XPath Tester
Test and validate XPath expressions online
Naming Case Converter
Convert between snake_case, camelCase and kebab-case
Unix Timestamp Converter
Convert Unix timestamps to dates and back, with time zones
Byte Unit Converter
Convert between B, KB, MB, GB, TB and beyond
UEditor Rich Text Editor
Baidu UEditor WYSIWYG editor, online
TinyMCE Rich Text Editor
TinyMCE WYSIWYG editor with tables, code blocks and full-screen mode
IK Analyzer
Test IK Analyzer Chinese word segmentation
Keyword Extractor
Pull the highest-weight keywords out of a piece of text
Deduplication Tool
Strip duplicate lines, with blank-line, sorting and case options
iOS Plist Generator
Generate the plist needed for iOS enterprise distribution
Cron Expression Tester
Parse cron expressions and preview upcoming runs
LLM VRAM Calculator
Estimate the GPU VRAM needed to run a model
Encryption Tools
Hashing and keys
Password Generator
Generate strong passwords with your own charset and length
MD5 Hash
MD5 hashing with HMAC and 16/32-character output
SHA-1 Hash
SHA-1 hashing with HMAC and case options
SHA-256 Hash
SHA-256 hashing with HMAC and case options
SHA-512 Hash
SHA-512 hashing with HMAC and case options
PBKDF2 Tool
Key derivation with your own salt and iteration count
URL Hex Encoder
Percent-hex encoding for URLs, UTF-8 aware and reversible
URL Encoder / Decoder
Percent-encode and decode URLs
Miscellaneous
Everything else
Story
Where the toolbox came from
Where the toolbox started
In 2020 I was working on the network access layer of a project at an insurance company: integrating with bank interfaces, turning XML messages into our internal objects, and passing them on to the insurance core system.
Skipping the business detail, my work came down to two directions: receiving messages and responding to them. The banks could not run joint debugging with us whenever we wanted, and neither could the core system, which made testing painful. Some policies only took effect the day after they were issued, so testing the later steps meant planting orders the day before.
That is when the idea of building tools was born.
- We used FreeMarker to render the XML we sent back to the banks. To iterate on FTL templates quickly I built the online FreeMarker tester, and opened it up for everyone else too.
- We used XPath to pull data out of inbound XML. To debug those expressions quickly I built the online XPath tester, and opened that one up as well.
Going closed source, for security
Before 2022 the toolbox was open source; in 2023 I closed it. Not because I was worried about people copying it — everyone copies code, and I Google other people’s code too — but for security reasons. Let me explain.
In January 2022 I found a remote code execution hole in my own FreeMarker tester: passing freemarker.template.utility.Execute ran arbitrary code. That is as bad as it gets — a back door on the server, wide open. Luckily everything ran inside Docker, so the host was not lost with it.
In July 2022 I found another one in the Dig lookup tool: when a domain’s NS record points at an attacker’s own server, the query leaks my server’s real origin IP. Once the origin is known, an attacker can bypass my WAF and hit the server directly.
So I closed the source and restructured: risky commands run on a second host, whose services I rewrote in Go instead of the original Java, which is also faster.
To every geek and security researcher out there: I am not a security professional, just a regular developer. If you find a hole, please go easy on me and get in touch — I will thank you publicly on this site.
New ideas and requests
If you have an idea or a feature request, send it over. If it is good, I will keep growing the toolbox with it.