답변:
에서 서버 IP 주소를 얻을 수 있습니다 $_SERVER['SERVER_ADDR']
.
MAC 주소의 경우 netstat -ie
Linux 또는 ipconfig /all
Windows 의 출력을 구문 분석 할 수 있습니다.
당신은 클라이언트 IP를 얻을 수 있습니다 $_SERVER['REMOTE_ADDR']
클라이언트가 서버와 동일한 이더넷 세그먼트에있는 경우 특별한 상황을 제외하고는 클라이언트 MAC 주소를 사용할 수 없습니다 .
따라서 LAN 기반 시스템을 구축하고 클라이언트 가 동일한 이더넷 세그먼트에있는 경우 arp -n
(linux) 또는 arp -a
(windows) 의 출력을 구문 분석하여 MAC 주소를 얻을 수 있습니다.
편집 : 외부 명령의 출력을 얻는 방법을 의견에 묻습니다-한 가지 방법은 백틱을 사용하는 것입니다.
$ipAddress=$_SERVER['REMOTE_ADDR'];
$macAddr=false;
#run the external command, break output into lines
$arp=`arp -a $ipAddress`;
$lines=explode("\n", $arp);
#look for the output line describing our IP address
foreach($lines as $line)
{
$cols=preg_split('/\s+/', trim($line));
if ($cols[0]==$ipAddress)
{
$macAddr=$cols[1];
}
}
글쎄, 당신은 클라이언트가 그 정보를 자원 봉사하고 다른 수단을 통해 전송할 수 없다면 운이 나쁘다.
클라이언트와 서버 사이의 모든 라우터가 클라이언트의 MAC 주소 (HTTP 요청을 발행 한 컴퓨터의 의미)를 덮어 씁니다.
클라이언트 IP는의 스크립트에 편리하게 제공됩니다 $_SERVER['REMOTE_ADDR']
. 일부 시나리오에서는 웹 서버가 프록시 (즉, 캐싱 프록시) 뒤에 특히 경우 $_SERVER['REMOTE ADDR']
의는 IP를 반환합니다 프록시 , 종종 여분의 가치가있을 것입니다 $_SERVER['HTTP_X_FORWARDED_FOR']
원래 요청 클라이언트의 IP를 포함.
때로는 제어하지 않는 익명 프록시를 처리 할 때 프록시가 실제 IP 주소를 반환하지 않으므로 프록시의 IP 주소 만 있으면됩니다.
PHP로 MAC 주소를 얻을 수 있다고 생각하지 않지만 $_SERVER['REMOTE_ADDR']
변수 에서 IP를 얻을 수 있습니다 .
Windows 서버의 경우 다음을 사용할 수 있다고 생각합니다.
<?php
echo exec('getmac');
?>
exec
"echogetmac
arp를 다른 그룹에 넣으면됩니다.
기본:
-rwxr-xr-x 1 root root 48K 2008-11-11 18:11 /usr/sbin/arp*
명령으로 :
sudo chown root:www-data /usr/sbin/arp
당신은 얻을 것이다 :
-rwxr-xr-x 1 root www-data 48K 2008-11-11 18:11 /usr/sbin/arp*
그리고 apache는 사용자 www-data에서 실행되는 데몬이므로 이제이 명령을 실행할 수 있습니다.
따라서 이제 PHP 스크립트를 사용하는 경우 :
<?php
$mac = system('arp -an');
echo $mac;
?>
당신은 리눅스 arp -an
명령 의 출력을 얻을 것이다 .
arp
바이너리 그룹을 변경하는 것은 불필요하지만 www-data
여전히 other
umode 에서 실행 권한이 있습니다 .
이 클래스를 사용하십시오 (https://github.com/BlakeGardner/php-mac-address)
Unix, Linux 및 Mac OS X 운영 체제에서 MAC 주소 조작을위한 PHP 클래스입니다. 주로 무선 보안 감사를위한 스푸핑을 돕기 위해 작성되었습니다.
Windows에서 사용자가 스크립트를 로컬로 사용하는 경우 매우 간단합니다.
<?php
// get all the informations about the client's network
$ipconfig = shell_exec ("ipconfig/all"));
// display those informations
echo $ipconfig;
/*
look for the value of "physical adress" and use substr() function to
retrieve the adress from this long string.
here in my case i'm using a french cmd.
you can change the numbers according adress mac position in the string.
*/
echo substr(shell_exec ("ipconfig/all"),1821,18);
?>
다음 솔루션을 사용하여 문제점을 해결할 수 있습니다.
$mac='UNKNOWN';
foreach(explode("\n",str_replace(' ','',trim(`getmac`,"\n"))) as $i)
if(strpos($i,'Tcpip')>-1){$mac=substr($i,0,17);break;}
echo $mac;
PHP를 사용하여 MAC 주소 얻기 : (우분투 18.04에서 테스트)-2020 업데이트
코드는 다음과 같습니다.
<?php
$mac = shell_exec("ip link | awk '{print $2}'");
preg_match_all('/([a-z0-9]+):\s+((?:[0-9a-f]{2}:){5}[0-9a-f]{2})/i', $mac, $matches);
$output = array_combine($matches[1], $matches[2]);
$mac_address_values = json_encode($output, JSON_PRETTY_PRINT);
echo $mac_address_values
?>
산출:
{
"lo": "00:00:00:00:00:00",
"enp0s25": "00:21:cc:d4:2a:23",
"wlp3s0": "84:3a:4b:03:3c:3a",
"wwp0s20u4": "7a:e3:2a:de:66:09"
}
이 코드를 사용하여 MAC 주소 또는 실제 주소 를 얻을 수 있습니다
$d = explode('Physical Address. . . . . . . . .',shell_exec ("ipconfig/all"));
$d1 = explode(':',$d[1]);
$d2 = explode(' ',$d1[1]);
return $d2[1];
shell_exec ( "ipconfig / all") 가 모든 네트워크의 완전한 세부 정보를 반환 하기 때문에 여러 번 폭발을 사용했습니다 . 따라서 하나씩 분할해야합니다. 이 코드를 실행하면 당신은 얻을 것이다
당신의 MAC 주소 ## - - ## - CV-12 00 쇼에만 // 이것이 가짜 주소를.
// Turn on output buffering
ob_start();
//Get the ipconfig details using system commond
system('ipconfig /all');
// Capture the output into a variable
$mycomsys=ob_get_contents();
// Clean (erase) the output buffer
ob_clean();
$find_mac = "Physical";
//find the "Physical" & Find the position of Physical text
$pmac = strpos($mycomsys, $find_mac);
// Get Physical Address
$macaddress=substr($mycomsys,($pmac+36),17);
//Display Mac Address
echo $macaddress;
이것은 ipconfig /all
Windows 시스템 명령 과 마찬가지로 Windows에서도 작동합니다 .
openWRT를 사용하면이 작업을 쉽게 수행 할 수 있습니다. 캡 티브 포털을 사용하는 경우 php와 openWRT를 혼합하여 IP와 mac 사이의 관계를 만들 수 있습니다.
다음을 사용하여 간단한 PHP 코드를 작성할 수 있습니다.
$localIP = getHostByName(getHostName());
나중에 openWRT를 사용하면 /tmp/dhcp.leases
다음 형식으로 무언가를 얻을 수 있습니다 .
e4:a7:a0:29:xx:xx 10.239.3.XXX DESKTOP-XXX
여기에는 mac, IP 주소 및 호스트 이름이 있습니다.