ACTIONS配置文件修正
Daily Domain Check / domain_check (push) Has been cancelled Details

This commit is contained in:
ahdoawhfo 2024-08-19 14:00:28 +08:00
parent 02b89188e0
commit 3fb33ccf6b
Signed by: ahdoawhfo
GPG Key ID: 5B4A734D16322C1D
6 changed files with 861 additions and 709 deletions

View File

@ -20,10 +20,8 @@ jobs:
with: with:
python-version: '3.12.5' python-version: '3.12.5'
- name: Install dependencies - name: Run single domain check
run: | run: python single_domain_check.py
python -m pip install --upgrade pip
# Add any other dependencies your script needs here
- name: Run domain check - name: Run domain check
run: python domain_check.py run: python domain_check.py
@ -32,10 +30,11 @@ jobs:
run: | run: |
today=$(date +%Y-%m-%d) today=$(date +%Y-%m-%d)
mv domain.txt "domain_$today.txt" mv domain.txt "domain_$today.txt"
mv domains.txt "domains_$today.txt"
- name: Create release and upload result - name: Create release and upload result
run: | run: |
today=$(date +%Y-%m-%d) today=$(date +%Y-%m-%d)
gitea release create --title "Domain Check $today" --assets "domain_$today.txt" gitea release create --title "Single Domain Check $today" --assets "domain_$today.txt" --assets "domains_$today.txt"
env: env:
TOKEN: ${{ secrets.TOKEN }} TOKEN: ${{ secrets.TOKEN }}

728
DICT
View File

@ -1,702 +1,26 @@
# a a
# b b
# c c
# d d
# e e
# f f
# g g
# h h
# i i
# j j
# k k
# l l
# m m
# n n
# o o
# p p
# q q
# r r
# s s
# t t
# u u
# v v
# w w
# x x
# y y
# z z
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

676
DICTS Normal file
View File

@ -0,0 +1,676 @@
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

12
DOMAIN Normal file
View File

@ -0,0 +1,12 @@
am
im
at
cx
cz
de
gs
lc
lu
mk
nu
st

View File

@ -99,13 +99,13 @@ def main():
# Automatically read the dictionary from the DICT file # Automatically read the dictionary from the DICT file
try: try:
with open("DICT", "r") as fp_dict: with open("DICTS", "r") as fp_dict:
dictionary = fp_dict.readlines() dictionary = fp_dict.readlines()
except FileNotFoundError: except FileNotFoundError:
print("DICTIONARY FILE NOT FOUND!") print("DICTIONARY FILE NOT FOUND!")
sys.exit(3) sys.exit(3)
with open("domain.txt", "w") as fp_result: with open("domains.txt", "w") as fp_result:
fp_result.write( fp_result.write(
"AVAILABLE DOMAIN NAME LIST:\n" "---------------------------------\n" "AVAILABLE DOMAIN NAME LIST:\n" "---------------------------------\n"
) )

141
single_domain_check.py Normal file
View File

@ -0,0 +1,141 @@
import os
import socket
import sys
import concurrent.futures
import time
import random
def domain_megabot(domain, no_match_pattern, whois_server):
retry_count = 0
while True:
response = whois_query(whois_server, domain)
if response:
if no_match_pattern in response:
print(f"{domain} AVAILABLE FOR REGISTRATION!")
with open("domain.txt", "a") as f:
f.write(f"{domain}\n")
else:
print(f"{domain} NOT AVAILABLE.")
# Add random delay to avoid triggering rate limits
time.sleep(random.uniform(1, 5))
break
else:
retry_count += 1
sleep_time = min(60, 2**retry_count + random.uniform(0, 1))
print(f"Retrying query for {domain} in {sleep_time:.2f} seconds...")
time.sleep(sleep_time)
def whois_query(server, query):
ip = hostname_to_ip(server)
if not ip:
print("FAILED TO RESOLVE HOSTNAME")
return ""
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(10)
s.connect((ip, 43))
s.sendall(f"{query}\r\n".encode())
response = b""
while True:
data = s.recv(4096)
if not data:
break
response += data
return response.decode()
except socket.error as err:
print(f"Error during WHOIS query: {err}")
return None
def hostname_to_ip(hostname):
try:
return socket.gethostbyname(hostname)
except socket.error as err:
print(f"Error resolving hostname: {err}")
return None
def str_split(s, delimiter):
return s.split(delimiter)
def str_conn(s1, s2):
return f"{s1}{s2}"
def main():
# Automatically read TLDs from the TLD_DATA file in the current directory
try:
with open("TLD_DATA", "r") as fp:
tld_data = fp.readlines()
except FileNotFoundError:
print("TLD DATABASE NOT FOUND!")
sys.exit(1)
# Automatically read domain extensions (TLDs) from the DOMAINS file
try:
with open("DOMAIN", "r") as fp:
exts = [line.strip() for line in fp.readlines() if line.strip()]
except FileNotFoundError:
print("DOMAINS FILE NOT FOUND!")
sys.exit(1)
# Load TLD information
tld_info = {}
for line in tld_data:
arr = str_split(line.strip(), "=")
if arr[0] in exts:
tld_info[arr[0]] = {
"whois_server": arr[1],
"no_match_pattern": arr[2],
}
if not tld_info:
print("NO VALID TLDs FOUND IN DOMAINS FILE!")
sys.exit(2)
# Automatically read the dictionary from the DICT file
try:
with open("DICT", "r") as fp_dict:
dictionary = fp_dict.readlines()
except FileNotFoundError:
print("DICTIONARY FILE NOT FOUND!")
sys.exit(3)
with open("domain.txt", "w") as fp_result:
fp_result.write(
"AVAILABLE DOMAIN NAME LIST:\n" "---------------------------------\n"
)
# Prepare domain names to check
domains = []
for line in dictionary:
domain_prefix = line.strip()
if domain_prefix:
for ext in exts:
domain = str_conn(str_conn(domain_prefix, "."), ext)
domains.append(
(
domain,
tld_info[ext]["no_match_pattern"],
tld_info[ext]["whois_server"],
)
)
# Use a thread pool to check multiple domains concurrently
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
futures = [
executor.submit(domain_megabot, domain, pattern, server)
for domain, pattern, server in domains
]
for future in concurrent.futures.as_completed(futures):
future.result() # Handle any exceptions in threads
print("TASK FINISHED! RESULTS SAVED TO domain.txt")
if __name__ == "__main__":
main()