如何使用PHP获取客户端的IP和端口?
我尝试了下面的脚本,但它只给了我IP地址。
<?php print $_SERVER['REMOTE_ADDR']; ?>
答案 0 :(得分:3)
要获取已连接设备的端口,您可以使用$ _SERVER [&#39; REMOTE_PORT&#39;]
$ ip地址= $ _ SERVER [&#39; REMOTE_ADDR&#39;]; $端口= $ _ SERVER [&#39; REMOTE_PORT&#39;];
答案 1 :(得分:3)
使用说明性文字填写@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';
}