有时候需要获取某个网站的子域名,在检测一些大站的时候常会用到。以前找某个网站的子域名我用的方法是在网站内和链接处找,偶尔也会用到google。后来听朋友说获取子域名的小工具,没怎么在意。有一天要获取某个网站的子域名了,就问他要程序名字,结果他一时想不起来了。。。然后他说有个在线查询的网站,把网址发给了我。要查询某个网站的子域名,在“domain”右面的输入框中输入网站的域名,然后点“Query”按钮就可以列出该网站的子域名了。
通过网站就可以查询某个网站有哪些子域名,真是太方便了。能不能更方便一点做个本地查询工具呢?在本地运行一下程序就可以获得某个网站的子域名,结果是提取的是subdomain.php的查询结果。当然,还有安全性的考虑,如果直接去网站查询,如果网站被人挂了马,没打补丁的话就悲剧了。本地查询的话就可以避免这个风险。
考虑用我会点的Python来实现。大体思路是通过Python发送数据包模拟在网站上的查询,获取查询结果页面的源代码,用正则匹配源代码中的子域名,最后输出结果。
可以看到查询的过程就是向subdomain.php以POST方式提交数据,其中就是我们查询的域名。
需要以PST方式提交数据,我用的方法是urllib模块中的urlopen()函数,函数原型为:
urlopn(rl, data=None, pries=None)
其中url就是提交数据到哪里的具体地址,data就是以POST方式提交数据时提交的具体数据。默认情况下是以GET方式提交数据,所以默认情况下只有url一个参数。经过测试,subdomain.php以POST方式提交数据时也会返回查询到的子域名,如果把要查询的域名定义为一个变量domainame,要提交的数据定义为变量postdata,则POST提交的数据为:
pstata='domin='+ domainame
经过危险漫步测试,从返回的网页源码中提取查询到的子域名的正则表达式。
特别说明一下,程序的说明部分参考了他人写的某个python程序中说明部分的写法,在此感谢和说明。
把代码保存为文件getsubdomain.py,放到了C盘根目录下。按“Win"r键加R调出“运行”窗口,输入cmd后回车,打开命令行窗口。输人命令“cd\”,回车,切换到C盘根目录下,输入命令“pythongesbdomain.py”,回车后就可以看到的程序说明了。因为我已经把python.exe所在的目录加进了系统环境变量中,所以不需要输入python.exe所在的目录,你如果没把python.exe所在的目录加进系统环境变量中,可能需要输入python.exe所在的具体目录或把文件getsubdoain.py放到文件python.exe同目录下。
小程序的使用方法的格式为:
pyton getsudomain,py-d[doainl-o[filnme]
其中-d足必选参数,domain对应的是要查询子域名的网站的域名;-o是可选参数,你可以把查询到的结果保存到文件,filename是保存文件时的文件名。当然默认情况下是只在屏幕上打印查询到的结果,不把结果保存到文件。
来测试下程序是否可用,还是来查询下子域名。输入命令,回车后。
和网页上的查询结果相比,我做了点小改进:
1.统计了总共查询出了多少个子域名。
2.对查询到的子域名输出的时候左对齐,美观了一点。
3.给每个查询到的子域名一个编号,检测子域名的时候不容易重复检测或漏检。
如果查询出的结果太多,前面的结果在命令窗口中会看不到,只能看到第554个及以后的结果。
这时候如果要查看全部结果,可以把结果输出到文件,比如我想把结果保存到当前目录下的文件baidu.txt中,则输入命令。
回车后在当前目录(C:\)下生成了文件baidu.txt。打开baidu.txt,就可以看到查询到的所有子域名了。
看来小程序功能正常。
写的这个Python小程序就是抓取网站查询子域名的结果,代码写的很烂,有写错或更好的写法欢迎告诉我。
本文内容所提及均为本地测试或经过目标授权同意,旨在提供教育和研究信息,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,作者不鼓励或支持任何形式的非法行为。