Python實(shí)現(xiàn)的Google IP 可用性檢測(cè)腳本
需要 Python 3.4+,一個(gè)參數(shù)用來(lái)選擇測(cè)試搜索服務(wù)還是 GAE 服務(wù)。測(cè)試 GAE 服務(wù)的話(huà)需要先修改開(kāi)頭的兩個(gè)變量。從標(biāo)準(zhǔn)輸入讀取 IP 地址或者 IP 段(形如 192.168.0.0/16)列表,每行一個(gè)??捎?IP 輸出到標(biāo)準(zhǔn)輸出。實(shí)時(shí)測(cè)試結(jié)果輸出到標(biāo)準(zhǔn)錯(cuò)誤。50 線(xiàn)程并發(fā)。
checkgoogleip
#!/usr/bin/env python3 import sys from ipaddress import IPv4Network import http.client as client from concurrent.futures import ThreadPoolExecutor import argparse import ssl import socket # 先按自己的情況修改以下幾行 APP_ID = 'your_id_here' APP_PATH = '/fetch.py' context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) context.verify_mode = ssl.CERT_REQUIRED context.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()
相關(guān)文章
Sublime開(kāi)發(fā)python程序的示例代碼
本篇文章主要介紹了Sublime開(kāi)發(fā)python程序的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法
這篇文章主要介紹了使用Python webdriver圖書(shū)館搶座自動(dòng)預(yù)約的正確方法,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Python實(shí)現(xiàn)將字符串的首字母變?yōu)榇髮?xiě),其余都變?yōu)樾?xiě)的方法
今天小編就為大家分享一篇Python實(shí)現(xiàn)將字符串的首字母變?yōu)榇髮?xiě),其余都變?yōu)樾?xiě)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Python3.0 實(shí)現(xiàn)決策樹(shù)算法的流程
這篇文章主要介紹了Python3.0 實(shí)現(xiàn)決策樹(shù)算法的流程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08Python實(shí)現(xiàn)微信自動(dòng)回復(fù)信息的功能(根據(jù)不同信息回復(fù)對(duì)應(yīng)的信息)
這篇文章主要介紹了Python實(shí)現(xiàn)微信自動(dòng)回復(fù)信息的功能(根據(jù)不同信息回復(fù)對(duì)應(yīng)的信息),我們使用的第三方包是UIAutomation,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09簡(jiǎn)述:我為什么選擇Python而不是Matlab和R語(yǔ)言
這篇文章主要介紹了簡(jiǎn)述:我為什么選擇Python而不是Matlab和R語(yǔ)言,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11使用django-suit為django 1.7 admin后臺(tái)添加模板
前面我們介紹了Django-grappelli給admin添加模板,可是使用中發(fā)現(xiàn)inline有點(diǎn)問(wèn)題,所以就換了今天我們要談的Django-suit,貌似要稍微好一些2014-11-11