33class RandInt :
44
55 def __init__ (self , seed ):
6- self .seed = seed
6+ self .value = seed
77
88 def rand_int_modulus (self , modulus ):
9- ix = self .seed
9+ ix = self .value
1010 ix = 16807 * (ix % 127773 ) - 2836 * (ix / 127773 ) & 0xFFFFFFFF
11- self .seed = ix
11+ self .value = ix
1212 return ix % modulus
1313
14- def get_domains (seed , nr ):
14+ def get_domains (seed , nr , tlds ):
15+ if not tlds :
16+ tlds = [".com" ]
17+
1518 r = RandInt (seed )
1619
1720 for i in range (nr ):
18- seed_a = r .seed
21+ seed_a = r .value
1922 domain_len = r .rand_int_modulus (12 ) + 8
20- seed_b = r .seed
23+ seed_b = r .value
2124 domain = ""
22- for i in range (domain_len ):
25+ for j in range (domain_len ):
2326 char = chr (ord ('a' ) + r .rand_int_modulus (25 ))
2427 domain += char
25- domain += ".com"
28+ tld = tlds [i % len (tlds )]
29+ domain += '.' if tld [0 ] != '.' else ''
30+ domain += tld
2631 m = seed_a * seed_b
27- r .seed = (m + m // (2 ** 32 )) % 2 ** 32
32+ r .value = (m + m // (2 ** 32 )) % 2 ** 32
2833 yield domain
2934
3035if __name__ == "__main__" :
@@ -35,10 +40,15 @@ def get_domains(seed, nr):
3540 4BFCBC6A
3641 79159C10
3742 92F4BE35
43+ 4302C04A 10 -t "click bid eu"
3844 """
3945 parser = argparse .ArgumentParser (description = "generate Ramnit domains" )
4046 parser .add_argument ("seed" , help = "seed as hex" )
4147 parser .add_argument ("nr" , help = "nr of domains" , type = int )
48+ parser .add_argument ("-t" , "--tlds" , help = "list of tlds" , default = None )
4249 args = parser .parse_args ()
43- for domain in get_domains (int (args .seed , 16 ), args .nr ):
50+ tlds = None
51+ if args .tlds :
52+ tlds = [x .strip () for x in args .tlds .split (" " )]
53+ for domain in get_domains (int (args .seed , 16 ), args .nr , tlds ):
4454 print (domain )
0 commit comments