我想实现类似于 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 协议。