It won't be as fast as a GPU, but a simple brute force script like the following python code:
import hashlib
import time
def ipv4_md5_search(hash, range_start=0, range_end=256):
for a in range(range_start, range_end):
print a, time.ctime() # show progress every time new value of a is done.
for b in range(256):
for c in range(256):
for d in range(256):
h = hashlib.md5('%s.%s.%s.%s' % (a,b,c,d)).hexdigest()
if h == hash:
print a,b,c,d
return True
print "No match found"
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16')
will find the answer in about an hour (worst case) and will be significantly quicker if you parallelize it. E.g., on a hyperthreaded quad-core CPU, just launch 8 processes doing:
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',0,32)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',32,64)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',64,96)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',96,128)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',128,160)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',160,192)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',192,224)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',224,256)
and it will speed it up by a factor of 8. I won't post the whole thing, but will say an IPv4 address in dotted decimal notation matches your MD5 hash and the correct match starts with 84.200
(in the format x.x.x.x
- no newlines or spaces or anything else). Took me about ~15 minutes to find including time to script up and launch the tasks.