如何通过PHP获取客户端的IP地址和端口?

时间:2014-04-23 17:59:24

标签: php ip client port

如何使用PHP获取客户端的IP和端口?

我尝试了下面的脚本,但它只给了我IP地址。

<?php print $_SERVER['REMOTE_ADDR']; ?>

5 个答案:

答案 0 :(得分:3)

要获取已连接设备的端口,您可以使用$ _SERVER [&#39; REMOTE_PORT&#39;]

$ ip地址= $ _ SERVER [&#39; REMOTE_ADDR&#39;]; $端口= $ _ SERVER [&#39; REMOTE_PORT&#39;];

答案 1 :(得分:3)

获取客户端的原始IP和端口

对网络知识最少的人的正确答案

使用说明性文字填写@marcolz答案。

TL; DR-echo $_SERVER['REMOTE_ADDR'] . ":" . $_SERVER['REMOTE_PORT'];

其背后的含义:

每个人都应该知道,重要的一点是,必须拥有有关客户所做的每个请购单的数据,并记录至少五年的访问数据,以便在版权或其他方面的法律纠纷时为用户提供自我保护。进入。

IPv4世界由ASN(自治系统编号)所有者以及与之共享身份的用户(所谓的最终用户)组成。

由于IPv4变得稀缺,大多数ISP(Internet服务提供商)通过那些称为CG-NAT(运营商级网络地址转换)的庞大而庞大的NAT(网络地址转换)来提供对万维网的访问。付出的代价不足以让他们自己值得拥有一个公共的IPv4区块,基本上所有最终用户的连接都是通过此方式进行的,并且在发生某些情况时知道谁是smartass的唯一方法是不仅知道他们的IP地址,而且知道端口他们根据要求使用了。

如果您在应用程序上使用PHP,则可以通过记录请求源IP和端口来保护自己。

这样做,您可以使用以下代码:

echo $_SERVER['REMOTE_ADDR'] . ":" . $_SERVER['REMOTE_PORT'];

在这里,我们将请求源IP地址和端口连接在中间,中间用一个冒号,然后回显它们以查看结果。

您可以在侦听tcpdump时通过执行请求来检查信息的准确性,如果tcpdump上请求中使用的端口与您的浏览器显示的端口相同,则说明一切正常。

来自外部世界的欢呼!

答案 2 :(得分:1)

试试这个:

if (!isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $client_ip = $_SERVER['REMOTE_ADDR'];
}
else {
    $client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

答案 3 :(得分:0)

端口在http服务器(Apache或其他,主要是80或443)中定义

您可以在http://www.php.net/manual/en/reserved.variables.server.php

查看的php $ _SERVER变量

我确信: REMOTE_ADDR” 用户正在查看当前页面的IP地址。

但如果你的服务器在NAT后面:

  

如果您从代理服务器后面提供服务,那么您几乎可以   通过查看这些$ _SERVER变量的作用,可以节省时间   你的机器在代理后面。

     

$ _ SERVER ['HTTP_X_FORWARDED_FOR']代替$ _SERVER ['REMOTE_ADDR']

     

$ _ SERVER ['HTTP_X_FORWARDED_HOST']和   $ _SERVER ['HTTP_X_FORWARDED_SERVER']代替   $ _SERVER [ 'SERVER_NAME']

: - )

答案 4 :(得分:0)

您可以使用以下两个代码,两者仅相同,只是区别于检索值的方式和位置。

//getenv() is used to get the values from environment
if (getenv('HTTP_CLIENT_IP')){
    $ipaddress = getenv('HTTP_CLIENT_IP');
}else if(getenv('HTTP_X_FORWARDED_FOR')){
    $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
}else if(getenv('HTTP_X_FORWARDED')){
    $ipaddress = getenv('HTTP_X_FORWARDED');
}else if(getenv('HTTP_FORWARDED_FOR')){
    $ipaddress = getenv('HTTP_FORWARDED_FOR');
}else if(getenv('HTTP_FORWARDED')){
    $ipaddress = getenv('HTTP_FORWARDED');
}else if(getenv('REMOTE_ADDR')){
    $ipaddress = getenv('REMOTE_ADDR');
}else{
    $ipaddress = 'UNKNOWN';
}


//$_SERVER is used to get the values from the server
if ($_SERVER['HTTP_CLIENT_IP']){
    $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
}else if($_SERVER['HTTP_X_FORWARDED_FOR']){
    $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else if($_SERVER['HTTP_X_FORWARDED']){
    $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
}else if($_SERVER['HTTP_FORWARDED_FOR']){
    $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
}else if($_SERVER['HTTP_FORWARDED']){
    $ipaddress = $_SERVER['HTTP_FORWARDED'];
}else if($_SERVER['REMOTE_ADDR']){
    $ipaddress = $_SERVER['REMOTE_ADDR'];
}else{
    $ipaddress = 'UNKNOWN';
}