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用GET方法上传文件
Mar 10 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
Mar 21 Python
Python制作Windows系统服务
Mar 25 Python
Python读取sqlite数据库文件的方法分析
Aug 07 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
Python实现DDos攻击实例详解
Feb 02 Python
100行Python代码实现每天不同时间段定时给女友发消息
Sep 27 Python
python实现图片插入文字
Nov 26 Python
python爬虫调度器用法及实例代码
Nov 30 Python
java关于string最常出现的面试题整理
Jan 18 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 Python
Python中re模块的元字符使用小结
Apr 07 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
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
Php获取金书网的书名的实现代码
2010/06/11 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
测试php函数的方法
2013/11/13 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
python中的列表推导浅析
2014/04/26 Python
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python实现的RSS阅读器实例
2015/07/25 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
Python常见的pandas用法demo示例
2019/03/16 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
HTML5进度条特效
2014/12/18 HTML / CSS
美国滑板店:Tactics
2020/11/08 全球购物
Python的两道面试题
2013/06/29 面试题
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
2014年节能工作总结
2014/12/18 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
公司开业主持词
2015/07/02 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
电频谱管理的原则是什么
2022/02/18 无线电