zoukankan      html  css  js  c++  java
  • Ladon插件编写之内网Web扫描C#源码

    PortScan

    获取网页标题、服务器Banner,例子仅探测80端口
    大家可自行修改添加其它端口识别定制Web扫描功能
    如识别出特定中间件或WEB后再检测是否存在漏洞等
    编译后的netscan.dll可改成任意名称Ladon均可加载

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Text.RegularExpressions;
    
    namespace LadonDLL
    {
        public class scan
        {
            public static string run(string ip)
            {
                if (string.IsNullOrEmpty(ip))
                    return "";
                else
                {
    
                    //192.11.22.10    Microsoft-IIS/10.0      IIS Windows
                    //192.11.22.1     H3C-Miniware-Webs       ER3200G2系统管理
                    return ip + "	" + getURLbanner(ip) + "	" + GetTitle(getHtml("http://" + ip,2));
                
                }
    
            }
    
            private static string getURLbanner(string url)
            {
                ////HttpWebResponse res;
                if (!url.ToLower().Contains("https://") && !url.ToLower().Contains("http://"))
                    url = "http://" + url;
    
                try
                {
                    var req = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
                    req.Method = "HEAD";
                    req.Timeout = 1000;
                    var res = (HttpWebResponse)req.GetResponse();
    
                    if (res.StatusCode == HttpStatusCode.OK || res.StatusCode == HttpStatusCode.Forbidden || res.StatusCode == HttpStatusCode.Redirect || res.StatusCode == HttpStatusCode.MovedPermanently)
                    {
                        return res.Server;
                    }
    
                    //res.Close();
    
                    return res.Server;
                }
                catch (WebException ex)
                {
                    return "";
                }
            }
    
            private static string GetTitle(string html)
            {
                if (html.Contains("<hTmlKErRor>"))
                {
                    //return html.Replace("<hTmlKErRor>", "");
                    return "";
                }
    
                html = html.Replace("<br>", "");
                html = html.Replace("<BR>", "");
                html = html.Replace("
    ", "");
                html = html.Replace("&nbsp;", " ");
                html = html.Replace("
    ", "").Trim();
    
                String regex = @"<title.+</title>";
    
                String title = Regex.Match(html, regex).ToString();
                title = Regex.Replace(title, @"[""]+", "");
    
                title = title.TrimStart('<');
    
                string regex2 = @">.+</title>";
    
                string title2 = Regex.Match(title, regex2).ToString();
                title2 = title2.TrimStart('>').Replace("</title>", "").Trim();
    
                if (title2.Length > 50)
                    return title2.Substring(0, 50);
    
                return title2;
    
            }
    
            private static string getHtml(string url, int codingType)
            {
    
                try
                {
                    if (!url.ToLower().Contains("https://") && !url.ToLower().Contains("http://"))
                        url = "http://" + url;
                    WebClient myWebClient = new WebClient();
                    if (url.ToLower().Contains("https://"))
                    {
                        System.Net.ServicePointManager.ServerCertificateValidationCallback +=
        delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                 System.Security.Cryptography.X509Certificates.X509Chain chain,
                 System.Net.Security.SslPolicyErrors sslPolicyErrors)
        {
            return true; // **** Always accept
        };
    
                    }
    
                    byte[] myDataBuffer = myWebClient.DownloadData(url);
                    //return Encoding.Default.GetString(myDataBuffer);
                    string strWebData = System.Text.Encoding.Default.GetString(myDataBuffer);
    
                    //自动识别编码  不一定有<meta  比如 百度开放平台 content="text/html; charset=gbk">
                    //Match charSetMatch = Regex.Match(strWebData, "<meta([^>]*)charset=(")?(.*)?"", RegexOptions.IgnoreCase | RegexOptions.Multiline);
                    Match charSetMatch = Regex.Match(strWebData, "(.*)charset=(")?(.*)?"", RegexOptions.IgnoreCase | RegexOptions.Multiline);
    
                    string webCharSet = charSetMatch.Groups[3].Value.Trim().ToLower();
    
                    if (webCharSet != "gb2312" && webCharSet != "gbk")
                    {
                        webCharSet = "utf-8";
                    }
    
                    if (System.Text.Encoding.GetEncoding(webCharSet) != System.Text.Encoding.Default)
                    {
                        strWebData = System.Text.Encoding.GetEncoding(webCharSet).GetString(myDataBuffer);
                    }
    
    
    
                    //if (codingType == 1)
                    //    return Encoding.Unicode.GetString(myDataBuffer);
                    //else if (codingType == 2)
                    //    return Encoding.Default.GetString(myDataBuffer);//GBK 936
                    //else if (codingType == 3)
                    //    return Encoding.UTF8.GetString(myDataBuffer);//65501
    
                    return strWebData;
    
                }
                catch (Exception ex)
                {
                    //Console.WriteLine(url + " " + ex.Message);
                    return "<hTmlKErRor>" + ex.Message;
                }
    
                return "";
            }
    
        }
    }
    
    
    
  • 相关阅读:
    Vue框架之基础知识
    Vue框架之初识
    Django组件之modelformset
    Django之小结
    Django组件之modelform
    Django之form表单详解
    jquery基础知识2
    jQuery基础知识1
    js基础知识4
    js基础知识3
  • 原文地址:https://www.cnblogs.com/k8gege/p/12307465.html
Copyright © 2011-2022 走看看