Threezh1 / JSFinder

JSFinder is a tool for quickly extracting URLs and subdomains from JS files on a website.
2.62k stars 400 forks source link

子域名抓取不准确 #8

Open banshijun opened 4 years ago

banshijun commented 4 years ago

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

hanc00l commented 3 years ago

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

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

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

Threezh1 commented 3 years ago

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

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

hanc00l commented 3 years ago

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

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