欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-06 09:51:31
...

问题

紧急问题,部署在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脚本我确认过了没有问题,难道问题出在一般处理程序上?

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

打开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
  • ....

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

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

上图中的返回信息有段文字很醒目,“无法为数据库'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

上述命令做的工作是

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