我使用System.Net.HttpListener和C#(Windows 7 +,。Net 4.0)编写了代理服务器。我想确定哪个进程正在发送请求(发件人保证在同一台机器上)。
好老@EricLaw有一些几乎可行的东西,http://blogs.msdn.com/b/fiddler/archive/2013/01/09/10138573.aspx但是......只有当我从港口#减去1时才会这样:
HttpListenerContext context = GetContext();
HttpListenerRequest request = context.Request;
int pid = 0;
if (request.IsLocal)
{
int port = context.Request.RemoteEndPoint.Port;
pid = Winsock.MapLocalPortToProcessId(port - 1)
}
return pid;
如果我不减1,则请求来自PID = 4,即系统进程。
减法是我应该做的事吗?或者有不同的方法来确定哪个进程发送了请求?
答案 0 :(得分:2)
我博客上分享的代码运行得很好;它被用在Fiddler中,被数百万人使用。
您应该转储整个端口列表,看看发生了什么;也许从context.Request.RemoteEndPoint.Port
返回的值存在问题。