Posted in Python onMarch 28, 2014
操作系统: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实现探测socket和web服务示例
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@