国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現的Google IP 可用性檢測腳本

2019-11-25 17:41:01
字體:
來源:轉載
供稿:網友

需要 Python 3.4+,一個參數用來選擇測試搜索服務還是 GAE 服務。測試 GAE 服務的話需要先修改開頭的兩個變量。從標準輸入讀取 IP 地址或者 IP 段(形如 192.168.0.0/16)列表,每行一個。可用 IP 輸出到標準輸出。實時測試結果輸出到標準錯誤。50 線程并發。

checkgoogleip

#!/usr/bin/env python3 import sysfrom ipaddress import IPv4Networkimport http.client as clientfrom concurrent.futures import ThreadPoolExecutorimport argparseimport sslimport socket # 先按自己的情況修改以下幾行APP_ID = 'your_id_here'APP_PATH = '/fetch.py' context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)context.verify_mode = ssl.CERT_REQUIREDcontext.load_verify_locations('/etc/ssl/certs/ca-certificates.crt') class HTTPSConnection(client.HTTPSConnection): def __init__(self, *args, hostname=None, **kwargs):  self._hostname = hostname  super().__init__(*args, **kwargs)  def connect(self):  super(client.HTTPSConnection, self).connect()   if self._tunnel_host:   server_hostname = self._tunnel_host  else:   server_hostname = self._hostname or self.host   sni_hostname = server_hostname if ssl.HAS_SNI else None   self.sock = self._context.wrap_socket(self.sock,                     server_hostname=sni_hostname)  if not self._context.check_hostname and self._check_hostname:   try:    ssl.match_hostname(self.sock.getpeercert(), server_hostname)   except Exception:    self.sock.shutdown(socket.SHUT_RDWR)    self.sock.close()    raise def check_ip_p(ip, func): if func(ip):  print(ip, flush=True) def check_for_gae(ip): return _check(APP_ID + '.appspot.com', APP_PATH, ip) def check_for_search(ip): return _check('www.google.com', '/', ip) def _check(host, path, ip): for chance in range(1,-1,-1):  try:   conn = HTTPSConnection(    ip, timeout = 5,    context = context,    hostname = host,   )   conn.request('GET', path, headers = {    'Host': host,   })   response = conn.getresponse()   if response.status < 400:    print('GOOD:', ip, file=sys.stderr)   else:    raise Exception('HTTP Error %s %s' % (     response.status, response.reason))   return True  except KeyboardInterrupt:   raise  except Exception as e:   if isinstance(e, ssl.CertificateError):    print('WARN: %s is not Google/'s!' % ip, file=sys.stderr)    chance = 0   if chance == 0:    print('BAD :', ip, e, file=sys.stderr)    return False   else:    print('RE :', ip, e, file=sys.stderr) def main(): parser = argparse.ArgumentParser(description='Check Google IPs') parser.add_argument('service', choices=['search', 'gae'],           help='service to check') args = parser.parse_args() func = globals()['check_for_' + args.service]  count = 0 with ThreadPoolExecutor(max_workers=50) as executor:  for l in sys.stdin:   l = l.strip()   if '/' in l:    for ip in IPv4Network(l).hosts():     executor.submit(check_ip_p, str(ip), func)     count += 1   else:    executor.submit(check_ip_p, l, func)    count += 1 print('%d IP checked.' % count) if __name__ == '__main__': main()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辽阳市| 怀化市| 郁南县| 连江县| 雷波县| 北海市| 岳阳市| 嫩江县| 青海省| 慈溪市| 双流县| 弥勒县| 玛多县| 漳州市| 东安县| 朔州市| 大宁县| 青冈县| 紫云| 沅江市| 卢湾区| 忻州市| 麻江县| 交城县| 公安县| 青龙| 萝北县| 江孜县| 金塔县| 北海市| 枣阳市| 普兰店市| 南投市| 蓬溪县| 独山县| 临武县| 尼玛县| 都江堰市| 凌源市| 图木舒克市| 五河县|