如何监视所有传入的HTTP请求?


75

我需要从传入的http监视我的应用程序 POSTGET机器外部(有时是机器内部)的请求。

这可能吗?

一直在使用提琴手,但这只会使传出的邮件没有传入(来自机器外部),或者我配置不正确吗?

这是为我的Web应用程序准备POST从外部服务器接收的。

Answers:


66

您需要做的是将Fiddler配置为充当“反向代理”

在Fiddler的网站上有2种不同方法的说明。这是步骤的副本:


步骤#0

在以下两个选项之一起作用之前,必须使其他计算机连接到Fiddler。为此,请单击工具>提琴手选项>连接,然后选中“允许远程计算机进行连接”复选框。然后关闭Fiddler。

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

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

  1. 开始注册
  2. 在HKCU \ SOFTWARE \ Microsoft \ Fiddler2中创建一个名为ReverseProxyForPort的新DWORD。
  3. 将DWORD设置为要将入站流量重新路由到的本地端口(对于标准HTTP服务器,通常为端口80)
  4. 重新启动提琴手
  5. 导航到浏览器 http://127.0.0.1:8888

选项2:编写FiddlerScript规则

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

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

  1. 在默认端口8888上运行的WEBSERVER计算机上启动Fiddler。
  2. 点击工具| 提琴手选项,并确保选中“允许远程客户端连接”复选框。如果需要,请重新启动。
  3. 选择规则| 自定义规则。
  4. 在OnBeforeRequest处理程序内,添加一行新代码:
    if(oSession.host.toLowerCase()==“ webserver:8888”)oSession.host =“ webserver:80”;
  5. 在智能手机上,导航至 http://webserver:8888

来自SmartPhone的请求将出现在Fiddler中。请求从端口8888转发到运行Web服务器的端口80。响应通过Fiddler发送回SmartPhone,后者不知道内容最初来自端口80。


8
为什么这么难?当然,有一个程序可以查看我所有的网络接口,并且仅读取http数据包。似乎无法让Wireshark或网络监视器来执行此操作,....
Exitos 2010年

Wireshark非常强大,而我个人在过去几个月中才刚刚开始学习如何使用它。我会惊讶地发现它也无法做到这一点。这可能只是在正确的界面上设置正确的过滤器的问题。如果可以弄清楚如何使用Wireshark,我将发布另一个答案。
索尔·多尔金

嗨,扫罗,您是否读过我的以下回复。如果在Windows中添加的路由它迫使所有流量出来,然后回。
Exitos

我读了您的答案,这对于使用Wireshark捕获本地主机流量是有意义的。我想我应该指出Fiddler也能够捕获“本地主机”流量...但是有一个陷阱。您必须使用主机名而不是“ localhost”或127.0.0.1回送地址向Web服务器发出请求。
索尔·多尔金

@SaulDolgin如果Web服务在端口11000上运行,我们如何配置Fiddler?就像mywebserver:11000 / mywebservice.asmx
FMFF 2014年

32

我将安装Microsoft Network Monitor,配置该工具,使其仅看到HTTP数据包(过滤端口)并开始捕获数据包。

你可以在这里下载


1
哇,这是一个很棒的工具!我尝试使用Fiddler并设置远程代理,但从未成功。使用网络监视器,我可以看到如何调用Web服务以及请求是什么。
Oleg D.

我遇到了与上述海报相同的问题,但无法使Fiddler正常工作。MS网络监控工具的工作原理就像冠军。
令人鼓舞的

1
这个工具运作良好,但我似乎无法检查有效负载是否有安全的SSL呼叫。我SSLApplicationData: Binary Large Object (304 Bytes)只收到一条消息。有什么办法可以查看此数据?
atconway

1
SSL流量不应轻易解密。那就是使用SSL的意图,以防止窃听者检查流量。无论如何,如果您有方便的服务器SSL私钥,可以使用一种解密工具从MS Network监视器进行SSL解密:blogs.technet.com/b/netmon/archive/2010/03/08/…。Fiddler使用伪造的证书来做到这一点,由我们自己有效地进行中间人攻击。
YudhiWidyatama

1
“ Network Monitor 3.4是存档版本的协议分析器,并且不再在开发中。MicrosoftMessage Analyzer可以替代Network Monitor 3.4。”
styfle

13

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

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

我知道已经有一个建议的答案了,但是我想提供Telerik应该提供的解释和说明,并涵盖一些“陷阱”,所以去了:

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

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

注意:为了使其正常工作,您想要拦截的任何请求都必须发送到端口8888

您可以通过在主机名后面添加:8888来实现,例如,对于MVC路由,例如:

http:// myhostname:8888 /控制器/动作


演练

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

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

在此处输入图片说明

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

  • 关闭提琴手
  • 开始注册
  • 在HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Fiddler2中创建一个名为ReverseProxyForPort的新DWORD。
    • 现在,将DWORD值设置为要将入站流量重新路由到的本地端口(对于标准HTTP服务器,通常为端口80)
  • 为此,右键单击您创建的DWORD,然后选择“修改”。确保将“基本”设置为“十进制”,然后输入“ 80”(或另一个端口)作为“数值数据”:

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

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

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

测试一个请求

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

http:// remoteHostname:8888 /控制器/动作

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

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


在没有REGEDIT的操作系统(Window ahs注册表mac osx和linux不在)中,应该等价吗?
partizanos


9

伙计们发现了监视从我的机器到我的机器的请求之间本地流动的所有流量的理想方法:

  1. 安装Wireshark

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

    为此,请添加带有以下内容的路线:<ip address> <gateway>

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

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


6

Microsoft Message Analyzer是Microsoft Network Monitor 3.4的后继产品

如果您的HTTP传入流量通过58000端口进入您的Web服务器,请在管理员模式下启动Analyzer,然后单击新会话:

使用过滤器:tcp.Port = 58000和HTTP

跟踪方案:“本地网络接口(Win 8和更低版本)”或“本地网络接口(Win 8.1和更高版本)”取决于您的操作系统

解析级别:完整



2

使用TcpView查看端口监听和连接。但是,这不会给您请求。

为了查看请求,您需要反向代理,我不知道任何这样的工具。

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


2

使用Wireshark。

我没有尝试过:http : //wiki.wireshark.org/CaptureSetup/Loopback

如果这样的作品,然后你可以筛选http/ http contains GET/http contains POST流量。

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


1

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

HTTP调试器

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.