获取通过html表单发送请求的服务器的IP地址

时间:2017-05-05 18:20:47

标签: php html

我想通过HTML FORM获取服务器发送请求的IP地址。

我做了这样的测试:

HTML FORM(服务器1中的form.html):

<form action="URL_OF_SERVER2/rec.php" method="post">
<input type="submit" value="submit">
</form>

PHP文件:(rec.php)

<?php
echo $_SERVER['HTTP_REFERER'].'<br><br>'; // To get referal URL
echo $_SERVER['REMOTE_ADDR']; // To get IP Address
?>

但是当我测试时,我得到了自己的IP地址,而不是服务器。

第二次尝试:

<?php
echo $_SERVER['HTTP_REFERER'].'<br><br>'; // To get referal URL
$result = parse_url($_SERVER['HTTP_REFERER']);
echo gethostbyname($result['host']); // To get IP Address
?>

但是这不是真正的IP,而是云浮动之一,例如,我希望制作与perfectmoney相同的系统,你把你的真实IP放在你的仪表板上只接受来自的请求,即使你是在cloudflare后面,perfectmoney检测到真实的IP。

在我的仪表板上,我可以按范围放置IP:127.0.0.1 / 24,127.0.0。* ...仅接受来自的请求,即使域名位于cloudflare或其他类似服务之后。

2 个答案:

答案 0 :(得分:0)

$_SERVER['SERVER_ADDR'];是执行脚本地址的服务器。 $_SERVER['REMOTE_ADDR'];是客户端地址(从服务器的角度将请求发送到服务器的地址)。 有关详细信息,请参阅$_SERVER array documentation

答案 1 :(得分:0)

  

服务器发送请求的地址

服务器不发送请求。浏览器发送请求,服务器发送响应。

如果您希望浏览器的IP发送请求,请使用$_SERVER['REMOTE_ADDR']

如果您希望服务器的IP发送回复,请使用$_SERVER['SERVER_ADDR']

注意:如果路上有任何代理,$_SERVER['REMOTE_ADDR']可能实际上不代表浏览器的IP。

更新:如果您需要REFERER服务器的IP地址,则必须进行自己的DNS查找。

$data = parse_url( $_SERVER['HTTP_REFERER']);
print_r(dns_get_record($data['host']));

这会给你:

Array
(
    [0] => Array
        (
            [host] => www.google.com
            [class] => IN
            [ttl] => 270
            [type] => A
            [ip] => 172.217.9.68
        )

    [1] => Array
        (
            [host] => www.google.com
            [class] => IN
            [ttl] => 14
            [type] => AAAA
            [ipv6] => 2607:f8b0:4009:816::2004
        )

)

但请注意,这是不可靠的,因为$_SERVER['HTTP_REFERER']很容易被伪造。