getFreeProxy.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. """
  4. -------------------------------------------------
  5. File Name: GetFreeProxy.py
  6. Description : 通过关键字扫描censys.io中的疑似ip
  7. Author : JHao
  8. date: 2016/11/25
  9. -------------------------------------------------
  10. Change Activity:
  11. 2017/06/15: 通过关键字扫描censys.io中的疑似ip
  12. -------------------------------------------------
  13. """
  14. from lxml import etree
  15. import requests
  16. import threading
  17. API_URL = "https://www.censys.io/ipv4/_search?q={k}&page={p}"
  18. header = {
  19. 'Host': 'www.censys.io',
  20. 'Connection': 'keep-alive',
  21. 'Accept': '*/*',
  22. 'X-Requested-With': 'XMLHttpRequest',
  23. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
  24. 'Referer': 'https://www.censys.io/',
  25. 'Accept-Encoding': 'gzip, deflate, sdch, br',
  26. 'Accept-Language': 'zh-CN,zh;q=0.8'
  27. }
  28. KEY_WORD = ['Squid', 'CCProxy', 'Tinyproxy', 'Wingate', 'Pound', 'Proxy', 'Mikrotik']
  29. class GetFreeProxy(object):
  30. """
  31. proxy getter
  32. """
  33. def __init__(self):
  34. pass
  35. def scanner_ip(self):
  36. """
  37. 根据关键字搜索ip
  38. :return:
  39. """
  40. for key in KEY_WORD:
  41. for page in range(1, 200):
  42. url = API_URL.format(k=key, p=page)
  43. try:
  44. res = requests.get(url, headers=header, timeout=30, )
  45. if res.status_code != 200:
  46. break
  47. tree = etree.HTML(res.content)
  48. ip_list_el = tree.xpath('//span[@class="ip"]/a/text()')
  49. ip_list = [each.strip() for each in ip_list_el if each.strip()]
  50. for each in ip_list:
  51. yield each
  52. except Exception as e:
  53. print(e)
  54. print('Key {k} page: {p}'.format(k=key, p=page))
  55. class ThreadScanner(threading.Thread):
  56. def __init__(self, key):
  57. super(ThreadScanner, self).__init__()
  58. self.key = key
  59. self.query = {'query': self.key, 'page': 1, 'fields': ['ip']}
  60. def run(self):
  61. self.scanner_ip()
  62. def scanner_ip(self):
  63. for page in range(1, 200):
  64. url = API_URL.format(k=self.key, p=page)
  65. try:
  66. res = requests.get(url, headers=header, timeout=30, proxies={'https': 'https://106.75.87.49:53100'})
  67. if res.status_code == 429:
  68. break
  69. tree = etree.HTML(res.content)
  70. ip_list_el = tree.xpath('//span[@class="ip"]/a/text()')
  71. ip_list = [each.strip() for each in ip_list_el if each.strip()]
  72. for each in ip_list:
  73. print(each)
  74. except Exception as e:
  75. print(e)
  76. print('Key {k} page: {p}'.format(k=self.key, p=page))
  77. if __name__ == '__main__':
  78. g = GetFreeProxy()
  79. for each in g.scanner_ip():
  80. print(each)