Python实现的Google IP 可用性检测脚本


Posted in Python onApril 23, 2015

需要 Python 3.4+,一个参数用来选择测试搜索服务还是 GAE 服务。测试 GAE 服务的话需要先修改开头的两个变量。从标准输入读取 IP 地址或者 IP 段(形如 192.168.0.0/16)列表,每行一个。可用 IP 输出到标准输出。实时测试结果输出到标准错误。50 线程并发。

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()
Python 相关文章推荐
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
200行自定义python异步非阻塞Web框架
Mar 15 Python
python利用高阶函数实现剪枝函数
Mar 20 Python
python的concat等多种用法详解
Nov 28 Python
django admin.py 外键,反向查询的实例
Jul 26 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
pygame实现俄罗斯方块游戏(AI篇2)
Oct 29 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 Python
Python爬虫入门教程02之笔趣阁小说爬取
Jan 24 Python
python 中的@运算符使用
May 26 Python
七个非常实用的Python工具包总结
Jun 15 Python
Python3.2中的字符串函数学习总结
Apr 23 #Python
Python与Redis的连接教程
Apr 22 #Python
Python实现的数据结构与算法之快速排序详解
Apr 22 #Python
利用Fn.py库在Python中进行函数式编程
Apr 22 #Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 #Python
Python实现的数据结构与算法之链表详解
Apr 22 #Python
Python实现的数据结构与算法之双端队列详解
Apr 22 #Python
You might like
PHP与MySQL交互使用详解
2006/10/09 PHP
杏林同学录(八)
2006/10/09 PHP
PHP函数常用用法小结
2010/02/08 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
Vue-component全局注册实例
2018/09/06 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
python中Genarator函数用法分析
2015/04/08 Python
图文详解WinPE下安装Python
2016/05/17 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
给校长的一封建议书
2014/03/12 职场文书
廉洁教育学习材料
2014/05/19 职场文书
假释思想汇报范文
2014/10/11 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
人才市场接收函
2015/01/30 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书