【问题标题】:Getting IP of post client获取post客户端的IP
【发布时间】:2013-10-10 19:51:58
【问题描述】:

好吧,我知道在问这里之前我应该​​尝试很多,但我的问题是。很难获得 fcgi 文档的结构化参考。所以我希望你不会那么反对我,即使是在缺乏自学方面。

我正在尝试找到一种方法来归档请求客户端的 IP。

我猜(如果我理解正确的话)我可以通过 FCGX_stream 句柄请求连接的 HTTP 标头。但如果有的话,我更喜欢更简单的方法。

我的第一次尝试是检查第一个 fcgi 教程中提供的 getenv,但正如我在此处描述的那样:

https://stackoverflow.com/a/4107212/2003898

它编译得很好,但在第一次请求时,我的 fcgi 应用程序就崩溃了。 (但无论如何它都不能解决我的问题,因为我发现 get env 只是在请求我的,所以主机的,env 的)

我也在尝试使用

*FCGX_GetParam(const char *name, FCGX_ParamArray envp);

功能。但要么我太笨了,要么它也只是提供我的本地环境,而不是 POST 方面的。

因此,如果有人能告诉我如何访问这些数据(最好不从 HTTP 标头中提取)或如何使用FCGX_GetParam 访问它, 我会很感激的。

编辑:

#include "fcgi_stdio.h"
#include <stdlib.h>
int main()
{       
    int count = 0;
    while(FCGI_Accept() >= 0)
    {
        for (count = 0; environ[count] != NULL; count++)
        {
            printf("%s\n", environ[i]);
        }
    }

    return 0;
}

【问题讨论】:

  • 我会建议从REMOTE_ADDR 环境变量中获取它。也许您可以显示访问环境的代码,我们可以找出它崩溃的原因?它应该是直截了当的。

标签: c freebsd fastcgi


【解决方案1】:

使用getenv("REMOTE_ADDR")

远程 IP 地址无论如何都不包含在 HTTP 标头中

【讨论】:

  • hm 这是“客户”IP 地址,不是我的吗?我以为是我机器的IP地址。但正如我不得不说的......我太愚蠢了从同一个机器上运行它来测试......
  • @Zaibis 是的,它是客户端的 IP。这就是“远程”的意思。 :)
  • 啊好吧...嗯...还有这样一种简单的方法来获取远程端运行帖子的网址吗?
  • 在大多数情况下,您可以使用getenv("HTTP_REFERER") 获取包含表单的页面的 URL,但您不应依赖此信息的正确性(它可能根本不可用) .更好的解决方案是在表单本身中包含一个隐藏的标识符字段。
  • 嗯,听起来都不错。太棒了:) 但是在哪些情况下它无法使用?因为我只想进行登录验证,并且好像 url 不包含我生成到 IP 的登录代码,所以他不得不再次登录。或者即使用户没有尝试破解我的程序,它是否也可能包含错误信息?因为如果用户想要伤害最坏的情况就是他必须再次登录。
猜你喜欢
  • 2020-12-08
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
  • 2014-10-06
  • 2019-01-14
  • 2012-03-31
相关资源
最近更新 更多