如何在身份服务器4中获取客户端的远程IP地址(How to get remote IP Address of client in identity server 4)

上下文变量(ResourceOwnerPasswordValidationContext)中是否有一个属性,它允许我访问发送auth初始请求的客户端的IP地址。

Is there a property in the context variable (ResourceOwnerPasswordValidationContext) that lets me access the IP address of the client sending the initial request for an auth.

更新时间:2019-12-08 08:12

最满意答案

没有这样的信息可供您在该上下文中获取。 您唯一的选择是将IHttpContextAccessor注入您的ResourceOwnerPasswordValidator ,然后您可以从HttpContext.Request对象获取请求IP。

There is no information like that for you to grab within that context. Your only Option is to inject IHttpContextAccessor into your ResourceOwnerPasswordValidator and then you can get the request IP from the HttpContext.Request object.

相关问答

:: 1是127.0.0.1的ipv6版本 这只是描述新IPv6版本中localhost的IP地址的众多方法之一,并且通常评论这些新的IPv6命令有自己的新版本并且最终广泛用于IPv4版本的ping,具有ping6用于IPv6地址 ::1 is the ipv6 version of 127.0.0.1 It's Just one of many ways to describe the IP address of localhost in the new IPv6 version, and as

...

我只是使用request.remote_ip这是简单的,它的工作原理。 任何理由你需要另一种方法? 请参阅: 在本地Rails开发环境中获取真实的IP地址,以便您可以使用客户端服务器ip进行其他一些操作。 I would just use the request.remote_ip that's simple and it works. Any reason you need another method? See: Get real IP address in local Rails devel

...

看看Laravel API : Request::ip();

在内部,它使用Symfony Request Object中的getClientIps方法:

public function getClientIps()
{
$clientIps = array();
$ip = $this->server->get('REMOTE_ADDR');
if (!$this->isFromTrustedProxy()) {
return array($ip);
...

获取访问者/客户端IP地址的最简单方法是使用$_SERVER['REMOTE_ADDR']或$_SERVER['REMOTE_HOST']变量。 但是,有时候不会返回访问者的正确IP地址,因此我们可以使用其他服务器变量来获取IP地址。 以下两个功能与仅在检索值的方式和从何处取得的差异相当。 getenv()用于获取PHP中环境变量的值。

// Function to get the client IP address
function get_client_ip() {
$ipaddres
...

没有这样的信息可供您在该上下文中获取。 您唯一的选择是将IHttpContextAccessor注入您的ResourceOwnerPasswordValidator ,然后您可以从HttpContext.Request对象获取请求IP。

There is no information like that for you to grab within that context. Your only Option is to inject IHttpContextAccessor into your
...
$_SERVER['REMOTE_ADDR']

是最好的你会得到真正的。 客户端可以发送不同的其他头文件( HTTP_FORWARDED_FOR等) - 请参阅此问题以获得完整的概述 - 但这些头文件可以由客户自由操纵,并且不被视为可靠。 $_SERVER['REMOTE_ADDR']

is the best you will get really. There are various other headers that can be sent by the client (HTTP_F
...

问题是inet_ntoa()返回一个指向静态内存的指针,每次调用inet_ntoa()时都会被覆盖。 在再次调用inet_ntoa()之前,您需要复制数据: struct peerInfo{

char ip[16];
int socket;
};
while((newsockfd = accept(sockfd,(struct sockaddr *)&clt_addr, &addrlen)) > 0)
{
struct peerInfo *p = (struct pe
...

您可以获得的servlet中客户端的IP地址 - HttpServletRequest httpServletRequest = (HttpServletRequest) request;

// Proxy
String userIpAddress = httpServletRequest.getHeader("X-Forwarded-For");
if(userIpAddress == null) {
userIpAddress = request.getRemoteAddr();
}
...

在连接模式下,您可以使用连接对象的LocalAddr()和RemoteAddr()方法。 在断开连接(即经典)模式下,使用以下方法之一获取数据报本身的地址信息:

func (c *UDPConn) ReadFrom(b []byte) (int, Addr, error)
ReadFrom implements the PacketConn ReadFrom method.
func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr
...

这发生在PHP脚本无法覆盖的层上。 X-Forwarded-For标头用于中继真正的客户端IP,但远程服务器必须支持这种易于欺骗的值。 $header = "X-Forwarded-

For: {$_SERVER['REMOTE_ADDR']}, {$_SERVER['SERVER_ADDR']}";
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array($header));
This is happening at a layer that ca
...