python扫全中国并验证代理

前言

有时我们需要用上代理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

扫描验证器

  1. #!coding=utf-8
  2. import os
  3. import re
  4. import sys
  5. import time
  6. import multiprocessing
  7. import urllib2
  8.  
  9. #----------------------------------------------------------------------
  10. def main(prots,ip_dic):
  11. """
  12. 主函数,处理输入的参数
  13. """
  14. iplist = None
  15. try:
  16.  
  17. iplist=[]
  18. _ipFile=open(ip_dic, 'r').readlines()
  19. for echo in _ipFile:
  20. ip=re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b", echo)
  21.  
  22. if ip != []:
  23. #print ip[0]
  24. iplist.append(ip[0])
  25. p =0
  26. print "Start test porxy..."
  27. for proxys in iplist:
  28. pp =multiprocessing.Process(target=proxy_test,args=(proxys,prots))
  29. pp.start()
  30. p +=1
  31. if p>=50:
  32. p=0
  33. pp.join()
  34. pp.join()
  35. except Exception:
  36. print "[!] The path of the dictionary file is incorrect"
  37. pass
  38. #exit()
  39. #----------------------------------------------------------------------
  40. def isIP(str):
  41. """
  42. 判断是否是IP
  43. """
  44. p = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$')
  45. if p.match(str):
  46. return True
  47. else:
  48. return False
  49. #----------------------------------------------------------------------
  50. def proxy_test(proxys,prots):
  51. """
  52. 测试代理是否有效
  53. """
  54. proxy = urllib2.ProxyHandler(proxies={"http":"http://{}:{}".format(proxys,prots)})
  55. opener = urllib2.build_opener(proxy)
  56. urllib2.install_opener(opener)
  57.  
  58. try:
  59. testurl ="http://120.79.152.76/ip.php"
  60. req =urllib2.Request(testurl)
  61. res =urllib2.urlopen(req,timeout=5).read()
  62. #print proxys+":"+prots
  63. if isIP(res):
  64. print "\033[1;32;41m{}\033[0m\n{}".format(proxys+":"+prots,res)
  65. output = open("good.txt", 'a')
  66. output.write(proxys+":"+prots+"\n")
  67. except Exception as e:
  68. #print "--------- {}".format(e)
  69. pass
  70.  
  71. #----------------------------------------------------------------------
  72. if __name__ == '__main__':
  73. prots = ['3128','808','8118','9999']
  74. ip_dic = "proxy.txt"
  75. ipl="http://ipblock.chacuo.net/down/t_txt=c_CN"
  76. req =urllib2.Request(ipl)
  77. res =urllib2.urlopen(req,timeout=5).read()
  78. #print res
  79. ipd=re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9]{1,2}\b", res)
  80. #print ipd
  81. for i in ipd:
  82. print i
  83. for prot in prots:
  84. ########################################
  85. #MASSCAN
  86. os.system("/root/masscan/bin/./masscan %s -p%s --rate 30000 -oX %s --wait 1" % (i,prot,ip_dic))
  87. #######################################
  88. time.sleep(1)
  89. main(prot,ip_dic)
  90. time.sleep(10)
  91. exit()

目前没有过滤透明代理,在判断是否IP哪里判断是否跟验证的IP是否一样即可

还有就是我写的多线程始终感觉不是很大好用。有哪位老大赐教下最好。

实际的大量需要使用代理IP的话。很可能还需要采集免费IP来验证

一台大带宽的机器很重要。家里的20M上传,最多可以到–rate 60000

发表评论

邮箱地址不会被公开。 必填项已用*标注