Skip to content

Instantly share code, notes, and snippets.

@rahul286
Forked from milo2012/genPunycodeDomain.py
Last active July 11, 2018 15:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rahul286/6f53fc2611ab2ad7d208b053cc04862a to your computer and use it in GitHub Desktop.
Save rahul286/6f53fc2611ab2ad7d208b053cc04862a to your computer and use it in GitHub Desktop.
genPunycodeDomain.py

Install deps using

pip install ipwhois

You may need to prefix above command with sudo if you are using python version that ships with system. Or change ownership (not recommended) by running sudo chown -R $USER /Library/Python/2.7

Download script and execute it

python genPunycodeDomain.py -d rahul286.com
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import re
import argparse
from ipwhois import IPWhois
from itertools import product
import socket
import signal
import itertools
def dns_timeout(a,b):
raise Exception("DNS timeout")
def getIPHostname(hostname):
signal.signal(signal.SIGALRM, dns_timeout)
signal.alarm(1)
try:
return (socket.gethostbyname(hostname)).strip()
except Exception, exc:
signal.alarm(0)
return None
def replace_str_index(text,index=0,replacement=''):
return '%s%s%s'%(text[:index],replacement,text[index+1:])
def filler(word, from_char, to_char):
#print "here"
resultList=[]
options = [(c,) if c != from_char else (from_char, to_char) for c in word]
for o in product(*options):
results=str(u"".join(o))
resultList.append(results)
return resultList
def filler_list(word_list, from_char, to_char):
return_list=[]
for word in word_list:
return_list=return_list+list(filler(word,from_char,to_char))
return return_list
parser = argparse.ArgumentParser(
prog='PROG',
formatter_class=argparse.RawDescriptionHelpFormatter,
description=('''\
'''))
parser.add_argument("-d", type=str, dest="domain", help="Domain Name")
if len(sys.argv) == 1:
parser.print_help()
sys.exit(1)
args = parser.parse_args()
tmpList=(args.domain).split(".")
tmpDomainSplit=(args.domain).split(".")
topDomainList=[]
tldDomain=''
charList=[]
charList.append(['a','ä|à|á'])
charList.append(['e','ë|è|é'])
charList.append(['i','ï|ì|í'])
charList.append(['o','ö|ò|ó'])
charList.append(['u','ü|ù|ú'])
charList.append(['m','rn'])
charList.append(['s','5'])
charList.append(['b','6'])
charList.append(['g','q|9'])
charList.append(['o','0'])
charList.append(['d','cl'])
charList.append(['w','vv'])
mutateList=[]
tmpResultList=[]
if len(tmpDomainSplit)==2:
for char in charList:
if char[0] in tmpList[0]:
mutateList.append(char)
tldDomain=tmpDomainSplit[1]
wordList=[]
wordList.append(tmpDomainSplit[0])
countMatch=0
for char in charList:
if char[0] in wordList[0]:
countMatch+=1
tmpCount=0
list1=[]
tmpDomainName=wordList[0]
while tmpCount<(countMatch):
if len(tmpResultList)<1:
for char in charList:
if "|" not in char[1]:
list1=list(filler(tmpDomainName, char[0],char[1]))
for x in list1:
x=unicode(x, "utf-8")
if x not in tmpResultList:
tmpResultList.append(x)
ip=getIPHostname(x.encode("idna")+"."+tldDomain)
if ip!=None:
print x+"."+tldDomain+"\t"+x.encode("idna")+"."+tldDomain+" ["+ip+"]"
else:
print x+"."+tldDomain+"\t"+x.encode("idna")+"."+tldDomain+" [available]"
else:
tmpUnicodeList=char[1].split("|")
for char1 in tmpUnicodeList:
list2=list(filler(tmpDomainName, char[0],char1))
for x in list2:
x=unicode(x, "utf-8")
if x not in tmpResultList:
tmpResultList.append(x)
ip=getIPHostname(x.encode("idna")+"."+tldDomain)
if ip!=None:
print x+"."+tldDomain+"\t"+x.encode("idna")+"."+tldDomain+" ["+ip+"]"
else:
print x+"."+tldDomain+"\t"+x.encode("idna")+"."+tldDomain+" [available]"
else:
for tmpDomainName in tmpResultList:
for char in charList:
if "|" not in char[1]:
list2=list(filler(tmpDomainName, char[0],char[1]))
for x in list2:
x=unicode(x, "utf-8")
if x not in tmpResultList:
tmpResultList.append(x)
ip=getIPHostname(x.encode("idna")+"."+tldDomain)
if ip!=None:
print x+"."+tldDomain+"\t"+x.encode("idna")+"."+tldDomain+" ["+ip+"]"
else:
print x+"."+tldDomain+"\t"+x.encode("idna")+"."+tldDomain+" [available]"
else:
tmpUnicodeList=char[1].split("|")
for char1 in tmpUnicodeList:
list2=list(filler(tmpDomainName, char[0],char1))
for x in list2:
x=unicode(x, "utf-8")
if x not in tmpResultList:
tmpResultList.append(x)
ip=getIPHostname(x.encode("idna")+"."+tldDomain)
if ip!=None:
print x+"."+tldDomain+"\t"+x.encode("idna")+"."+tldDomain+" ["+ip+"]"
else:
print x+"."+tldDomain+"\t"+x.encode("idna")+"."+tldDomain+" [available]"
tmpCount+=1
else:
print "[*] Please enter only the domain name (without the subdomain)."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment