普通网友 2025-12-09 17:22 采纳率: 0%
浏览 1

asp.net windows服务检测进程攻击,过滤掉该IP地址

SqlServer服务被停掉,目前想用一个windows服务检测该类型攻击,并过滤掉此类IP。来一段代码,目前没有头绪.

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-12-09 17:30
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    你可以使用C#编写一个Windows服务来检测SQL Server服务是否被停掉,并记录攻击IP地址。下面是一个简单的示例:

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.ServiceProcess;
    using System.Threading;
    
    namespace SqlServerMonitor
    {
        public class SqlServerMonitorService : ServiceBase
        {
            private readonly TcpClient _tcpClient;
            private readonly string _sqlServerServiceName = "MSSQLSERVER";
    
            public SqlServerMonitorService()
            {
                ServiceName = "SqlServerMonitor";
                _tcpClient = new TcpClient();
            }
    
            protected override void OnStart(string[] args)
            {
                base.OnStart(args);
                Thread thread = new Thread(Run);
                thread.Start();
            }
    
            private void Run()
            {
                while (true)
                {
                    // 检测SQL Server服务是否运行
                    if (!IsServiceRunning(_sqlServerServiceName))
                    {
                        // 如果服务未运行,记录攻击IP地址
                        RecordAttackIp();
                    }
    
                    // 检测TCP/IP连接
                    foreach (var ip in GetAttackIps())
                    {
                        // 如果IP地址在攻击列表中,拒绝连接
                        RejectConnection(ip);
                    }
    
                    Thread.Sleep(1000); // 每秒检查一次
                }
            }
    
            private bool IsServiceRunning(string serviceName)
            {
                var services = new ServiceControllerCollection();
                foreach (var service in services)
                {
                    if (service.ServiceName == serviceName && service.Status == ServiceControllerStatus.Running)
                    {
                        return true;
                    }
                }
                return false;
            }
    
            private void RecordAttackIp()
            {
                // 记录攻击IP地址到日志或数据库
                // ...
            }
    
            private string[] GetAttackIps()
            {
                // 从数据库或日志中获取攻击IP地址列表
                // ...
            }
    
            private void RejectConnection(string ip)
            {
                // 拒绝来自攻击IP地址的连接
                var tcpListener = new TcpListener(IPAddress.Any, 1433); // SQL Server端口
                tcpListener.Start();
                var client = tcpListener.AcceptTcpClient();
                client.Close();
            }
        }
    }
    

    注意

    • 这个示例代码仅供参考,需要根据实际情况进行修改和完善。
    • 需要在Windows服务中注册并安装该服务。
    • 需要在数据库或日志中记录攻击IP地址和拒绝连接的日志。
    • 需要根据实际情况调整拒绝连接的策略。
    评论

报告相同问题?

问题事件

  • 创建了问题 12月9日