天天看點

利用Dnspod api批量更新添加DNS解析【python腳本】

需求:每天有大量的域名需要解析,變更,負責解析域名的妹子實屬傷不起,批量更新添加的需求誕生了。 <a href="https://www.dnspod.cn/docs/index.html">         https://www.dnspod.cn/docs/index.html</a> 注1:依據個人笨拙的程式設計思想,碼了這麼一堆代碼,總算實作的添加更新功能,潛在bug尚不清楚。歡迎有興趣的朋友一起讨論。 注2:以下代碼适用于python2.6以下,如果python2.6以上的需要将代碼中的:except Exception,e修改為:except Exception as e <b>注3:</b>在dnsapi.apicn源代碼中Ddns類中,需要把#record_type=record_type,這一行注釋掉進行安裝,已安裝的需要把pyc檔案删除,重新import即可 域名清單格式要求如下:    域名                 電信IP,聯通IP www.baidu.com            1.1.1.1,2.2.2.2 www.sohu.com             ,3.3.3.3 music.baidu.com          4.4.4.4,

代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

<code>#!/usr/bin/env python</code>

<code>#-*- coding:utf-8 -*-</code>

<code>#who:[email protected]</code>

<code>#when:2013-08-14</code>

<code>import</code> <code>os,sys</code>

<code>from</code> <code>dnspod.apicn </code><code>import</code> <code>*</code>

<code>domain_list</code><code>=</code><code>[]</code>

<code>domain_dic</code><code>=</code><code>{}</code>

<code>illegal_list</code><code>=</code><code>[]</code>

<code>login_email</code><code>=</code><code>"XXXXX"</code>

<code>password</code><code>=</code><code>"XXXXX"</code>

<code>domain_file</code><code>=</code><code>"/root/dns"</code>

<code>def</code> <code>domain_index(domain_file):</code>

<code>    </code><code>all_domain_list</code><code>=</code><code>[]</code>

<code>    </code><code>for</code> <code>line </code><code>in</code> <code>file</code><code>(domain_file).readlines():</code>

<code>        </code><code>if</code> <code>line </code><code>=</code><code>=</code> <code>'\n'</code><code>:</code>

<code>            </code><code>continue</code>

<code>        </code><code>if</code> <code>line[</code><code>-</code><code>1</code><code>] </code><code>=</code><code>=</code> <code>'\n'</code><code>:</code>

<code>            </code><code>line</code><code>=</code><code>line[:</code><code>-</code><code>1</code><code>]</code>

<code>            </code><code>all_domain_list.append(</code><code>'.'</code><code>.join(line.split()[</code><code>0</code><code>].split(</code><code>'.'</code><code>)[</code><code>-</code><code>2</code><code>:]))</code>

<code>    </code><code>domain_list</code><code>=</code><code>list</code><code>(</code><code>set</code><code>(all_domain_list))</code>

<code>    </code><code>api</code><code>=</code><code>DomainList(email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>

<code>    </code><code>all_msg</code><code>=</code><code>api().get(</code><code>"domains"</code><code>)</code>

<code>    </code><code>exists_list</code><code>=</code><code>[]</code>

<code>    </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>len</code><code>(all_msg)):</code>

<code>        </code><code>exists_list.append(all_msg[i].get(</code><code>"name"</code><code>))</code>

<code>    </code><code>for</code> <code>dom </code><code>in</code> <code>domain_list:</code>

<code>        </code><code>if</code> <code>dom </code><code>not</code> <code>in</code> <code>exists_list:</code>

<code>            </code><code>api_create</code><code>=</code><code>DomainCreate(dom,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>

<code>            </code><code>try</code><code>:</code>

<code>                </code><code>domain_create</code><code>=</code><code>api_create()</code>

<code>                </code><code>all_msg</code><code>=</code><code>api().get(</code><code>"domains"</code><code>)</code>

<code>                </code><code>for</code> <code>n </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>len</code><code>(all_msg)):</code>

<code>                    </code><code>if</code> <code>dom </code><code>=</code><code>=</code> <code>all_msg[n].get(</code><code>"name"</code><code>):</code>

<code>                        </code><code>dom_id</code><code>=</code><code>all_msg[n].get(</code><code>"id"</code><code>)</code>

<code>                        </code><code>domain_dic[dom]</code><code>=</code><code>dom_id</code>

<code>            </code><code>except</code> <code>Exception,e:</code>

<code>                </code><code>illegal_list.append(dom)</code>

<code>                </code><code>#print "[Error:] %s" % e</code>

<code>                </code><code>print</code> <code>"""\033[31m[Error]: Create domain [ %s ] Fail</code>

<code>        </code><code>.....You may not have permission to create it ! \033[0m"""</code> <code>%</code> <code>dom</code>

<code>        </code><code>else</code><code>:</code>

<code>            </code><code>all_msg</code><code>=</code><code>api().get(</code><code>"domains"</code><code>)</code>

<code>            </code><code>for</code> <code>n </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>len</code><code>(all_msg)):</code>

<code>                </code><code>if</code> <code>dom </code><code>=</code><code>=</code> <code>all_msg[n].get(</code><code>"name"</code><code>):</code>

<code>                    </code><code>dom_id</code><code>=</code><code>all_msg[n].get(</code><code>"id"</code><code>)</code>

<code>                    </code><code>domain_dic[dom]</code><code>=</code><code>dom_id</code>

<code>def</code> <code>add_record(domain,ip):</code>

<code>    </code><code>if</code> <code>len</code><code>(ip.split(</code><code>','</code><code>)) </code><code>=</code><code>=</code> <code>2</code><code>:</code>

<code>        </code><code>tel_ip</code><code>=</code><code>ip.split(</code><code>','</code><code>)[</code><code>0</code><code>]</code>

<code>        </code><code>unic_ip</code><code>=</code><code>ip.split(</code><code>','</code><code>)[</code><code>1</code><code>]</code>

<code>    </code><code>else</code><code>:</code>

<code>        </code><code>print</code> <code>"\033[31m[Error]: IP format error...\033[0m"</code>

<code>        </code><code>#sys.exit()</code>

<code>    </code><code>sub_dom</code><code>=</code><code>'.'</code><code>.join(domain.split(</code><code>'.'</code><code>)[:</code><code>-</code><code>2</code><code>])</code>

<code>    </code><code>dom_name</code><code>=</code><code>[</code><code>'.'</code><code>.join(domain.split(</code><code>'.'</code><code>)[</code><code>-</code><code>2</code><code>:])]</code>

<code>    </code><code>for</code> <code>k,v </code><code>in</code> <code>domain_dic.iteritems():</code>

<code>        </code><code>if</code> <code>k </code><code>in</code> <code>dom_name:</code>

<code>            </code><code>domain_id</code><code>=</code><code>domain_dic[k]</code>

<code>    </code><code>#print sub_dom   #debug</code>

<code>    </code><code>api_subdom</code><code>=</code><code>RecordList(domain_id,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>

<code>    </code><code>try</code><code>:</code>

<code>        </code><code>rec_list</code><code>=</code><code>api_subdom().get(</code><code>"records"</code><code>)</code>

<code>        </code><code>tmp_sub</code><code>=</code><code>[]</code>

<code>        </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>len</code><code>(rec_list)):</code>

<code>            </code><code>tmp_sub.append(rec_list[i].get(</code><code>"name"</code><code>))</code>

<code>        </code><code>if</code> <code>sub_dom </code><code>in</code> <code>tmp_sub:</code>

<code>            </code><code>#print "[Error]: Sub_domain [ %s.%s ] exists..." % (sub_dom,'.'.join(domain.split('.')[-2:]))</code>

<code>            </code><code>update_record(rec_list,sub_dom,domain_id,</code><code>'.'</code><code>.join(domain.split(</code><code>'.'</code><code>)[</code><code>-</code><code>2</code><code>:]),tel_ip,unic_ip)</code>

<code>            </code><code>tel_record</code><code>=</code><code>RecordCreate(sub_dom,</code><code>"A"</code><code>,u</code><code>'預設'</code><code>.encode(</code><code>"utf8"</code><code>),tel_ip,</code><code>600</code><code>,domain_id</code><code>=</code><code>domain_id,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>

<code>            </code><code>unic_record</code><code>=</code><code>RecordCreate(sub_dom,</code><code>"A"</code><code>,u</code><code>'聯通'</code><code>.encode(</code><code>"utf8"</code><code>),unic_ip,</code><code>600</code><code>,domain_id</code><code>=</code><code>domain_id,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>

<code>            </code><code>tel_record()</code>

<code>            </code><code>print</code> <code>"\033[32m[Notice]: Add record [ %s.%s ] -- [ %s ] successful!\033[0m"</code> <code>%</code> <code>(sub_dom,</code><code>'.'</code><code>.join(domain.split(</code><code>'.'</code><code>)[</code><code>-</code><code>2</code><code>:]),tel_ip)</code>

<code>            </code><code>unic_record()</code>

<code>            </code><code>print</code> <code>"\033[32m[Notice]: Add record [ %s.%s ] -- [ %s ] successful!\033[0m"</code> <code>%</code> <code>(sub_dom,</code><code>'.'</code><code>.join(domain.split(</code><code>'.'</code><code>)[</code><code>-</code><code>2</code><code>:]),unic_ip)</code>

<code>    </code><code>except</code><code>:</code>

<code>        </code><code>print</code> <code>"\033[31m[Error]: Add sub_domain record some error...\033[0m"</code>

<code>def</code> <code>update_record(rec_list,sub_dom,domain_id,dom,tel_ip</code><code>=</code><code>"</code><code>",unic_ip="</code><code>"):</code>

<code>    </code><code>for</code> <code>nu </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>,</code><code>len</code><code>(rec_list)):</code>

<code>        </code><code>if</code> <code>sub_dom </code><code>=</code><code>=</code> <code>rec_list[nu].get(</code><code>"name"</code><code>):</code>

<code>            </code><code>record_id</code><code>=</code><code>rec_list[nu].get(</code><code>"id"</code><code>)</code>

<code>            </code><code>if</code> <code>rec_list[nu].get(</code><code>"line"</code><code>) </code><code>=</code><code>=</code> <code>u</code><code>"預設"</code> <code>and</code> <code>tel_ip:</code>

<code>                </code><code>try</code><code>:</code>

<code>                    </code><code>tel_update_record</code><code>=</code><code>RecordDdns(record_id,sub_dom,</code><code>"預設"</code><code>,domain_id</code><code>=</code><code>domain_id,ttl</code><code>=</code><code>600</code><code>,value</code><code>=</code><code>tel_ip,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>

<code>                    </code><code>tel_update_record()</code>

<code>                    </code><code>print</code> <code>"\033[32m[Notice]: Update [ %s.%s ] --- [ %s ] Successful!\033[0m"</code> <code>%</code> <code>(sub_dom,dom,tel_ip)</code>

<code>                </code><code>except</code> <code>Exception,e:</code>

<code>                    </code><code>print</code> <code>"[Error]: %s"</code> <code>%</code> <code>e</code>

<code>                    </code><code>print</code> <code>"\033[31m.......... Update [ %s.%s ] --- [ %s ] Fail!\033[0m"</code> <code>%</code> <code>(sub_dom,dom,tel_ip)</code>

<code>            </code><code>elif</code> <code>rec_list[nu].get(</code><code>"line"</code><code>) </code><code>=</code><code>=</code> <code>u</code><code>"聯通"</code> <code>and</code> <code>unic_ip:</code>

<code>                    </code><code>unic_update_record</code><code>=</code><code>RecordDdns(record_id,sub_dom,</code><code>"聯通"</code><code>,domain_id</code><code>=</code><code>domain_id,ttl</code><code>=</code><code>600</code><code>,value</code><code>=</code><code>unic_ip,email</code><code>=</code><code>login_email,password</code><code>=</code><code>password)</code>

<code>                    </code><code>unic_update_record()</code>

<code>                    </code><code>print</code> <code>"\033[32m[Notice]: Update [ %s.%s ] --- [ %s ] Successful!\033[0m"</code> <code>%</code> <code>(sub_dom,dom,unic_ip)</code>

<code>                    </code><code>print</code> <code>"\033[31m.......... Update [ %s.%s ] --- [ %s ] Fail!\033[0m"</code> <code>%</code> <code>(sub_dom,dom,unic_ip)</code>

<code>                                                                                                                                                                                                            </code> 

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>

<code>    </code><code>if</code> <code>os.path.isfile(domain_file):</code>

<code>        </code><code>domain_index(domain_file)</code>

<code>        </code><code>for</code> <code>line </code><code>in</code> <code>file</code><code>(domain_file).readlines():</code>

<code>            </code><code>if</code> <code>line </code><code>=</code><code>=</code> <code>'\n'</code><code>:</code>

<code>                </code><code>continue</code>

<code>            </code><code>if</code> <code>line[</code><code>-</code><code>1</code><code>] </code><code>=</code><code>=</code> <code>'\n'</code><code>:</code>

<code>                </code><code>line</code><code>=</code><code>line[:</code><code>-</code><code>1</code><code>]</code>

<code>                </code><code>if</code> <code>illegal_list:</code>

<code>                    </code><code>for</code> <code>g </code><code>in</code> <code>illegal_list:</code>

<code>                        </code><code>try</code><code>:</code>

<code>                            </code><code>line.split()[</code><code>0</code><code>].index(g)</code>

<code>                        </code><code>except</code><code>:</code>

<code>                            </code><code>add_record(line.split()[</code><code>0</code><code>],line.split()[</code><code>1</code><code>])</code>

<code>                </code><code>else</code><code>:</code>

<code>                    </code><code>add_record(line.split()[</code><code>0</code><code>],line.split()[</code><code>1</code><code>])</code>

<code>        </code><code>print</code> <code>"\033[31m[Error]: Domain file [ %s ]not found...\033[0m"</code> <code>%</code> <code>domain_file</code>

<code>        </code><code>sys.exit()</code>

<a href="http://down.51cto.com/data/2363339" target="_blank">附件:http://down.51cto.com/data/2363339</a>

本文轉自 向陽草米奇 51CTO部落格,原文連結:http://blog.51cto.com/grass51/1273375,如需轉載請自行聯系原作者