Advertisement
Guest User

autochange.py

a guest
Jan 16th, 2015
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.47 KB | None | 0 0
  1. #!/usr/bin/python2.5
  2. # -*- coding: utf-8 -*-
  3. #
  4. # Name: autochange.py
  5. # Desc: domain ip changer for 2domains.ru registrator
  6. # Author: Bushmanov Efim
  7. # Date: 17.11.2014
  8. # Release: 0.1beta
  9. # Site: http://seo-coding.ru/2015/01/avtomatizatsiya-smenyi-ip-v-adminke-2domains/
  10. #
  11. #
  12.  
  13.  
  14. import os
  15. import sys
  16. import time
  17. import re
  18. import urllib
  19. import urllib2
  20. import cookielib
  21. import httplib
  22.  
  23.  
  24. COOKIE_FILE_TMPL = ".cookies/%s/cookie.txt"
  25. COOKIE_DIR_TMPL = ".cookies/"
  26.  
  27. DEBUG = 0
  28. DEBUG_REPLY = 0
  29.  
  30.  
  31. #
  32. # do_login function
  33. #
  34. def do_login(cmsuser, cmspass):
  35.  
  36. #
  37. # load main page with form
  38. #
  39.  
  40. reqUrl = 'https://reg.2domains.ru/'
  41. f = urllib2.urlopen(reqUrl)
  42. data = f.read()
  43. if (DEBUG):
  44. print "MAIN PAGE"
  45. #print data
  46.  
  47.  
  48. #
  49. # request N1 (POST QUERY)
  50. #
  51.  
  52. refererUrl = 'https://reg.2domains.ru/login.php'
  53. reqUrl = 'https://reg.2domains.ru/login.php'
  54. reqData = urllib.urlencode({'ret': '/',
  55. 'email': cmsuser,
  56. 'passwd': cmspass,
  57. 'login': 'Войти'}
  58. )
  59. req = urllib2.Request(url=reqUrl, data=reqData)
  60. req.add_header('Referer', refererUrl)
  61. f = urllib2.urlopen(req)
  62. data = f.read()
  63.  
  64. if (DEBUG):
  65. print "LOGIN ANSWER\n"
  66. print data
  67.  
  68. re_getbackurl = re.compile(r'logout.php')
  69. m = re.search(re_getbackurl, data)
  70. if (m):
  71. print "Login success: " + cmsuser
  72. else:
  73. print "Login fail, check login and pass"
  74. return "fail"
  75.  
  76. return "ok"
  77.  
  78.  
  79.  
  80. #
  81. # do_add_dnsname function
  82. #
  83. def do_add_dnsname(domain_id, d_name, d_ip):
  84.  
  85. refererUrl = 'https://reg.2domains.ru/zone_control/index.php?domain_id=' + domain_id
  86.  
  87. reqUrl = 'https://reg.2domains.ru/zone_control/index.php'
  88. reqData = urllib.urlencode({
  89. 'domain_id': domain_id,
  90. 'service_id': 0,
  91. 'subname_1': d_name,
  92. 'rectype_1': "A",
  93. 'data_1': d_ip,
  94. 'subname_2': "",
  95. 'rectype_2': "A",
  96. 'data_2': "",
  97. 'subname_3': "",
  98. 'rectype_3': "A",
  99. 'data_3': "",
  100. 'subname_4': "",
  101. 'rectype_4': "A",
  102. 'data_4': "",
  103. 'subname_5': "",
  104. 'rectype_5': "A",
  105. 'data_5': "",
  106. 'zone_add': 'Добавить',
  107. })
  108.  
  109. req = urllib2.Request(url=reqUrl, data=reqData)
  110. req.add_header('Referer', refererUrl)
  111. f = urllib2.urlopen(req)
  112. data = f.read()
  113.  
  114. if (DEBUG):
  115. f = open("_domain_add.txt", "w")
  116. f.write(data)
  117. f.close()
  118.  
  119. if (DEBUG):
  120. print "NAME ADD ANSWER\n"
  121. print data
  122.  
  123. return "ok"
  124.  
  125. #
  126. #
  127. #
  128. def do_del_record(delstr):
  129.  
  130. posturl = "https://reg.2domains.ru/zone_control/del.php?data="+delstr;
  131. print posturl
  132.  
  133. reqUrl = posturl
  134. f = urllib2.urlopen(reqUrl)
  135. data = f.read()
  136.  
  137. if (DEBUG):
  138. print "DO DEL RECORD"
  139. #print data
  140.  
  141. print "OK"
  142.  
  143. return
  144.  
  145. #
  146. # do get plaintext domains
  147. #
  148. def do_get_textdomains(posturl):
  149.  
  150. reqUrl = posturl
  151. f = urllib2.urlopen(reqUrl)
  152. data = f.read()
  153.  
  154. if (DEBUG):
  155. print "LOAD TEXT DOMAINS"
  156. print data
  157.  
  158. domains = data.split("\n")
  159.  
  160. # show all domains
  161. for d in domains:
  162. print d
  163.  
  164. return
  165.  
  166.  
  167. #
  168. # do get domains
  169. #
  170. def do_get_domains(posturl):
  171.  
  172. reqUrl = posturl
  173. f = urllib2.urlopen(reqUrl)
  174. data = f.read()
  175.  
  176. if (DEBUG):
  177. print "LOAD DOMAINS"
  178. print data
  179.  
  180. re_getdomains = re.compile(r'domain_param_tt.php\?c_page=1&domain_id=(\d+).+?<b>(.+?)</b></a>', re.DOTALL|re.MULTILINE)
  181. domains = re.findall(re_getdomains, data)
  182.  
  183. for d in domains:
  184. print d[1]+": "+d[0]
  185.  
  186. return domains
  187.  
  188.  
  189. #
  190. # do get dnsname
  191. #
  192. def do_del_dnsname(posturl):
  193.  
  194. reqUrl = posturl
  195. f = urllib2.urlopen(reqUrl)
  196. data = f.read()
  197.  
  198. if (DEBUG):
  199. print "LOAD DNSNAME"
  200. print data
  201.  
  202.  
  203. re_getblock = re.compile(r'<table class="b-profiles.+?">(.+?)</table>', re.DOTALL|re.MULTILINE)
  204. m = re.search(re_getblock, data)
  205. if (m):
  206. block = m.group(1)
  207. else:
  208. print "List block with table not found"
  209. return "fail"
  210.  
  211.  
  212. fields = '<tr.+?>\s+'
  213. fields+= '<td class="b-table__cell.*?first">(.*?)</td>\s+'
  214. fields+= '<td class="b-table__cell.*?">(.*?)</td>\s+'
  215. fields+= '<td class="b-table__cell.*?">(.*?)</td>\s+'
  216. fields+= '<td class="b-table__cell.*?">(.*?)</td>\s+'
  217. fields+= '<td class="b-table__cell.*?last">(.*?)</td>\s+'
  218. fields+= '</tr>'
  219. re_getdns = re.compile(fields, re.DOTALL|re.MULTILINE)
  220. list = re.findall(re_getdns, block)
  221.  
  222. for p in list:
  223.  
  224. delstr = ""
  225. re_getdelstr = re.compile(r'validate_del_dns_record\(\'(.*?)\'\);')
  226. mstr = re.search(re_getdelstr, p[4])
  227. if (mstr):
  228. delstr_value = mstr.group(1)
  229. delstr = urllib.pathname2url(delstr_value)
  230.  
  231. d_name = p[0]
  232. d_type = p[1]
  233. d_ip = p[2]
  234. d_mx = p[3]
  235. if (d_type == "A"):
  236. print "Deleting: "+d_name+" | "+d_type+" | "+d_ip+" | "+d_mx
  237. do_del_record(delstr)
  238.  
  239. f = open("./del_log.txt", "a")
  240. f.write(d_name+" | "+d_type+" | "+d_ip+" | "+d_mx+"\n")
  241. f.close()
  242.  
  243. return
  244.  
  245.  
  246. #
  247. # Main process code
  248. #
  249. def main_process(cmsuser, cmspass, action, add_ip = None):
  250.  
  251. #
  252. # make ".cookies" dir
  253. #
  254.  
  255. cookies_dir = os.path.join(os.getcwd(), COOKIE_DIR_TMPL)
  256. if (not(os.path.exists(cookies_dir))):
  257. os.mkdir(cookies_dir)
  258.  
  259. #
  260. # prepare request cookies
  261. #
  262.  
  263. COOKIE_FILE_PATH = COOKIE_FILE_TMPL % cmsuser
  264. cookie_file = os.path.join(os.getcwd(), COOKIE_FILE_PATH)
  265.  
  266. cj = cookielib.CookieJar()
  267. cj = cookielib.MozillaCookieJar()
  268.  
  269. if (not(os.path.exists(cookie_file))):
  270. if (not(os.path.exists(os.path.dirname(cookie_file)))):
  271. os.mkdir(os.path.dirname(cookie_file))
  272. cj.save(cookie_file)
  273.  
  274. cj.load(cookie_file)
  275. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
  276. opener.addheaders = [('User-agent', 'Mozilla/5.0')]
  277. urllib2.install_opener(opener)
  278.  
  279.  
  280. #
  281. # Login
  282. #
  283.  
  284. ret = do_login(cmsuser, cmspass)
  285. if ret == "fail":
  286. print "Login failed"
  287. exit(1)
  288.  
  289.  
  290. #
  291. # List domains
  292. #
  293.  
  294. domains = do_get_domains("https://reg.2domains.ru/domains/?p_page=500")
  295. if len(domains) == 0:
  296. print "Get domains failed"
  297. exit(1)
  298.  
  299.  
  300. #
  301. # for delete case
  302. #
  303.  
  304. if (action == "delete"):
  305. for d in domains:
  306. url = 'https://reg.2domains.ru/zone_control/index.php?domain_id=' + d[0]
  307.  
  308. print "Domain: " + d[1] + " "+ d[0]
  309.  
  310. f = open("./del_log.txt", "a")
  311. f.write("Domain: " + d[1] + " "+ d[0] + "\n")
  312. f.close()
  313.  
  314. ret = do_del_dnsname(url)
  315. if ret == "fail":
  316. print "Get domains failed"
  317. exit(1)
  318. #exit()
  319.  
  320. if (action == "add"):
  321.  
  322. d_ip = add_ip
  323.  
  324. for d in domains:
  325. url = 'https://reg.2domains.ru/zone_control/index.php?domain_id=' + d[0]
  326.  
  327. print "Domain: " + d[1] + " "+ d[0]
  328. f = open("./add_log.txt", "a")
  329. f.write("Domain: " + d[1] + " "+ " " + d_ip + "\n")
  330. f.close()
  331.  
  332. print "Add @ " + d_ip;
  333. ret = do_add_dnsname(d[0], "", d_ip)
  334. print "Add www " + d_ip;
  335. ret = do_add_dnsname(d[0], "www", d_ip)
  336. print "Add ftp " + d_ip;
  337. ret = do_add_dnsname(d[0], "ftp", d_ip)
  338.  
  339.  
  340. return
  341.  
  342.  
  343. def main():
  344.  
  345. """
  346. cmsuser="your.email@aaaaa.ru"
  347. cmspass="PASS"
  348.  
  349. main_process(cmsuser, cmspass, "delete")
  350. """
  351.  
  352. cmsuser="your.email@aaaaa.ru"
  353. cmspass="PASS"
  354.  
  355. main_process(cmsuser, cmspass, "delete")
  356. main_process(cmsuser, cmspass, "add", "91.91.100.121")
  357.  
  358.  
  359. return
  360.  
  361.  
  362. if __name__ == "__main__":
  363. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement