fiddler抓包对分析问题和排查故障来说真的很有用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CGS_______/article/details/82588529

问题

紧急问题,部署在IIS上的网站出现故障,用户输入用户名密码点击登陆无反应(所有用户均无法正常使用)

思路

之前听说总有人去机房偷偷看服务器,第一反应就是web.config可能出现问题(有可能被人改了),查完发现配置无误,而且udl测试数据库连接也正常。奇怪,莫非被人动了手脚?

既然config配置没有问题,那就从登录页面着手找,下面是登录按钮onclick事件一部分:

//获取传递前台的参数,UName,Pwd,Code
                var postData;
                if ($("#txtPassword").val().length == 32) {
                    postData = {
                        UName: $("#txtUserName").val(),
                        Pwd: $("#txtPassword").val(),
                        Vdate: $("#ValidateName").val(),
                        Pdcs: pdid,
                        Ypxl: ss
                    };
                }
                else {
                    postData = {
                        UName: $("#txtUserName").val(),
                        Pwd: hex_md5($("#txtPassword").val()).toUpperCase(),
                        Vdate: $("#ValidateName").val(),
                        Pdcs: pdid,
                        Ypxl: ss
                    };
                }

                //异步实现登录功能
                $.post("Login.ashx", postData, function (data) {
                    if (data == "OK") {
                        SetPwdAndChk();
						
                        window.location.href = "Index.aspx";
                    } else if (data == "Update") {
                        window.location.href = "LoginUpdate.aspx";
						
                    }
                    else if (data == "") {
                        window.location.href = "Login.aspx";
                    }
                    else {
                        pdid = parseInt(pdid) + 1;
                        setcookievalue("cs", pdid);
                        alert(data);
                        window.location.href = "Login.aspx";
                    }
                });

看上去没有任何问题,在post提交回调事件加入alert("1")调试一下,发现使用正确的用户名密码登录没有弹窗,关于登录的js脚本我确认过了没有问题,难道问题出在一般处理程序上?

打开Login.ashx发现CodeBehind、Class也正常,没有被更改,那会是哪里的问题?既然正确的用户名密码alert不执行,那么使用错误的用户名密码登录会怎么样呢?果然,错误的用户名密码走了回调函数。看到这里你有没有感觉很奇怪?

现在我们将情报整理一下

  • 数据库服务及测试连接正常、
  • web.config配置文件配置没有问题、
  • 关于登录的js脚本没有问题、
  • Login.ashx登录一般处理程序没有问题、
  • 正确的用户名密码登录不执行post回调、
  • 错误的用户名密码登录执行post回调、

这种情况如果是你你会有什么思路去排查?(前提是,你只能远程这台服务器,且服务器没有IDE环境,你又不能打开程序进行代码调试)

那么既然不能调试,看代码又看不出什么端倪来,来试试平常“干坏事儿”用的抓包吧!

关于Fiddler抓localhost,目前知道的有以下几种方法:

  • 使用http://localhost.fiddler 代替 http://localhost
  • 使用http://localhost. 代替 http://localhost
  • 使用http://127.0.0.1. 代替 http://127.0.0.1
  • ....

下面是抓取登录按钮事件的数据包:

上图中的返回信息有段文字很醒目,“无法为数据库'HBNetMonitorDB'中的对象'abo.LogRecord'.'PK_LogRecord'分配空间,因为'PRIMARY'文件组已满。请删除不需要的文件、删除文件组中的对象...”

从提示信息中可以看出,原来是表空间满了,so,truncate table tablename,再次登陆,问题解决。

后续

第二天再次出现用户无法登录,检测数据上传失败的情况。。抓包后发现还是提示“无法为数据库'HBNetMonitorDB'中的对象'abo.LogRecord'.'PK_LogRecord'分配空间,因为'PRIMARY'文件组已满。请删除不需要的文件、删除文件组中的对象...”。

解决办法


    USE[master]

    GO

    ALTER DATABASE 要清理的数据库名称 SET RECOVERY SIMPLE WITH NO_WAIT

    GO

    ALTER DATABASE 要清理的数据库名称 SET RECOVERY SIMPLE   --简单模式

    GO

    USE 要清理的数据库名称

    GO

    DBCC SHRINKFILE (N'要清理的数据库名称_log' , 2, TRUNCATEONLY)  --设置压缩后的日志大小为2M,可以自行指定

    GO

    USE[master]

    GO

    ALTER DATABASE 要清理的数据库名称 SET RECOVERY FULL WITH NO_WAIT

    GO

    ALTER DATABASE 要清理的数据库名称 SET RECOVERY FULL  --还原为完全模式

    GO

上述命令做的工作是

  • 将数据库属性恢复模式设置为简单模式
  • 收缩数据库
  • 收缩完毕后还原为完整模式

猜你喜欢

转载自blog.csdn.net/CGS_______/article/details/82588529
今日推荐