JSFinder icon indicating copy to clipboard operation
JSFinder copied to clipboard

子域名抓取不准确

Open banshijun opened this issue 6 years ago • 3 comments

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

banshijun avatar Nov 13 '19 02:11 banshijun

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

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时也有一处代码需要修改。

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

hanc00l avatar Feb 05 '21 01:02 hanc00l

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

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吗?

Threezh1 avatar Feb 16 '21 12:02 Threezh1

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

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

hanc00l avatar Feb 17 '21 15:02 hanc00l