python实现探测socket和web服务示例


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 相关文章推荐
利用Python绘制MySQL数据图实现数据可视化
Mar 30 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
Python实现命令行通讯录实例教程
Aug 18 Python
python下如何查询CS反恐精英的服务器信息
Jan 17 Python
Python中的上下文管理器和with语句的使用
Apr 17 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
利用python实现周期财务统计可视化
Aug 25 Python
python+opencv3生成一个自定义纯色图教程
Feb 19 Python
opencv+python实现均值滤波
Feb 19 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
通过代码实例解析Pytest运行流程
Aug 20 Python
python 模拟登陆github的示例
Dec 04 Python
python实现目录树生成示例
Mar 28 #Python
python改变日志(logging)存放位置的示例
Mar 27 #Python
使用python删除nginx缓存文件示例(python文件操作)
Mar 26 #Python
python实现ip查询示例
Mar 26 #Python
python fabric实现远程操作和部署示例
Mar 25 #Python
python基础教程之数字处理(math)模块详解
Mar 25 #Python
python操作摄像头截图实现远程监控的例子
Mar 25 #Python
You might like
php auth_http类库进行身份效验
2009/03/19 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
隐性调用php程序的方法
2015/06/13 PHP
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
javascript实现的HashMap类代码
2014/06/27 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
mock.js模拟数据实现前后端分离
2019/07/24 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
python远程登录代码
2008/04/29 Python
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
Python迭代和迭代器详解
2016/11/10 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
Python 多线程的实例详解
2017/09/07 Python
flask开启多线程的具体方法
2020/08/02 Python
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
转让协议书范本
2014/04/15 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书