PHP 擷取內網使用者MAC地址(WINDOWS/linux)解決方案

來源:互聯網
上載者:User

簡介:這是PHP 擷取內網使用者MAC地址(WINDOWS/linux)解決方案的詳細頁面,介紹了和php,有關的知識、技巧、經驗,和一些php源碼等。

class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=343814' scrolling='no'>

做一個內網根據MAC地址自動登入的應用,在WINDOW 2003可以正常使用,函數如下

function ce_getmac(){    if(PHP_OS == 'WINNT')    {        $return_array = array();    $temp_array = array();    $mac_addr = "";    @exec("arp -a",$return_array);     foreach($return_array as $value)    {    if(strpos($value,$_SERVER["HTTP_CLIENT_IP"]) !== false &&    preg_match("/(:?[0-9a-f]{2}[:-]){5}[0-9a-f]{2}/i",$value,$temp_array))    {    $mac_addr = $temp_array[0];    break;    }    }   return $mac_addr ? strtoupper($mac_addr) : '';}else if(PHP_OS == 'Linux'){    return true;}}

函數已經修改過了,到LINUX上發現不能使用EXEC函數,也就是擷取不到MAC地址了。經過溝通,該項目必須部署在LINUX伺服器下,筆者經過苦思冥想了半天終於找到了一個解決方案,不用執行EXEC也可以擷取到內網使用者的MAC地址。

在內網伺服器中,有一台192.168.1.151的伺服器,伺服器上一個API,訪問這個API,就擷取使用者MAC,JOSN的方式輸出使用者帳號資訊,因為該伺服器可以擷取MAC,就可以稍加利用了。

使用CURL偽造來源IP方式(IP不是LINUX伺服器的IP,是用戶端訪問的IP地址),CURL到151伺服器,伺服器得到相應,根據使用者IP地址 和ARP -A 參數的正則方式就可以得到用戶端的MAC地址,程式運行在151,而151是WINDOWS 2008伺服器。但是要注意的是不能使用REMOTE_ADDR,必須使用HTTP_CLIENT_IP。 原因是HTTP_CLIENT_IP可以使用CURL偽造,這樣就可以使用LINUX擷取使用者IP,然後傳送給151處理。

疑問:根據使用者IP擷取MAC地址,那使用者換一個IP了怎麼辦呢?使用CMD下 ARP -A分析,即使使用者跟換IP,但是對應該使用者的這台電腦的MAC地址預設是不會更換的。

下面是摘抄網友的關於擷取IP的文章:

dz的代碼判斷IP那塊太讓人頭疼了,日,REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR三個東西在手冊上太不詳細了,基本上就等於沒有。
網上gg了一下,找到一點,另外,有一個思路太巧了,用JS取IP以後POST到伺服器,Y的用代理騙伺服器?有種上網先把Js給關了啊!!哦哈哈,以後有機會用ajax試一下,也省得用這三個變數if得死去活來了。

$_SERVER['...']; // for php

一、沒有使用Proxy 伺服器的情況:

      REMOTE_ADDR = 您的 IP
      HTTP_VIA = 沒數值或不顯示
      HTTP_X_FORWARDED_FOR = 沒數值或不顯示

二、使用透明Proxy 伺服器的情況:Transparent Proxies

      REMOTE_ADDR = 最後一個Proxy 伺服器 IP
      HTTP_VIA = Proxy 伺服器 IP
      HTTP_X_FORWARDED_FOR = 您的真實 IP ,經過多個Proxy 伺服器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   這類Proxy 伺服器還是將您的資訊轉寄給您的訪問對象,無法達到隱藏真實身份的目的。

三、使用普通匿名Proxy 伺服器的情況:Anonymous Proxies

      REMOTE_ADDR = 最後一個Proxy 伺服器 IP
      HTTP_VIA = Proxy 伺服器 IP
      HTTP_X_FORWARDED_FOR = Proxy 伺服器 IP ,經過多個Proxy 伺服器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   隱藏了您的真實IP,但是向訪問對象透露了您是使用Proxy 伺服器訪問他們的。

四、使用欺騙性Proxy 伺服器的情況:Distorting Proxies

      REMOTE_ADDR = Proxy 伺服器 IP
      HTTP_VIA = Proxy 伺服器 IP
      HTTP_X_FORWARDED_FOR = 隨機的 IP ,經過多個Proxy 伺服器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   告訴了訪問對象您使用了Proxy 伺服器,但編造了一個虛假的隨機IP代替您的真實IP欺騙它。

五、使用高匿名Proxy 伺服器的情況:High Anonymity Proxies (Elite proxies)

      REMOTE_ADDR = Proxy 伺服器 IP
      HTTP_VIA = 沒數值或不顯示
      HTTP_X_FORWARDED_FOR = 沒數值或不顯示 ,經過多個Proxy 伺服器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   完全用Proxy 伺服器的資訊替代了您的所有資訊,就象您就是完全使用那台Proxy 伺服器直接存取對象。

REMOTE_ADDR 是你的用戶端跟你的伺服器“握手”時候的IP。如果使用了“匿名代理”,REMOTE_ADDR將顯示Proxy 伺服器的IP。
HTTP_CLIENT_IP 是Proxy 伺服器發送的HTTP頭。如果是“超級匿名代理”,則返回none值。同樣,REMOTE_ADDR也會被替換為這個Proxy 伺服器的IP。
$_SERVER['REMOTE_ADDR']; //訪問端(有可能是使用者,有可能是代理的)IP
$_SERVER['HTTP_CLIENT_IP'];   //代理端的(有可能存在,可偽造)
$_SERVER['HTTP_X_FORWARDED_FOR']; //使用者是在哪個IP使用的代理(有可能存在,也可以偽造)

愛J2EE關注Java邁克爾傑克遜視頻站JSON線上工具

http://biancheng.dnbcw.info/php/343814.html pageNo:5

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.