【问题标题】:Private IP of client machine from website来自网站的客户端机器的私有 IP
【发布时间】:2011-02-02 04:52:31
【问题描述】:

亲爱的,当我检查 时,如何从 ASP.Net C# 中的公共 ip 上托管的网站获取客户端系统的 私有 ip?用户主机名,它显示了互联网连接的全球IP,对于网络中的所有机器来说都是相同的。请给我建议。

提前致谢

阿努普·乔治·托马斯

【问题讨论】:

  • @Muhammad:如果客户端通过添加了 HTTP_X_FORWARDED_FOR 字段的代理,这将起作用,但通常不能保证。如果它通过 NAT 而不是代理,则该字段的可能性很小。
  • 但是 Akhtar,我从代码中收到“未知”的回复

标签: asp.net


【解决方案1】:

简短的回答是否定的,不是来自服务器端。您可以编写客户端代码来查找系统的实际 IP 地址,但您可能需要通过浏览器插件来完成。

一个更好的问题是“你为什么需要这样做?”一般来说,如果你必须有内部 IP,你就做错了。

【讨论】:

  • 贾斯汀,我正在使用代码来限制在线投票只能在特定机器上进行一次。有其他选择吗?
  • 没有灵丹妙药,因为客户端可以轻松欺骗 HTTP_X_FORWARDED_FOR。 “正确”的解决方案是要求用户帐户,并且只允许每个帐户投票一次。否则,您可以使用 cookie、IP 地址和用户代理(整体)的组合来阻止业余尝试。
  • 感谢您的回复...贾斯汀
【解决方案2】:

不幸的是,这不是你可以拉动的东西。

现在,您可以获取通过代理或其他类似转发设备的机器的 IP。这是一个使用 HTTP_CLIENT_IP 和 HTTP_X_FORWARDED_FOR IP(如果它们在您的服务器环境中可用)的示例函数。

<?php

function getIP(){
    if (!empty($_SERVER['HTTP_CLIENT_IP'])){
      $ip = $_SERVER['HTTP_CLIENT_IP'];
    }else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
      $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }else{
      $ip = $_SERVER['REMOTE_ADDR'];
    }

    return $ip;
}


echo getIP();

?>

【讨论】:

  • 他在 ASP.Net 上寻找解决方案,而不是 PHP。
猜你喜欢
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 2011-07-22
  • 2017-09-02
相关资源
最近更新 更多