操作系统:linux
软件环境:Python 2.7.3
用法:
复制代码 代码如下:
$ ./MonSocket.py
# This is check the URI or Socket of the script #
Usage:
./MonSocket.py -d URL; This is Http protocol
./MonSocket.py -s socket IP or domain; This is Socket protocol
./MonSocket.py -p port; This is Socket port
./MonSocket.py -n ; Total number of requests
./MonSocket.py -c ; Number of concurrent requests
./MonSocket.py -t ; Timeout time(s),socket default is 1s,http default is 5s
For exampale: ./MonSocket.py -d www.weibo.com/index.php -n 200 -c 10 -t 2
For exampale: ./MonSocket.py -s 10.210.214.249 -p 80 -n 200 -c 50 -t 3
代码:
复制代码 代码如下:
#!/usr/bin/env python
# encoding: utf-8
#
# Write by 飞奔的蜗牛-Bob
import os,sys
import getopt,re
import socket,threading,urllib2
def usage():
print \’# This is check the URI or Socket of the script #\’
print \’Usage:\’
print \” %s -d URL; This is Http protocol\” %sys.argv[0]
print \” %s -s socket IP or domain; This is Socket protocol\” %sys.argv[0]
print \” %s -p port; This is Socket port\” %sys.argv[0]
print \” %s -n ; Total number of requests\” %sys.argv[0]
print \” %s -c ; Number of concurrent requests\” %sys.argv[0]
print \” %s -t ; Timeout time(s),socket default is 1s,http default is 5s\” %sys.argv[0]
print \”For exampale: %s -d www.weibo.com/index.php -n 200 -c 10 -t 2\” %sys.argv[0]
print \”For exampale: %s -s 10.210.214.249 -p 80 -n 200 -c 50 -t 3\” %sys.argv[0]
def Detect_url(url,sign):
if timeout:
time = int(timeout)
else:
time = 5
urllib2.socket.setdefaulttimeout(time)
request = urllib2.Request(\’http://%s\’ %(url))
try:
ret = urllib2.urlopen(request)
except urllib2.URLError,e:
if hasattr(e,\”reason\”):
port_timeout.append(\’1\’)
elif hasattr(e,\”code\”):
if re.findall(\’^3\\d*\’,\’%s\’ %e.code):
port_normal.append(\’1\’)
if re.findall(\’^404\\d*\’,\’%s\’ %e.code):
port_404.append(\’1\’)
if re.findall(\’^403\\d*\’,\’%s\’ %e.code):
port_403.append(\’1\’)
if re.findall(\’^500\\d*\’,\’%s\’ %e.code):
port_500.append(\’1\’)
if re.findall(\’^502\\d*\’,\’%s\’ %e.code):
port_502.append(\’1\’)
if re.findall(\’^503\\d*\’,\’%s\’ %e.code):
port_503.append(\’1\’)
else:
port_other.append(\’1\’)
else:
port_normal.append(\’1\’)
def Detect_socket(server,port):
sign = 0
if timeout:
time = int(timeout)
else:
time = 1
socket.setdefaulttimeout(time)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
ret = s.connect((server, int(port)))
except socket.error, e:
if re.findall(\’^timed\\ out*\’,\’%s\’ %e):
socket_timeout.append(\’1\’)
sign = 1
else:
print \’%s\’ %e
sys.exit(2)
else:
socket_normal.append(\’1\’)
sign = 1
if sign == 0:
s.close()
def print_out():
if url_mod:
print \’URL:\’
print \’timeout:[%s]\’ %len(port_timeout)
print \’normal:[%s]\’ %len(port_normal)
print \’\\033[;31mError_403:[%s]\\tError_404:[%s]\\033[0m\’ %(len(port_403),len(port_404))
print \’\\033[;31mError_500:[%s]\\tError_502:[%s]\\tError_503:[%s]\\033[0m\’ %(len(port_500),len(port_502),len(port_503))
print \’\\033[;31mError_other:[%s]\\033[0m\’ %len(port_other)
if sock_mod:
print \’Socket:\’
print \’timeout:[%s]\’ %len(socket_timeout)
print \’normal:[%s]\’ %len(socket_normal)
def main():
if sock_mod:
dest_arg1 = sock_mod
dest_arg2 = dport
dest_function = Detect_socket
elif url_mod:
dest_arg1 = url_mod
dest_arg2 = \’\’
dest_function = Detect_url
else:
sys.exit()
total = int(dcount)
concurrent = int(dconcurrent)
n = 0
sign = 0
lastnu = total%concurrent
while 1:
threads = []
if n + concurrent > total:
nloops = range(n,total)
sign = 1
else:
nloops = range(n,n+concurrent)
for i in nloops:
t = threading.Thread(target=dest_function,args=(dest_arg1,dest_arg2))
threads.append(t)
if sign == 1:
th_nu = lastnu
else:
th_nu = concurrent
for i in range(th_nu):
threads[i].start()
for i in range(th_nu):
threads[i].join()
n = n + concurrent
if sign == 1:
break
print_out()
if __name__==\’__main__\’:
try:
opts,args=getopt.getopt(sys.argv[1:],\”hd:s:p:n:c:t:\”)
except getopt.GetoptError:
usage()
sys.exit(2)
port_timeout = []
port_normal = []
port_403= []
port_404 = []
port_500 = []
port_502 = []
port_503 = []
port_other = []
socket_normal = []
socket_timeout = []
dcount = 0
url_mod = \’\’
sock_mod = \’\’
dport = \’\’
dconcurrent = 0
timeout = 0
if opts:
for opt,arg in opts:
if opt == \’-h\’:
usage()
sys.exit()
if opt == \’-d\’:
url_mod = arg
if opt == \’-s\’:
sock_mod = arg
if opt == \’-p\’:
dport = arg
if opt == \’-n\’:
dcount = arg
if opt == \’-c\’:
dconcurrent = arg
if opt == \’-t\’:
timeout = arg
if url_mod and dcount and dconcurrent:
main()
elif sock_mod and dport and dcount and dconcurrent:
main()
else:
usage()
else:
usage()
sys.exit()
下一篇:python实现目录树生成示例