Threezh1/JSFinder

子域名抓取不准确

banshijun opened this issue · 3 comments

针对baidu.com jd.com等抓取的很准确,但是针对政府网站抓取不正确。。根据政府网站命名规则。,,,123.xxx.gov.cn(代表某厅网站),而某省网站是xxx.gov.cn 这样在抓取某厅的二级域名时,会将某gov.cn认为一级域名,而抓取某省所有厅部门网站,,,,而非某厅的二级域名

分析作者的源码,发现在处理子域名的时候考虑不周全:

def find_subdomain(urls, mainurl):
url_raw = urlparse(mainurl)
domain = url_raw.netloc
miandomain = domain
positions = find_last(domain, ".")
if len(positions) > 1:miandomain = domain[positions[-2] + 1:]

作者在处理时直接取域名.分隔最后两部分作为顶级域名,遇到xxx.gov.cn所以就会出错,建议使用tld库来处理:

from tld import get_fld
miandomain = get_fld(mainurl, fail_silently=True, fix_protocol=True)

这是我测试的结果:
修正前:

➜ JSFinder git:(master) ✗ python3 JSFinder.py -u http://www.cq.sgcc.com.cn -d
Find 4 Subdomain:
www.sgcc.com.cn
www.cq.sgcc.com.cn
www.indaa.com.cn
dps.cq.sgcc.com.cn:10080

www.indaa.com.cn其实不属于sgcc.com.cn子域名,属于误判断
修正后:

www.sgcc.com.cn
www.cq.sgcc.com.cn
dps.cq.sgcc.com.cn:10080

在find_by_url处理subdomain时也有一处代码需要修改。

另外,有部份代码也需要优化一下。感谢分享。

分析作者的源码,发现在处理子域名的时候考虑不周全:

def find_subdomain(urls, mainurl):
url_raw = urlparse(mainurl)
domain = url_raw.netloc
miandomain = domain
positions = find_last(domain, ".")
if len(positions) > 1:miandomain = domain[positions[-2] + 1:]

作者在处理时直接取域名.分隔最后两部分作为顶级域名,遇到xxx.gov.cn所以就会出错,建议使用tld库来处理:

from tld import get_fld
miandomain = get_fld(mainurl, fail_silently=True, fix_protocol=True)

这是我测试的结果:
修正前:

➜ JSFinder git:(master) ✗ python3 JSFinder.py -u http://www.cq.sgcc.com.cn -d
Find 4 Subdomain:
www.sgcc.com.cn
www.cq.sgcc.com.cn
www.indaa.com.cn
dps.cq.sgcc.com.cn:10080

www.indaa.com.cn其实不属于sgcc.com.cn子域名,属于误判断
修正后:

www.sgcc.com.cn
www.cq.sgcc.com.cn
dps.cq.sgcc.com.cn:10080

在find_by_url处理subdomain时也有一处代码需要修改。

另外,有部份代码也需要优化一下。感谢分享。

你好,能帮忙开一个PR吗?

分析作者的源码,发现在处理子域名的时候考虑不周全:

def find_subdomain(urls, mainurl):
url_raw = urlparse(mainurl)
domain = url_raw.netloc
miandomain = domain
positions = find_last(domain, ".")
if len(positions) > 1:miandomain = domain[positions[-2] + 1:]

作者在处理时直接取域名.分隔最后两部分作为顶级域名,遇到xxx.gov.cn所以就会出错,建议使用tld库来处理:

from tld import get_fld
miandomain = get_fld(mainurl, fail_silently=True, fix_protocol=True)

这是我测试的结果:
修正前:

➜ JSFinder git:(master) ✗ python3 JSFinder.py -u http://www.cq.sgcc.com.cn -d
Find 4 Subdomain:
www.sgcc.com.cn
www.cq.sgcc.com.cn
www.indaa.com.cn
dps.cq.sgcc.com.cn:10080

www.indaa.com.cn其实不属于sgcc.com.cn子域名,属于误判断
修正后:

www.sgcc.com.cn
www.cq.sgcc.com.cn
dps.cq.sgcc.com.cn:10080

在find_by_url处理subdomain时也有一处代码需要修改。
另外,有部份代码也需要优化一下。感谢分享。

你好,能帮忙开一个PR吗?

已提交PR