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获取服务器信息的最简单实现方法
Mar 05 Python
python一键升级所有pip package的方法
Jan 16 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
Python装饰器原理与简单用法实例分析
Apr 29 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
Aug 17 Python
Pycharm连接远程服务器过程图解
Apr 30 Python
解决tensorflow 释放图,删除变量问题
Jun 23 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
Python+OpenCV图像处理——实现轮廓发现
Oct 23 Python
python利用appium实现手机APP自动化的示例
Jan 26 Python
如何用python清洗文件中的数据
Jun 18 Python
对象析构函数__del__在Python中何时使用
Mar 22 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
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
JavaScript 无符号右移运算符
2009/04/17 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
如何用JavaScript定义一个类
2014/09/12 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
python 图片验证码代码分享
2012/07/04 Python
跟老齐学Python之集合的关系
2014/09/24 Python
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
python设置环境变量的作用整理
2020/02/17 Python
python3处理word文档实例分析
2020/12/01 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
介绍一下Java中标识符的命名规则
2014/02/03 面试题
四种会话跟踪技术
2015/05/20 面试题
法人代表授权委托书
2014/04/08 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
员工加薪申请报告
2015/05/15 职场文书
2015军训通讯稿大全
2015/07/18 职场文书