python实现探测socket和web服务示例
admin
2023-07-31 02:07:17
0

操作系统: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()

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...