批量查询域名是否被注册

近对域名感兴趣,想要找个短域名,无奈大部分都被注册了,挨个找太麻烦。在网上看到了一些教程,简单记录一下,免得以后忘了。

2023.3.14 找到了一个更好用的工具,准确性更好,见这里

准备工作

没学过python,所以在网上找了一个脚本,当时记得是在ii.do这里找到的,现在原地址打不开了,也没办法(摊手)……

  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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/usr/bin/env python

import binascii
import socket
import random
import os

DEFAULT_SERVER = '1.1.1.1'
DEFAULT_PORT = 53

def send(message, server, port):
    """
    Sends UDP packet to server and waits for response.

    Args:
        message: Encoded data, which will be sent.
        server: DNS server address. both IPv4 and IPv6 are supported.
        port: DNS server port.

    Returns:
        A string containing raw response.
    """
    message = message.strip()
    addr = (server, port)

    if '.' in server:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    else:
        s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)

    try:
        s.sendto(binascii.unhexlify(message), addr)
        data, address = s.recvfrom(4096)
    finally:
        s.close()

    return binascii.hexlify(data).decode()

def buildMessage(domain):
    """
    Creates a DNS request according to RFC2929. Attributes other than domain name are hard-coded.

    Args:
        domain: The domain name to be checked.

    Returns:
        A string containing raw DNS request.
    """
    message = '{:04x}'.format(random.randint(0, 65535)) #Generate an random request ID
    message += '01000001000000000000'

    #Encode parts of the given domain name into our request
    addr = domain.split('.')
    for i in addr:
        length = '{:02x}'.format(len(i))
        addr = binascii.hexlify(i.encode())
        message += length
        message += addr.decode()

    message += '0000060001'

    return message

def validateServer(ip, port):
    """
    Checks if the given IP-port combination is valid.

    Args:
        ip: IPv4 or IPv6 address.
        port: Port number.

    Returns:
        A bool value. True for valid and False for invalid.
    """
    if port <= 0 or port > 65535:
        return False

    try:
        if '.' in ip:
            socket.inet_pton(socket.AF_INET, ip)
        else:
            socket.inet_pton(socket.AF_INET6, ip)
    except:
        return False

    return True

def check(domain, server, port):
    """
    Sends the request, reads the raw response and checks the ANCOUNT attribute according to RFC2929.

    Args:
        domain: Domain name to be checked.
        server: DNS server to check against.
        port: DNS server port.

    Returns:
        A bool value representing if the domain exists.

    """
    message = buildMessage(domain)
    response = send(message, server, port)
    rcode = '{:b}'.format(int(response[4:8], 16)).zfill(16)[12:16]
    return False if rcode == '0011' else True

def main():
    
    server = []
    port = []
    dns = input('DNS服务器(回车默认):')
    if len(dns) == 0:
        server.append(DEFAULT_SERVER)
        port.append(DEFAULT_PORT)
    else:
        dns = dns.split(',')
        for i, item in enumerate(dns):
            item = item.strip()
            if '[' in item:
                s = item.split(']')[0][1:]
                p = item.split(']')[1][1:]
            else:
                s = item.split(':')[0]
                p = item.split(':')[1]
            p = int(p)
            if not validateServer(s, p):
                print('DNS服务器无效')
                return
            server.append(s)
            port.append(p)

    tld = input('域名后缀(多个后缀用,分隔):')
    tld = tld.split(',')
    for i, item in enumerate(tld):
        tld[i] = item.strip()

    dictFile = input('字典文件路径:')
    if not os.access(dictFile, os.R_OK):
        print('无法读取字典文件')
        return

    resultFile = input('扫描结果保存路径(不保存回车):')
    if len(resultFile) > 0:
        result = open(resultFile, 'a')

    verbose = False
    v = input('显示不可用域名[y/n]:')
    if v.lower() == 'y':
        verbose = True

    input('回车开始扫描')

    for line in open(dictFile):
        for suffix in tld:
            domain = line.strip() + '.' + suffix
            i = random.choice(range(len(server)))
            if not check(domain, server[i], port[i]):
                print(domain + ' 可用')
                if len(resultFile) > 0:
                    result.write(domain + ' 可用 \n')
            elif verbose:
                print(domain + ' 不可用')
                if len(resultFile) > 0:
                    result.write(domain + ' 不可用 \n')

    print('扫描完毕')
    if len(resultFile) > 0:
        print('扫描结果已保存到' + resultFile)

if __name__ == '__main__':
    main()

将这个文件保存为ym.py(原作者就是这么命名的)。

根据需要,生成字典,我自己生成了两字符的字典来查询域名,命名为name

   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
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
00
01
02
03
04
05
06
07
08
09
0a
0b
0c
0d
0e
0f
0g
0h
0i
0j
0k
0l
0m
0n
0o
0p
0q
0r
0s
0t
0u
0v
0w
0x
0y
0z
10
11
12
13
14
15
16
17
18
19
1a
1b
1c
1d
1e
1f
1g
1h
1i
1j
1k
1l
1m
1n
1o
1p
1q
1r
1s
1t
1u
1v
1w
1x
1y
1z
20
21
22
23
24
25
26
27
28
29
2a
2b
2c
2d
2e
2f
2g
2h
2i
2j
2k
2l
2m
2n
2o
2p
2q
2r
2s
2t
2u
2v
2w
2x
2y
2z
30
31
32
33
34
35
36
37
38
39
3a
3b
3c
3d
3e
3f
3g
3h
3i
3j
3k
3l
3m
3n
3o
3p
3q
3r
3s
3t
3u
3v
3w
3x
3y
3z
40
41
42
43
44
45
46
47
48
49
4a
4b
4c
4d
4e
4f
4g
4h
4i
4j
4k
4l
4m
4n
4o
4p
4q
4r
4s
4t
4u
4v
4w
4x
4y
4z
50
51
52
53
54
55
56
57
58
59
5a
5b
5c
5d
5e
5f
5g
5h
5i
5j
5k
5l
5m
5n
5o
5p
5q
5r
5s
5t
5u
5v
5w
5x
5y
5z
60
61
62
63
64
65
66
67
68
69
6a
6b
6c
6d
6e
6f
6g
6h
6i
6j
6k
6l
6m
6n
6o
6p
6q
6r
6s
6t
6u
6v
6w
6x
6y
6z
70
71
72
73
74
75
76
77
78
79
7a
7b
7c
7d
7e
7f
7g
7h
7i
7j
7k
7l
7m
7n
7o
7p
7q
7r
7s
7t
7u
7v
7w
7x
7y
7z
80
81
82
83
84
85
86
87
88
89
8a
8b
8c
8d
8e
8f
8g
8h
8i
8j
8k
8l
8m
8n
8o
8p
8q
8r
8s
8t
8u
8v
8w
8x
8y
8z
90
91
92
93
94
95
96
97
98
99
9a
9b
9c
9d
9e
9f
9g
9h
9i
9j
9k
9l
9m
9n
9o
9p
9q
9r
9s
9t
9u
9v
9w
9x
9y
9z
a0
a1
a2
a3
a4
a5
a6
a7
a8
a9
aa
ab
ac
ad
ae
af
ag
ah
ai
aj
ak
al
am
an
ao
ap
aq
ar
as
at
au
av
aw
ax
ay
az
b0
b1
b2
b3
b4
b5
b6
b7
b8
b9
ba
bb
bc
bd
be
bf
bg
bh
bi
bj
bk
bl
bm
bn
bo
bp
bq
br
bs
bt
bu
bv
bw
bx
by
bz
c0
c1
c2
c3
c4
c5
c6
c7
c8
c9
ca
cb
cc
cd
ce
cf
cg
ch
ci
cj
ck
cl
cm
cn
co
cp
cq
cr
cs
ct
cu
cv
cw
cx
cy
cz
d0
d1
d2
d3
d4
d5
d6
d7
d8
d9
da
db
dc
dd
de
df
dg
dh
di
dj
dk
dl
dm
dn
do
dp
dq
dr
ds
dt
du
dv
dw
dx
dy
dz
e0
e1
e2
e3
e4
e5
e6
e7
e8
e9
ea
eb
ec
ed
ee
ef
eg
eh
ei
ej
ek
el
em
en
eo
ep
eq
er
es
et
eu
ev
ew
ex
ey
ez
f0
f1
f2
f3
f4
f5
f6
f7
f8
f9
fa
fb
fc
fd
fe
ff
fg
fh
fi
fj
fk
fl
fm
fn
fo
fp
fq
fr
fs
ft
fu
fv
fw
fx
fy
fz
g0
g1
g2
g3
g4
g5
g6
g7
g8
g9
ga
gb
gc
gd
ge
gf
gg
gh
gi
gj
gk
gl
gm
gn
go
gp
gq
gr
gs
gt
gu
gv
gw
gx
gy
gz
h0
h1
h2
h3
h4
h5
h6
h7
h8
h9
ha
hb
hc
hd
he
hf
hg
hh
hi
hj
hk
hl
hm
hn
ho
hp
hq
hr
hs
ht
hu
hv
hw
hx
hy
hz
i0
i1
i2
i3
i4
i5
i6
i7
i8
i9
ia
ib
ic
id
ie
if
ig
ih
ii
ij
ik
il
im
in
io
ip
iq
ir
is
it
iu
iv
iw
ix
iy
iz
j0
j1
j2
j3
j4
j5
j6
j7
j8
j9
ja
jb
jc
jd
je
jf
jg
jh
ji
jj
jk
jl
jm
jn
jo
jp
jq
jr
js
jt
ju
jv
jw
jx
jy
jz
k0
k1
k2
k3
k4
k5
k6
k7
k8
k9
ka
kb
kc
kd
ke
kf
kg
kh
ki
kj
kk
kl
km
kn
ko
kp
kq
kr
ks
kt
ku
kv
kw
kx
ky
kz
l0
l1
l2
l3
l4
l5
l6
l7
l8
l9
la
lb
lc
ld
le
lf
lg
lh
li
lj
lk
ll
lm
ln
lo
lp
lq
lr
ls
lt
lu
lv
lw
lx
ly
lz
m0
m1
m2
m3
m4
m5
m6
m7
m8
m9
ma
mb
mc
md
me
mf
mg
mh
mi
mj
mk
ml
mm
mn
mo
mp
mq
mr
ms
mt
mu
mv
mw
mx
my
mz
n0
n1
n2
n3
n4
n5
n6
n7
n8
n9
na
nb
nc
nd
ne
nf
ng
nh
ni
nj
nk
nl
nm
nn
no
np
nq
nr
ns
nt
nu
nv
nw
nx
ny
nz
o0
o1
o2
o3
o4
o5
o6
o7
o8
o9
oa
ob
oc
od
oe
of
og
oh
oi
oj
ok
ol
om
on
oo
op
oq
or
os
ot
ou
ov
ow
ox
oy
oz
p0
p1
p2
p3
p4
p5
p6
p7
p8
p9
pa
pb
pc
pd
pe
pf
pg
ph
pi
pj
pk
pl
pm
pn
po
pp
pq
pr
ps
pt
pu
pv
pw
px
py
pz
q0
q1
q2
q3
q4
q5
q6
q7
q8
q9
qa
qb
qc
qd
qe
qf
qg
qh
qi
qj
qk
ql
qm
qn
qo
qp
qq
qr
qs
qt
qu
qv
qw
qx
qy
qz
r0
r1
r2
r3
r4
r5
r6
r7
r8
r9
ra
rb
rc
rd
re
rf
rg
rh
ri
rj
rk
rl
rm
rn
ro
rp
rq
rr
rs
rt
ru
rv
rw
rx
ry
rz
s0
s1
s2
s3
s4
s5
s6
s7
s8
s9
sa
sb
sc
sd
se
sf
sg
sh
si
sj
sk
sl
sm
sn
so
sp
sq
sr
ss
st
su
sv
sw
sx
sy
sz
t0
t1
t2
t3
t4
t5
t6
t7
t8
t9
ta
tb
tc
td
te
tf
tg
th
ti
tj
tk
tl
tm
tn
to
tp
tq
tr
ts
tt
tu
tv
tw
tx
ty
tz
u0
u1
u2
u3
u4
u5
u6
u7
u8
u9
ua
ub
uc
ud
ue
uf
ug
uh
ui
uj
uk
ul
um
un
uo
up
uq
ur
us
ut
uu
uv
uw
ux
uy
uz
v0
v1
v2
v3
v4
v5
v6
v7
v8
v9
va
vb
vc
vd
ve
vf
vg
vh
vi
vj
vk
vl
vm
vn
vo
vp
vq
vr
vs
vt
vu
vv
vw
vx
vy
vz
w0
w1
w2
w3
w4
w5
w6
w7
w8
w9
wa
wb
wc
wd
we
wf
wg
wh
wi
wj
wk
wl
wm
wn
wo
wp
wq
wr
ws
wt
wu
wv
ww
wx
wy
wz
x0
x1
x2
x3
x4
x5
x6
x7
x8
x9
xa
xb
xc
xd
xe
xf
xg
xh
xi
xj
xk
xl
xm
xn
xo
xp
xq
xr
xs
xt
xu
xv
xw
xx
xy
xz
y0
y1
y2
y3
y4
y5
y6
y7
y8
y9
ya
yb
yc
yd
ye
yf
yg
yh
yi
yj
yk
yl
ym
yn
yo
yp
yq
yr
ys
yt
yu
yv
yw
yx
yy
yz
z0
z1
z2
z3
z4
z5
z6
z7
z8
z9
za
zb
zc
zd
ze
zf
zg
zh
zi
zj
zk
zl
zm
zn
zo
zp
zq
zr
zs
zt
zu
zv
zw
zx
zy
zz

其它多字符的域名也可以生成相应的字典。

将两者文件复制保存到同一个文件夹下。

使用方式

下面以sb后缀的域名举例。

python运行ym.py脚本,根据需要填写相关信息:

image-20230309102626424

扫描后得到类似以下的结果:

image-20230309102928116

如果指明了文件,可用域名就会保存在相关文件之中,否则只会在命令行界面输出。

PS:建议自己还是核验一下为好,这个脚本的筛选结果并不是十分准确,有些域名实际上已被注册了!

OVER

updatedupdated2023-04-072023-04-07