我需要找出运行 C# 应用程序的计算机的外部IP。
在应用程序中,我有一个到服务器的连接(通过 .NET 远程处理)。有没有好办法在服务器端获取客户端的地址?
(我已经编辑了这个问题,以便更清楚一点。我向所有尽力回答这个问题的好心人道歉,当时我可能有点太含糊了)
解决方案:
我找到了一种对我很有效的方法。通过在我可以访问 CommonTransportKeys.IPAddress 的地方实现自定义 IServerChannelSinkProvider 和 IServerChannelSink,很容易在 CallContext 上添加客户端 IP。
public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack,
IMessage requestmessage, ITransportHeaders requestHeaders,
System.IO.Stream requestStream, out IMessage responseMessage,
out ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
{
try
{
// Get the IP address and add it to the call context.
IPAddress ipAddr = (IPAddress)requestHeaders[CommonTransportKeys.IPAddress];
CallContext.SetData("ClientIP", ipAddr);
}
catch (Exception)
{
}
sinkStack.Push(this, null);
ServerProcessing srvProc = _NextSink.ProcessMessage(sinkStack, requestmessage, requestHeaders,
requestStream, out responseMessage, out responseHeaders, out responseStream);
return srvProc;
}
然后稍后(当我收到来自客户端的请求时)只需像这样从 CallContext 获取 IP。
public string GetClientIP()
{
// Get the client IP from the call context.
object data = CallContext.GetData("ClientIP");
// If the data is null or not a string, then return an empty string.
if (data == null || !(data is IPAddress))
return string.Empty;
// Return the data as a string.
return ((IPAddress)data).ToString();
}
我现在可以将 IP 发送回客户端。