PHP如何获取客户端IP

PHP如何获取客户端IP,第1张

方法:

1、进入php源程序目录中的ext目录中,这里存放着各个扩展模块的源代码,选择需要的模块,比如curl模块执行phpize生成编译文件,phpize在PHP安装目录的bin目录下。

2、phpize 运行时,可能会报错Cannot find autoconf。

3、需要安装autocon执行这个命令时,php会去检查配置文件是否正确,如果有配置错误,这里会报错,可以根据错误信息去排查。

本文所述php实例可以完成获取局域网所有用户的电脑IP和主机名、及mac地址的功能,对于php程序设计人员有一定的参考借鉴价值。完整代码如下:

<?php

$bIp = gethostbyname($_ENV['COMPUTERNAME'])//获取本机的局域网IP

echo "本机IP:",$bIp,"\n"

echo "本机主机名:",gethostbyaddr($bIp),"\n\n\n"//gethostbyaddr 函数可以根据局域网IP获取主机名

//默认网关IP

list($ipd1,$ipd2,$ipd3) = explode('.',$bIp)

$mask = $ipd1 . "." . $ipd2 . "." . $ipd3

exec('arp -a',$aIp)//获取局域网中的其他IP

foreach( $aIp as $ipv) {

if(strpos($ipv,'接口') !== false) {//一下显示的IP是否是当前局域网中的 而不是其他的类型 可以在cmd下试一下命令

$bool = false

preg_match('/(?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))/',$ipv,$arr)

if(strcmp($arr[0],$bIp) == 0) {

$bool = true

}

} else {

if($bool) {

$str = preg_replace('/\s+/', '|', $ipv)

$sArr = explode('|',$str)

if($sArr[1] == 'Internet' || empty($sArr[1])) {

continue

}

//去除默认网关

if(strcmp($mask . ".1", $sArr[1]) == 0) {

continue

}

//去除同网关下255的IP

if(strcmp($mask . ".255", $sArr[1]) == 0) {

continue

}

//去除组播IP

list($cIp) = explode('.', $sArr[1])

if($cIp >= 224 &&$cIp <= 239) {

continue

}

echo "IP地址:|",$sArr[1],"|\n"

echo "MAC地址:",$sArr[2],"\n"

echo "主机名:",gethostbyaddr($sArr[1]),"\n"

echo "\n\n"

}

}

}

ip地址分 IPv4和IPV6两个版本。

127.0.0.1或者192.168.0.1之类的,属于IPV4的格式

127.0.0.1转换为IPv6就是 ::1

IPv6具体的格式写法,你搜索一下了解一下。

另外 ,服务端获取ip地址,是相对的。比如你在局域网内建一个服务器,在程序里获取的ip地址,就是客户端在局域网的ip  ,一般是类似 192.168.0.101 之类的,大公司的话可能  10.x.x.x

局域网的ip地址,可以直接在网络适配器上看到

而在inter网,也就是大网络上,服务端获取的ip地址,是你的连网设备获取到的公网ip ,一般一个局域网内的主机,相对于因特网上的服务器,显示的都是公网地址。

公网ip没有在本机电脑上直接显示。会显示在路由或者连网设备上。也可以通过百度搜索 ip地址,会显示你的公网ip

所以,假设一个局域网内,有两台电脑同时访问一个网上的服务器,服务器是没办法给两台电脑区分开ip地址的,显示的是一样的。只是可能得到的设备信息不一样(如:浏览器的useragent)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7320363.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存