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 生成不重复的随机数的代码
May 15 Python
在Django中创建第一个静态视图
Jul 15 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
深入理解Python 关于supper 的 用法和原理
Feb 28 Python
详解Python安装scrapy的正确姿势
Jun 26 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
python用match()函数爬数据方法详解
Jul 23 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
python对象转字典的两种实现方式示例
Nov 07 Python
Flask之pipenv虚拟环境的实现
Nov 26 Python
python装饰器的特性原理详解
Dec 25 Python
python中def是做什么的
Jun 10 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
上海无线电三厂简史修改版
2021/03/01 无线电
用PHP调用数据库的存贮过程!
2006/10/09 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
Javascript - HTML的request类
2006/07/15 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
python编程之requests在网络请求中添加cookies参数方法详解
2017/10/25 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
python3字符串输出常见面试题总结
2020/12/01 Python
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
编辑个人求职信范文
2013/09/21 职场文书
护理专业本科生自荐信
2013/10/01 职场文书
文科教师毕业的自我评价
2014/01/16 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
知识竞赛活动方案
2014/02/18 职场文书
科研课题实施方案
2014/03/18 职场文书
音乐教师求职信范文
2015/03/20 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL
pytorch 使用半精度模型部署的操作
2021/05/24 Python
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript