A small tool that accepts a domain name as input and generates all its variants for an homograph attack as output, checking which ones are available and which are already registered.


GO111MODULE=on go get github.com/evilsocket/ditto/cmd/ditto


ditto [options]


        Only display available domain names.
  -csv string
        If set ditto will save results to this CSV file.
  -domain string
        Domain name or url. (default "https://www.ice.gov")
  -limit int
        Limit the number of permutations.
        Only display registered domain names that also resolve to an IP.
        Only display registered domain names.
  -string string
        Generate variations of a string.
  -throttle int
        Throttle requests by a given amount of milliseconds. (default 500)
        Try different permutations by replacing the TLD.
        Show whois information.
  -workers int
        Number of concurrent workers, set to 0 to use one per logical CPU core. (default 1)


Transform a string

$ ditto -string google
ǵoogle (xn--oogle-72b)
ğoogle (xn--oogle-j1a)
ĝoogle (xn--oogle-60a)
ǧoogle (xn--oogle-t0b)
ġoogle (xn--oogle-v1a)
ģoogle (xn--oogle-71a)
ḡoogle (xn--oogle-kf1b)
ǥoogle (xn--oogle-h0b)
ᶃoogle (xn--oogle-hn0b)
google (xn--oogle-dq33a)

Transform a domain

$ ditto -domain facebook.com
checking 280 variations for 'facebook.com', please wait ...

280 / 280 [--------------------------------------------------------------------------------------------------------------------------------] 100.00% 2 p/s

Ḟacebook.com (xn--acebook-bs3c.com) : available
ḟacebook.com (xn--acebook-js3c.com) registered : ips=,
Ƒacebook.com (xn--acebook-o1b.com) : available
ƒacebook.com (xn--acebook-w1b.com) registered : ips= names=
ᵮacebook.com (xn--acebook-2m2c.com) : available
ᶂacebook.com (xn--acebook-nr2c.com) : available
ꜰacebook.com (xn--acebook-vx2z.com) : available
Facebook.com (xn--acebook-uz93b.com) : available
facebook.com (xn--acebook-5693b.com) : available
fácebook.com (xn--fcebook-hwa.com) registered : ips=,

URL List