php 获取客户端的电脑名称

php 获取客户端的电脑名称,第1张

PHP在局域网中获取客户端计算机名、IP地址

<?

//php获取ip的算法

if(getenv('HTTP_CLIENT_IP')) {

$onlineip = getenv('HTTP_CLIENT_IP')

} elseif(getenv('HTTP_X_FORWARDED_FOR')) {

$onlineip = getenv('HTTP_X_FORWARDED_FOR')

} elseif(getenv('REMOTE_ADDR')) {

$onlineip = getenv('REMOTE_ADDR')

} else {

$onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR']

}

exec ("ping $onlineip")

$macaddress=exec ("arp -a | find /i".' "'.$onlineip.'"')

$computername=exec ('nbtstat -A'.' '.$onlineip.' | find /i "20"')

$MacName=(preg_split("/\s+/", trim($macaddress)))

$UserName=(preg_split("/\s+/", trim($computername)))

echo "计算机名:".$UserName[0]." --- "."IP 地址:".$MacName[0]." --- "."MAC 地址:".$MacName[1]

?>

class GetMacAddr

{

var $return_array = array()// 返回带有MAC地址的字串数组

var $mac_addr=array()

function GetMacAddr()

{

switch (strtolower(PHP_OS) )

{

case "linux":$this->forLinux()break

case "solaris":break

case "unix":break

case "aix":break

default:$this->forWindows()break

}

//www.51qgj.com

$temp_array = array()

foreach ( $this->return_array as $value )

{

if ( preg_match( "/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i", $value, $temp_array ) )

{

$this->mac_addr[] = $temp_array[0]

}

}

unset($temp_array)

return $this->mac_addr

}

function forWindows()

{

@exec("ipconfig /all", $this->return_array)

if ( $this->return_array )

return $this->return_array

else{

$ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe"

if ( is_file($ipconfig) )

@exec($ipconfig." /all", $this->return_array)

else

@exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->return_array)

return $this->return_array

}

}

function forLinux()

{

@exec("ifconfig -a", $this->return_array)

return $this->return_array

}

}

$mac = new GetMacAddr()

echo "<pre>"

print_r( $mac->mac_addr)

?>

mac测试过 可能无效

本文所述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"

}

}

}

该程序是在cli模式下运行的,在浏览器上应该也可以

php获取局域网中的用户ip功能就完成了,主要用到的是php的exec函数

和window的arp

-a

命令

其中获取本机IP:gethostbyname($_ENV['COMPUTERNAME'])

有别于以往的写法,感兴趣的朋友可以继续深入研究一下。

获取主机名函数:gethostbyaddr(IPd)

这个函数功能也很强大。

1、做成web服务器需要满足:域名或者公网ip,电脑安装配置web服务,开启80端口允许访问,网站程序。

2、域名或者公网ip,这一点一般家用宽带没有固定的公网ip,常用的动态域名解析花生壳,科迈动态解析,建议申请使用花生壳动态域名解析,并设置到路由器上,这样网站的访问域名是花生壳的子域名。

3、如果有公网固定ip,建议购买一个域名解析到这个ip上,这个公网ip可以在电脑直接设定。web绑定,防火墙允许80端口就可以了。

4、电脑安装配置web服务,这个条件比较好实现 ,找个服务器操作系统,如win2003系统,安装上iis组件就可以了,默认80就打开了,然后再配置一下程序需要的环境。

5、如果.net程序就安装net framwork相应版本,如果php就配置php+mysql环境。

6、家用宽带默认80端口在路由器不开放的,需要在路由器上做端口映射,将个人电脑ip 80端口通过宽带路由映射出去。

7、网站程序,自己会开发了可以自己做,不会了到网上下载一些开源程序就可以了。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/213077.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存