- PHP: получить MAC-адрес
- Решение
- Другие решения
- How can I get the MAC and the IP address of a connected client in PHP?
- php Mac Address check format
- 2 Answers 2
- Как я могу получить MAC и IP-адрес подключенного клиента в PHP?
- IP-адрес сервера
- MAC-адрес сервера
- IP-адрес клиента
- MAC-адрес клиента
- Но что, если клиент не находится в локальной сети?
- Форум PHP программистов ► PHP практикум ► PHP ?
PHP: получить MAC-адрес
Я проверил несколько сценариев, чтобы отобразить свой MAC-адрес, но безрезультатно.
Я прошу вашей помощи!
Вот что я тестировал до сих пор, но ничего не работает правильно:
— Текущий MAC-адрес EC: A8: 6B: F1: D2: B0 на всех моих телефонах / компьютерах на 4G или ADSL
— Случайно сгенерированный MAC-адрес: выходной MAC-адрес меняется немного каждый раз, когда запускается сценарий. Я подозреваю, что это из-за информации о времени и времени ожидания, которая изменилась в счете. Есть ли более эффективный способ получить только MAC-адрес?
public function getMAC($ip) < $macCommandString = "arp $ip | awk 'BEGIN< i=1; >< i++; if(i==3) print $3 >'"; $mac = exec($macCommandString); env::$MAC = $mac; > function __construct() < $this->getIP(); $this->getMAC(env::$IP); > > $envObj = new env(); echo "MAC : ".env::$MAC."
"; echo "IP : ".env::$IP; ?>
— MAC пуст
— IP — это мой IP на myip.com
Не могли бы вы мне помочь ?
Решение
Текущий MAC-адрес EC: A8: 6B: F1: D2: B0 на всех моих телефонах / компьютерах на 4G или ADSL
PHP-код работает на веб-сервере.
Таким образом, MAC-адрес, распечатанный программой PHP, будет адресом сетевого интерфейса на сервере.
Вы всегда получите одно и то же значение, потому что оно всегда проверяет адрес одного и того же сетевого интерфейса на сервере.
Неважно, где вы запускаете браузер, код всегда будет выполняться в одном и том же месте и всегда получит один и тот же код.
Если вы хотите получить MAC-адрес вашего устройства, которое вы на самом деле используете, вам нужно будет запустить код на этом устройстве. (это, вероятно, будет означать переключение на другой язык).
Другие решения
чтобы получить свой собственный MAC-адрес на сервере Linux
$mac = shell_exec("ifconfig -a | grep -Po 'HWaddr \K.*$'"); var_dump($mac);
это даст mac адрес сервера, на котором работает PHP
How can I get the MAC and the IP address of a connected client in PHP?
You can use the $_SERVER[‘REMOTE_ADDR’] variable in PHP to get the IP address of a connected client. However, you cannot get the MAC address of a client using PHP alone, as the MAC address is not transmitted in the HTTP request headers.
To get the MAC address of a client, you will need to use a language or library that provides access to the client’s network information, such as Java or Python’s socket library. Alternatively, you can use a system command like arp on the server to get the MAC address of a connected client, but this will only work if the client is on the same local network as the server.
Here is an example of how you might use the arp command to get the MAC address of a client in PHP:
// Get the client's IP address $client_ip = $_SERVER['REMOTE_ADDR']; // Execute the arp command and store the output in $output exec("arp -a $client_ip", $output); // The MAC address should be the second element in the array $mac_address = $output[1]; // Print the MAC address echo "The MAC address for $client_ip is $mac_address";
Keep in mind that this approach may not work on all systems and may require additional configuration, such as setting appropriate permissions for the PHP script to execute system commands.
php Mac Address check format
I am getting the mac of the user from the url. What I’m trying to do is match to see if the address is genuine. Cause I’ll be running it against a database and I don’t want to run it if it’s not the right format. This is what I have so far:
if (isset($_GET['mac'])) < if (strlen($_GET['mac']) == 18) < $get_mac_filtered = preg_replace('/^([a-fA-F0-9]:)[a-fA-F0-9]$/', '',$_GET['mac']); if (preg_match('/^([a-fA-F0-9]:)[a-fA-F0-9]$/', $_GET['mac']) == $get_mac_filtered) < echo 'Got a mac match! '.$get_mac_filtered; >else < echo 'Sorry !='; >>else >
I’m guessing the problem is somewhere in here (preg_match(‘/^([a-fA-F0-9]<2>:)[a-fA-F0-9]<2>$/’, $_GET[‘mac’]) == $get_mac_filtered) because it returns else2>
If you’re checking for matches against the DB anyway, won’t that return false if the format is incorrect?
@andrewsi I am guessing it is somewhere in here (preg_match(‘/^([a-fA-F0-9]<2>:)[a-fA-F0-9]<2>$/’, $_GET[‘mac’]) == $get_mac_filtered) cause it returns else.2>
2 Answers 2
Available since PHP 5.5, the best way to validate a MAC address is using filter_var with the constant FILTER_VALIDATE_MAC :
var_dump(filter_var('FA-F9-DD-B2-5E-0D', FILTER_VALIDATE_MAC)); // string(17) "FA-F9-DD-B2-5E-0D" var_dump(filter_var('DC:BB:17:9A:CE:81', FILTER_VALIDATE_MAC)); // string(17) "DC:BB:17:9A:CE:81" var_dump(filter_var('96-D5-9E-67-40-AB', FILTER_VALIDATE_MAC)); // string(17) "96-D5-9E-67-40-AB" var_dump(filter_var('96-D5-9E-67-40', FILTER_VALIDATE_MAC)); // bool(false) var_dump(filter_var('', FILTER_VALIDATE_MAC)); // bool(false)
if (false === filter_var($_GET['mac'], FILTER_VALIDATE_MAC))
Как я могу получить MAC и IP-адрес подключенного клиента в PHP?
Мне нужно знать MAC и IP-адрес подключаемых клиентов, как я могу это сделать в PHP?
IP-адрес сервера
Вы можете получить IP-адрес сервера от $_SERVER[‘SERVER_ADDR’] .
MAC-адрес сервера
Для MAC-адреса вы можете анализировать вывод netstat -ie в Linux или ipconfig /all в Windows.
IP-адрес клиента
Вы можете получить IP-адрес клиента от $_SERVER[‘REMOTE_ADDR’]
MAC-адрес клиента
MAC-адрес клиента не будет доступен вам, кроме одного особого обстоятельства: если клиент находится в том же сегменте Ethernet, что и сервер.
Итак, если вы строите какую-то систему на базе локальной сети, а ваши клиенты находятся в одном сегменте Ethernet, тогда вы можете получить MAC-адрес, проанализировав вывод arp -n (linux) или arp -a (windows).
Редактировать : вы спрашиваете в комментариях, как получить выход внешней команды – одним из способов является использование обратных ссылок, например
$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[‘HTTP_X_FORWARDED_FOR’] прокси), $_SERVER[‘REMOTE ADDR’] вернет IP-адрес прокси-сервера , и будет добавлено дополнительное значение, часто $_SERVER[‘HTTP_X_FORWARDED_FOR’] , который содержит IP исходного клиента запроса.
Иногда, особенно когда вы имеете дело с анонимным прокси, который вы не контролируете, прокси не вернет реальный IP-адрес, и все, на что вы можете надеяться, это IP-адрес прокси-сервера.
Я не думаю, что вы можете получить MAC-адрес в PHP, но вы можете получить IP из переменной $_SERVER[‘REMOTE_ADDR’] .
Все, что вам нужно сделать, – это включить 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-данными, теперь он может выполнить эту команду.
Поэтому, если теперь вы используете PHP-скрипт, например:
вы получите результат команды linux arp -an .
Для сервера Windows я думаю, что вы можете использовать это:
В окнах, если пользователь использует ваш скрипт локально, это будет очень просто:
Это класс PHP для обработки MAC-адресов поверх операционных систем Unix, Linux и Mac OS X. в основном это было написано, чтобы помочь с подделкой для проверок беспроводной безопасности.
под linux с помощью iptables вы можете записывать в файл каждый запрос на веб-сервер с адресом mac и ip. от php искать последний элемент с IP-адресом и получить MAC-адрес.
Как указано, помните, что адрес mac находится от последнего маршрутизатора на трассе.
Вы можете сделать это легко, используя openWRT. Если вы используете портативный портал, вы можете смешивать php и openWRT и устанавливать связь между IP и маком.
Вы можете написать простой PHP-код, используя:
$localIP = getHostByName(getHostName());
Позже, используя openWRT, вы можете перейти в /tmp/dhcp.leases , вы получите что-то с формой:
e4:a7:a0:29:xx:xx 10.239.3.XXX DESKTOP-XXX
Там у вас есть mac, IP-адрес и имя хоста.
//get user real ip function kh_getUserIP()< $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP))< $ip = $client; >elseif(filter_var($forward, FILTER_VALIDATE_IP))< $ip = $forward; >else < $ip = $remote; >return $ip; >
// 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;
Это работает для меня в Windows, так как ipconfig /all – это системная команда Windows.
Форум PHP программистов ► PHP практикум ► PHP ?
Профиль
Группа: Пользователь
Сообщений: 44
Пользователь №: 3185
На форуме:
Карма:
Привет всем!
подскажите как определить mac — адрес пользователя с помощью php . Это надо для того, чтобы отслеживать пользователей. Привязка к ip — адресу или cookie не работают так, как это требуется.
Заранее всем благодарен!
Сообщений: 376
Пользователь №: 4532
На форуме:
Карма:
Трезвый :
14 лет, 4 месяца, 26 дней
Сообщений: 6155
Пользователь №: 4795
На форуме:
Карма: 120
Привет всем!
подскажите как определить mac — адрес пользователя с помощью php . Это надо для того, чтобы отслеживать пользователей. Привязка к ip — адресу или cookie не работают так, как это требуется.
Заранее всем благодарен!
Код |
function resolve_mac_for_ip($ip) $found_mac = NULL; $f_in = fopen(«/proc/net/arp»,»r»); if ($f_in != NULL) fgets($f_in); while (!feof($f_in)) $t = fgets($f_in); if ($t != NULL) $str_split = preg_split («/[\s]+/», $t); if ($str_split[0]==$ip) $found_mac = $str_split[3]; break; >; >; >; fclose($f_in); >; return $found_mac; >; |
echo «Ваш IP=»,$_SERVER[«REMOTE_ADDR»],» и MAC=»,resolve_mac_for_ip($_SERVER[«REMOTE_ADDR»]);
это в линухе(указать правильный путь к arp). в выньде мона также использовать «arp»
Я делал бы так — написал бы службу, которая с нужной периодичностью выполняет «arp -a >c:\www\arp.txt», потом обрабатывал бы из php .