zoukankan      html  css  js  c++  java
  • 扫描网站服务器真实IP的小脚本

     1 #!/usr/bin/env python
     2 # -*- coding: gbk -*-
     3 # -*- coding: utf_8 -*-
     4 # Date: 2015年9月11日
     5 # Author:蔚蓝行
     6 # 博客 http://www.cnblogs.com/duanv/
     7 
     8 import requests
     9 import threading
    10 import Levenshtein
    11 import re
    12 
    13 def scan(original_r,cip,ip_begin,original_match,header):
    14     ip=cip+str(ip_begin)
    15     try:
    16         r=requests.get('http://'+ip,headers=header,timeout=1)
    17     except Exception:
    18         pass
    19     else:
    20         if(r.status_code==original_r.status_code):
    21             if r.content==original_r.content:
    22                 print '---everything is match!---
    '+ip+'
    --------------------------
    
    
    ',
    23             else:
    24                 if Levenshtein.ratio(r.text,original_r.text)>0.8: 
    25                     match=re.search(r"<title>(.*?)</title>",r.content)
    26                     try:
    27                         if match==original_match or match.group()==original_match.group():
    28                             print '--matches>0.8-same title--
    '+ip+'
    --------------------------
    
    
    ',
    29                         else:
    30                             print '--matches>0.8-diff title--
    '+ip+'
    --------------------------
    
    
    ',
    31                     except Exception:
    32                         if match==None:
    33                             #扫描网页无标题
    34                             print '-matches>0.8-none title-s-
    '+ip+'
    --------------------------
    
    
    ',
    35                         else:
    36                             #原始网页无标题
    37                             print '-matches>0.8-none title-o-
    '+ip+'
    --------------------------
    
    
    ',
    38 
    39 def loop(original_r,cip,original_match,header):
    40     global ip_begin,ip_end,mutex
    41     while 1:
    42         mutex.acquire()
    43         if ip_begin > ip_end:
    44             mutex.release()
    45             break
    46         ip=ip_begin
    47         ip_begin += 1
    48         mutex.release()
    49         scan(original_r,cip,ip,original_match,header)
    50 
    51 def start():
    52     global ip_begin,ip_end,mutex
    53 
    54     ip_begin=1
    55     ip_end=254
    56     mutex=threading.Lock()
    57 
    58     cip='180.97.33.'
    59     address='www.baidu.com'
    60     
    61     #cip='220.181.136.'
    62     #address='www.219.me'
    63     
    64     header={"host":address,"Accept-Encoding":"identity","User-Agent":""}
    65     r=requests.get('http://'+address,headers=header)
    66     
    67     original_match=re.search(r"<title>(.*?)</title>",r.content)
    68     
    69     threads=[]
    70     for i in range(254):
    71         threads.append(threading.Thread(target=loop,args=(r,cip,original_match,header)))
    72     for t in threads:
    73         t.start()
    74 
    75 if __name__ == '__main__':
    76     start()

     1,由于是多线程,输出时如果用print xxx会出现因线程抢占而造成的输出乱序,改用print xxx+‘ ’,可以不用线程锁并解决这个问题

     2,扫描网段时请求头加上host:domain_name,可以解决单一IP对应多域名的问题

     3,发送请求时将UA头置空,可以防止某些网站服务器返回内容过大和不完全相同的问题,提高效率。比如请求百度,有UA头情况下返回的页面内容相当大,而且不同IP返回内容有细微差别,脚本就会进行相似度比较,耗时巨大,如果置空UA头,请求响应内容就比较小,而且不同IP返回内容相同

  • 相关阅读:
    前后端分离项目采用Prerender的SEO优化流程
    spring多数据源分布式事务的分析与解决方案
    Windows上MyEclipse2017 CI7 安装、破解以及配置
    WINDOWS上JDK安装与环境变量设置
    Abp Vnext Vue3 的版本实现
    你好,年轻人
    数据结构·堆
    数据结构·优先队列
    算法笔记·并查集
    JAVA问题解决——Jar包中资源调用
  • 原文地址:https://www.cnblogs.com/duanv/p/4800951.html
Copyright © 2011-2022 走看看