python查找国外_利用python探测谷歌搜索可用IP

#!/usr/bin/python

# -*- coding:utf-8 -*-

”’

install modules:

pip install dnspython

”’

import dns.resolver

import struct, socket

import re

import sys

import threading

import Queue

threadLock = threading.Lock()

SHARE_Q = Queue.Queue()

_WORKER_THREAD_NUM = 10

GLOBAL_COUNTER = 0

class MyThread(threading.Thread) :

def __init__(self, func) :

super(MyThread, self).__init__()

self.func = func

def run(self) :

self.func()

def worker() :

global SHARE_Q

global GLOBAL_COUNTER

while not SHARE_Q.empty():

item = SHARE_Q.get()

if check_port(item):

with threadLock:

print(item)

GLOBAL_COUNTER += 1

if GLOBAL_COUNTER >= 100:

sys.exit(0)

def get_txt_record(domain):

answers = dns.resolver.query(domain, ‘TXT’)

for rdata in answers:

return str(rdata)

def get_ip_range_from_txt_record(txt_record):

ip_range = []

re_ret = re.findall(r’ip4:([^ ]+)’, txt_record)

for ip_mask in re_ret:

ip_range.append(ip_mask)

return ip_range

def get_ip_from_cidr(ip_range):

ips = []

for ip_mask in ip_range:

(ip, cidr) = ip_mask.split(‘/’)

cidr = int(cidr)

host_bits = 32 – cidr

i = struct.unpack(‘>I’, socket.inet_aton(ip))[0] # note the endianness

start = (i >> host_bits) << host_bits # clear the host bits

end = i | ((1 << host_bits) – 1)

for i in range(start, end):

ips.append(socket.inet_ntoa(struct.pack(‘>I’,i)))

return ips

def check_port(address, port=443):

s=socket.socket()

s.settimeout(1)

try:

s.connect((address,port))

return True

except socket.error,e:

return False

def main():

txt_record = get_txt_record(“_netblocks.google.com”)

ip_range = get_ip_range_from_txt_record(txt_record)

ips = get_ip_from_cidr(ip_range)

global SHARE_Q

threads = []

for task in ips :

SHARE_Q.put(task)

for i in xrange(_WORKER_THREAD_NUM) :

thread = MyThread(worker)

thread.start()

threads.append(thread)

for thread in threads :

thread.join()

if __name__ == ‘__main__’:

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值