实习中接触的第二个任务,之前已经写了一个版本,不过上周用的时候感觉好烂,又重新写了一个。
感觉有些程序,还是要跑起来了才知道怎么样,当时就是因为没有测试,以为写的还可以了,结果上周一跑,问题都出来了。诶~
贴下代码~
__author__ = 'glcsnz123'
# -*- coding: utf-8 -*-
import httplib
import os
import socket
import signal
import sys
import thread, threading
import time
def getIPAddressList():
if os.path.isfile("ip.list"):
return [ip for ip in open("ip.list", 'r').read().split('\n') if ip.strip() != '']
return []
def remove_quote(nae):
if nae.startswith('"'):
return nae[1:-1:1]
return nae
def getDomainList():
if os.path.isfile("domain.list"):
res = [domain for domain in open("domain.list", 'r').read().split('\n') if domain.strip() != '']
else:
res = []
return map(remove_quote, res)
HEADERS = {"Host": "cet.99sushe.com", "User-Agent": "Mozilla/5.0 (X11; Linux i686)"};
def getDomainVersion(doName):
if True:
return "null"
conn = httplib.HTTPConnection("127.0.0.1")
conn.request("GET", "/get-upreferer-ver?domain=" + doName)
res = conn.getresponse()
return res.read()
mylock = thread.allocate_lock()
def Logger(*msg):
global mylock
try:
mylock.acquire()
print " ".join(map(str, msg))
finally:
mylock.release()
def ConnectToServer(doName, ipName):
try:
HEADERS["Host"] = doName
conn = httplib.HTTPConnection(ipName)
conn.request("GET", "/upyun-health-check.nofile", headers=HEADERS)
except socket.gaierror, sg:
Logger(sg, doName, " - ", ipName)
return None
except socket.error, se:
Logger(se, doName, " - ", ipName)
return None
except Exception, ex:
Logger(ex, doName, " - ", ipName)
return None
try:
res = conn.getresponse()
except Exception, ex:
Logger(ex, doName, " - ", ipName)
return None
msg = res.read()
if msg != 'ok':
if res.status not in range(200, 300):
Logger("[WARNING]", res.status, res.reason, doName, " - ", ipName)
else:
Logger("[WARNING]", repr(msg), doName, " - ", ipName)
return None
res = res.getheader("X-Msg-Ver")
conn.close()
if res is None:
Logger("[WARNING]X-Msg-Ver is Empty!", doName, " - ", ipName)
return None
return res
def Exit(a, b):
sys.exit(-1)
def main():
iplist = getIPAddressList()
dlist = getDomainList()
for ditem in dlist:
dver = getDomainVersion(ditem)
for ipitem in iplist:
ver = ConnectToServer(ditem, ipitem.strip())
if ver == dver:
Logger(ditem, " - ", ipitem, "is oked!")
elif ver is not None:
Logger("[WARNING]" + ver, ditem, " - ", ipitem)
import Queue
joblist = Queue.Queue(1000)
#multi-thread
def Worker():
global joblist
while True:
doName, ipName = joblist.get(block=True, timeout=30)
ver = ConnectToServer(doName, ipName)
cor_ver = getDomainVersion(doName)
if cor_ver == ver:
Logger(doName, " - ", ipName, "is oked!")
elif ver is not None:
Logger("[WARNING]" + ver, doName, " - ", ipName)
def Multi_Thread(thread_num):
global joblist
dlist = getDomainList()
iplist = getIPAddressList()
for i in range(thread_num):
thread.start_new_thread(Worker, ())
for doName in dlist:
for ipName in iplist:
joblist.put((doName, ipName.strip()), block=True)
while True:
if joblist.empty():
time.sleep(30)
break
time.sleep(30)
if __name__ == '__main__':
signal.signal(signal.SIGINT, Exit)#信号绑定
Multi_Thread(100)