如何监控所有传入的http请求?

时间:2010-12-13 12:12:17

标签: asp.net http fiddler wireshark

我需要从来自外部,有时来自机器内部的传入http POSTGET请求监控我的应用程序。

这可能吗?

一直在使用fiddler,但这只是传出而不是传入(来自机器外部)或我是否错误地配置了它?

这适用于我的网络应用,旨在从外部服务器接收POST

9 个答案:

答案 0 :(得分:61)

您需要做的是configure Fiddler to work as a "reverse proxy"

在Fiddler的网站上有关于两种不同方法的说明。以下是步骤的副本:


第0步

在以下任一选项生效之前,您必须启用其他计算机才能连接到Fiddler。为此,请点击工具>提琴手选项>连接并勾选“允许远程计算机连接”复选框。然后关闭Fiddler。

选项#1:将Fiddler配置为反向代理

可以配置Fiddler,以便发送到http://127.0.0.1:8888的任何流量自动发送到同一台计算机上的其他端口。要设置此配置:

  1. 启动REGEDIT
  2. 在HKCU \ SOFTWARE \ Microsoft \ Fiddler2中创建一个名为ReverseProxyForPort的新DWORD。
  3. 将DWORD设置为您要将入站流量重新路由到的本地端口(通常是标准HTTP服务器的端口80)
  4. 重启Fiddler
  5. 将浏览器导航至http://127.0.0.1:8888
  6. 选项#2:编写FiddlerScript规则

    或者,您可以编写执行相同操作的规则。

    假设您在名为WEBSERVER的计算机的端口80上运行网站。您在Windows SmartPhone设备上使用Internet Explorer Mobile Edition连接到该网站,您无法为其配置Web代理。您希望捕获来自手机的流量和服务器的响应。

    1. 在WEBSERVER计算机上启动Fiddler,在默认端口8888上运行。
    2. 点击工具| Fiddler选项,并确保选中“允许远程客户端连接”复选框。如果需要,请重启。
    3. 选择规则|自定义规则。
    4. 在OnBeforeRequest处理程序中,添加一行新代码:
      if(oSession.host.toLowerCase()==“webserver:8888”)oSession.host =“webserver:80”;
    5. 在智能手机上,导航至http://webserver:8888
    6. 来自SmartPhone的请求将出现在Fiddler中。请求从端口8888转发到运行Web服务器的端口80。响应通过Fiddler发送回SmartPhone,SmartPhone不知道内容最初来自端口80.

答案 1 :(得分:32)

我会安装Microsoft网络监视器,配置该工具,使其只能看到HTTP数据包(过滤端口)并开始捕获数据包。

您可以下载here

答案 2 :(得分:10)

在Windows上将Fiddler配置为“反向代理”

(对于Mac,请参阅以下Partizano评论中的链接)

我知道已经有一个答案暗示了这一点,但是我想提供Telerik 应该提供的解释和说明,并且还包括一些'陷阱',所以这里是:

将Fiddler配置为“反向代理”是什么意思?

  • 默认情况下,Fiddler仅监控运行Fiddler的计算机上的传出请求
  • 要监控传入的请求,您需要将Fiddler配置为“反向代理”
  • 这意味着您需要将Fiddler设置为“代理”,以拦截发送到您要侦听传入请求的计算机上的特定端口(8888)的传入http请求。然后,Fiddler会将这些请求转发到同一台计算机上的Web服务器,方法是将它们发送到通常的http请求端口(通常是端口80或443用于https)。它实际上非常快速和容易!
  • 使用Fiddler进行设置的标准方法是让Fiddler拦截发送到Port'8888'的所有请求(因为这通常不会被其他任何东西使用,尽管你可以轻松地使用另一个端口)< / LI>
  • 然后,您需要使用注册表编辑器让Fiddler转发Fiddler在端口8888上收到的任何http请求,以便将它们转发到标准http端口(端口80,端口443以获取https请求,或其他您的Web服务器设置为侦听的自定义端口)

注意:为此,要拦截的任何请求必须发送到端口8888

您可以通过将:8888附加到主机名来执行此操作,例如对于MVC路由,例如:

的http:// MYHOSTNAME :8888 / 控制器 / 动作

操作实例

确保Fiddler可以接受端口8888上的远程http请求:

以管理员身份运行Fiddler 转到工具&gt;提琴手选项&gt;连接,并确保选中“允许远程计算机连接”,并且“Fiddler侦听端口”设置为8888:

enter image description here

配置Fiddler将端口8888上收到的请求转发到端口80

  • 关闭Fiddler
  • 启动REGEDIT
  • 在HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Fiddler2中创建一个名为ReverseProxyForPort的新DWORD。
    • 现在将DWORD值设置为您要将入站流量重新路由到的本地端口(通常是标准HTTP服务器的端口80)
  • 要执行此操作,请右键单击您创建的DWORD,然后选择“修改”。确保'Base'设置为'Decimal'并输入'80'(或其他端口)作为'Value data':

确保在防火墙上打开端口8888

  • 您必须确保端口8888对外部请求开放(如果您的服务器受防火墙保护,则默认情况下不会这样)

就是这样!现在应该将Fiddler设置为反向代理,以拦截来自端口8888的所有请求(以便您可以在Fiddler中查看它们),然后它将它们转发到您的Web服务器以实际处理。

测试请求

  • 重启Fiddler
  • 要测试Fiddler是否正在拦截外部请求,请在您将Fiddler设置为反向代理的同一台计算机上打开浏览器。将浏览器导航至http://127.0.0.1:8888
  • 此测试向端口8888
  • 发出基本请求
  • 你应该看到Fiddler截获的请求
  • 现在您可以测试来自其他计算机的请求,例如通过另一台计算机上的浏览器发出请求(其中'remoteHostname'是您将Fiddler设置为反向代理的计算机上的主机名) :

的http:// 的remotehostname :8888 / 控制器 / 动作

  • 或者,您可以使用类似于上面的URL,在远程计算机上使用另一个Fiddler实例来撰写请求。这将允许您发出GET或POST请求。

重要提示:完成查看请求后,请返回工具&gt;提琴手选项&gt;连接并删除“允许远程计算机连接”选项,否则第三方将能够通过您的服务器退回流量

答案 3 :(得分:9)

Guys找到了一种完美的方法来监控从我的机器到我的机器的请求之间本地流动的所有流量:

  1. 安装Wireshark
  2. 当您需要捕获从本地主机流向本地主机的流量时,您将很难使用wireshark,因为这只会监控网卡上的传入流量。这样做的方法是向Windows添加一条路由,强制所有流量通过网关,并在网络接口上捕获。

    要执行此操作,请使用 <ip address> <gateway> 添加路线:

    cmd> route add 192.168.20.30 192.168.20.1
    
  3. 然后在wireshark上运行捕获(确保选择包含字节的接口)然后过滤。

  4. 新添加的路线将以黑色显示。 (因为它们是本地地址)

答案 4 :(得分:5)

Microsoft Message Analyzer 是Microsoft Network Monitor 3.4的继承者

如果您的http传入流量将以58000端口进入您的Web服务器,请以管理员模式启动Analyzer并单击新会话:

使用filter:tcp.Port = 58000和HTTP

跟踪场景:&#34;本地网络接口(Win 8及更早版本)&#34;或&#34;本地网络接口(Win 8.1及更高版本)&#34;取决于您的操作系统

解析级别:完整

答案 5 :(得分:3)

您可以考虑将Fiddler作为反向代理运行,您应该能够让客户端连接到Fiddler的地址,然后将请求从Fiddler转发到您的应用程序。

这需要一些端口操作或客户端配置,具体取决于根据您的要求更容易。

有关如何操作的详细信息,请访问:http://www.fiddler2.com/Fiddler/Help/ReverseProxy.asp

答案 6 :(得分:2)

使用TcpView查看端口侦听和连接。这将为您提供请求。

为了查看请求,您需要撤销我不知道任何此类工具的代理。

使用tracing为您提供部分请求(请求的前1KB)。

答案 7 :(得分:2)

使用Wireshark ..

我没试过这个: http://wiki.wireshark.org/CaptureSetup/Loopback

如果可行,则可以过滤http / http contains GET / http contains POST点流量。

您可能必须运行两个Wireshark实例,一个捕获本地实例,一个捕获远程实例。我不确定。

答案 8 :(得分:0)

您还可以尝试HTTP Debugger,它具有显示传入HTTP请求的内置功能,并且不需要对系统配置进行任何更改。

HTTP Debugger