【问题标题】:C# Program for Analyzing Http Connection用于分析 Http 连接的 C# 程序
【发布时间】:2011-06-23 11:40:50
【问题描述】:

我有 asp.net 网站。当我在页面加载之前使用 Thread.Sleep 创建测试页面时。有用于登录的表单身份验证。等待一小时后,页面会自动注销。所以我想看看这个注销的原因是什么。我计划使用 C# 代码捕获所有 HttpConnection 通信。我只想看到通讯关闭的原因。我正在使用 Visual Studio 2005 在本地机器上运行该网站。

您能否分享实现此功能的代码?

注意:我知道这可以使用 tcpDump 之类的工具来实现。但目前我正在尝试单独为这个功能开发一个代码——看看连接关闭/注销的原因。

更新:

我有以下代码。但是我如何完成我的任务 - 如何找到所有连接关闭/注销的原因。请帮助我,因为我对套接字编程完全陌生。

 protected void Page_Load(object sender, EventArgs e)
{

    IPHostEntry host;
    string localIPAddress = "?";
    host = Dns.GetHostEntry(Dns.GetHostName());
    foreach (IPAddress ip in host.AddressList)
    {
        if (ip.AddressFamily == AddressFamily.InterNetwork)
        {
            localIPAddress = ip.ToString();
        }
    }

    System.Net.Sockets.Socket mySocket = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Raw, System.Net.Sockets.ProtocolType.IP);
    mySocket.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Parse(localIPAddress), 0));
    mySocket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.IP, System.Net.Sockets.SocketOptionName.HeaderIncluded, 1);

    byte[] inBytes = new byte[] { 1, 0, 0, 0 };
    byte[] outBytes = new byte[] { 0, 0, 0, 0 };
    mySocket.IOControl(System.Net.Sockets.IOControlCode.ReceiveAll, inBytes, outBytes);
}

【问题讨论】:

  • 为什么是问号string localIPAddress = "?";
  • 尝试使用try{}catch{} 包围您的代码。查看是否有任何异常被抛出。
  • 也不例外。我正在寻找可以告诉如何查找所有连接的开始和关闭时间、连接注销时间、连接注销/关闭/过期原因等的代码。请帮助

标签: c# .net asp.net windows sockets


【解决方案1】:

我认为您找错地方了...使用表单身份验证时,由于身份验证 cookie 过期而发生注销。如果您使用 .Net Reflector 查看 System.Web.Security.FormsAuthentication.SignOut() 方法,您会发现它通过为您提供一个过去过期的新 cookie 来注销您。

【讨论】:

  • 有没有办法延长这个默认的SignOut时间并使cookie不过期?
  • 是的,您是否在登录代码中使用了 FormsAuthenticaton.RedirectFromLogon 方法?如果是这样,第二个参数可以让您使 cookie 永不过期。如果您手动设置cookie,那么您可以自己处理到期。
  • 我们没有使用 RedirectFromLoginPage。我们正在使用 FormsAuthentication.SetAuthCookie(SessionManager.UserID.Value.ToString(), false); Response.Redirect(appUrl[1] + "&BackUrl=BackCall");我应该对上述代码进行哪些更改才能等效地工作(唯一的区别是 cookie 过期时间)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多