<?
//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、网站程序,自己会开发了可以自己做,不会了到网上下载一些开源程序就可以了。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)