前言
有时我们需要用上代理IP去访问某些网站,
网上也有很多免费的,但是我们目地是在于折腾。
自己扫描全中国IP指定的某几个端口,并验证是否可用
以前我用易语言尝试过,但是效率跟成功率不高。
学了Python之后,整个人精神了。在强大的支持库下
有时真的可以为所欲为。。。
masscan扫描器
一开始我是用Zmap扫的,但是Zmap貌似不能指定IP段。只能随机扫
后来发现了这个masscan,我们来了解下:
MASSCAN是一个Internet端口扫描程序。它可以在6分钟内扫描整个互联网,每秒传输1000万个数据包。
它产生类似于“ nmap ”的结果,这是最着名的端口扫描器。内部,它的操作更像“ scanrand ”,“ unicornscan ”和“ ZMAP ”,使用异步传输。主要区别在于它比其他扫描仪更快。此外,它更灵活,允许任意地址范围和端口范围。
它使用自定义TCP / IP堆栈。除简单端口扫描之外的任何其他操作都将导致与本地TCP / IP堆栈冲突。这意味着您需要使用-S选项来使用单独的IP地址,或者将操作系统配置为防火墙MASSCAN使用的端口。
这个程序非常快速地发出数据包。在Windows或VM上,它可以执行300,000个数据包/秒。在Linux(没有虚拟化)上,它每秒会产生160万个数据包。这足以让大多数网络融化。
炸一听好像感觉比号称一小时扫全网的ZMAP还厉害
反正我了解这个相对ZMAP的优点在于,可以多个端口,指定IP段
Github:https://github.com/robertdavidgraham/masscan
中文的参考:https://www.4hou.com/tools/8251.html
扫描验证器
- #!coding=utf-8
- import os
- import re
- import sys
- import time
- import multiprocessing
- import urllib2
-
- #----------------------------------------------------------------------
- def main(prots,ip_dic):
- """
- 主函数,处理输入的参数
- """
- iplist = None
- try:
-
- iplist=[]
- _ipFile=open(ip_dic, 'r').readlines()
- for echo in _ipFile:
- ip=re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b", echo)
-
- if ip != []:
- #print ip[0]
- iplist.append(ip[0])
- p =0
- print "Start test porxy..."
- for proxys in iplist:
- pp =multiprocessing.Process(target=proxy_test,args=(proxys,prots))
- pp.start()
- p +=1
- if p>=50:
- p=0
- pp.join()
- pp.join()
- except Exception:
- print "[!] The path of the dictionary file is incorrect"
- pass
- #exit()
- #----------------------------------------------------------------------
- def isIP(str):
- """
- 判断是否是IP
- """
- p = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$')
- if p.match(str):
- return True
- else:
- return False
- #----------------------------------------------------------------------
- def proxy_test(proxys,prots):
- """
- 测试代理是否有效
- """
- proxy = urllib2.ProxyHandler(proxies={"http":"http://{}:{}".format(proxys,prots)})
- opener = urllib2.build_opener(proxy)
- urllib2.install_opener(opener)
-
- try:
- testurl ="http://120.79.152.76/ip.php"
- req =urllib2.Request(testurl)
- res =urllib2.urlopen(req,timeout=5).read()
- #print proxys+":"+prots
- if isIP(res):
- print "\033[1;32;41m{}\033[0m\n{}".format(proxys+":"+prots,res)
- output = open("good.txt", 'a')
- output.write(proxys+":"+prots+"\n")
- except Exception as e:
- #print "--------- {}".format(e)
- pass
-
- #----------------------------------------------------------------------
- if __name__ == '__main__':
- prots = ['3128','808','8118','9999']
- ip_dic = "proxy.txt"
- ipl="http://ipblock.chacuo.net/down/t_txt=c_CN"
- req =urllib2.Request(ipl)
- res =urllib2.urlopen(req,timeout=5).read()
- #print res
- ipd=re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}\b", res)
- #print ipd
- for i in ipd:
- print i
- for prot in prots:
- ########################################
- #MASSCAN
- os.system("/root/masscan/bin/./masscan %s -p%s --rate 30000 -oX %s --wait 1" % (i,prot,ip_dic))
- #######################################
- time.sleep(1)
- main(prot,ip_dic)
- time.sleep(10)
- exit()
目前没有过滤透明代理,在判断是否IP哪里判断是否跟验证的IP是否一样即可
还有就是我写的多线程始终感觉不是很大好用。有哪位老大赐教下最好。
实际的大量需要使用代理IP的话。很可能还需要采集免费IP来验证
一台大带宽的机器很重要。家里的20M上传,最多可以到–rate 60000