实现 80 HTTP 端口侦听器

本文关键字:侦听器 HTTP 实现 | 更新日期: 2023-09-27 18:34:32

我想实现类似于Fiddler的功能。

我尝试了2解决方案:

HttpListener

HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://*:80/");
listener.Start();

执行Start()时,出现错误:

System.Net.HttpListenerException "进程无法访问该文件,因为它正由另一个进程使用">

这意味着还有其他一些应用程序在端口 80 上侦听,可能是 IIS 或其他什么。

插座

IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 80);
// Create a TCP/IP socket.
Socket listener = new Socket(AddressFamily.InterNetwork,
    SocketType.Stream, ProtocolType.Tcp);
 // Bind the socket to the local endpoint and listen for incoming connections.
 try
 {
     listener.Bind(localEndPoint);
// .....

listener.Bind()被执行时,我得到:

System.Net.Sockets.SocketException (0x80004005(:通常只允许每个套接字地址(协议/网络地址/端口(使用一次

这意味着同样的事情,已经有另一个应用程序在端口 80 上侦听。

那么 Fiddler 如何在没有这些问题的情况下监听端口 80?我更喜欢使用像 HttpListener 这样的类,因为它是更高级别的,而不是像套接字这样我必须实现 HTTP 协议的较低级别的类。

实现 80 HTTP 端口侦听器

那么 Fiddler 如何在没有这些问题的情况下监听端口 80?

Fiddler 不接受端口 80 上的传入连接 - 它充当传出 HTTP 连接的代理。其他一些应用程序正在使用计算机上的端口 80,因此它被阻止使用,因为给定端口上只能有一个侦听器(在本例中为您在注释中提到的 IIS(。

这意味着其他内容正在侦听端口 80。 您必须先退出该应用程序,然后才能正常工作。