मैं PHP में कनेक्टेड क्लाइंट का मैक और आईपी पता कैसे प्राप्त कर सकता हूं?


136

मुझे कनेक्ट क्लाइंट के मैक और आईपी पते को जानने की आवश्यकता है, मैं पीएचपी में यह कैसे कर सकता हूं?


क्या पता? ग्राहक जो जुड़ा हुआ है?
पलंतिर

1
सर्वर का पता या आगंतुक का?
KiNgMaR

13
आप किस उद्देश्य से मैक एड्रेस चाहते हैं? क्या आप जानते हैं कि इसे उपयोगकर्ता द्वारा बदला जा सकता है?
लोर्ने का मार्कीस

@ ईजेपी मेरे पास मैक पते के लिए उपयोग का मामला है। मैं उस डिवाइस के आधार पर विभिन्न जानकारी परोसना चाहता हूं जो वेब पेज का अनुरोध कर रही है। क्या पेज का अनुरोध करने वाले डिवाइस की अनूठी जानकारी प्राप्त करने का एक और तरीका है?
दांते

जवाबों:


186

सर्वर आईपी

आप सर्वर आईपी पते से प्राप्त कर सकते हैं $_SERVER['SERVER_ADDR']

सर्वर मैक पता

मैक पते के लिए, आप netstat -ieलिनक्स में या ipconfig /allविंडोज में आउटपुट पार्स कर सकते हैं ।

क्लाइंट IP पता

आप क्लाइंट आईपी से प्राप्त कर सकते हैं $_SERVER['REMOTE_ADDR']

ग्राहक मैक पते

क्लाइंट मैक पता आपको एक विशेष परिस्थिति में छोड़कर उपलब्ध नहीं होगा: यदि क्लाइंट सर्वर के समान ईथरनेट सेगमेंट पर है।

इसलिए, यदि आप किसी प्रकार का LAN आधारित सिस्टम बना रहे हैं और आपके क्लाइंट एक ही ईथरनेट सेगमेंट पर हैं, तो आप arp -n(linux) या arp -a(विंडोज़) के आउटपुट को पार्स करके 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];
   }
}

लेकिन क्या होगा अगर ग्राहक एक लैन पर नहीं है?

खैर, आप भाग्य से बाहर हैं जब तक कि आपके पास ग्राहक स्वयंसेवक नहीं हो सकता है जो जानकारी और अन्य माध्यमों से प्रसारित कर सकता है।


2
Php के उपयोग से arp -a का आउटपुट कैसे प्राप्त करें ??
नेवने

1
@paulDixon हैलो यह एक पुराना पोस्ट है, और मुझे आश्चर्य है कि मैक एड्रेस प्राप्त करने का एक नया तरीका है?
jcho360

@ jcho360 किसी क्लाइंट का मैक एड्रेस प्राप्त करना अभी भी संभव नहीं है। मुझे यह देखने की उम्मीद नहीं है कि यह वैसे भी होगा क्योंकि मैक पते का कोई संचार मूल्य नहीं है और इसलिए इसे हेतू अनुरोध हेडर में संरक्षित नहीं किया जाएगा।
बेयरवुल्फ

@Bearwulf उत्तर वापस लेने के लिए बहुत बहुत धन्यवाद, यही मैंने सोचा था, क्या किसी साइट से जुड़े अद्वितीय कंप्यूटरों की पहचान करने का कोई तरीका है?
jcho360

6
@ jcho360 व्यक्तिगत रूप से मैं आईपी पते + जानकारी के संयोजन का उपयोग करूंगा और इसका एक हैश बनाउंगा, उदाहरण के लिए md5 ($ _ SERVER ['REMOTE_ADDR']। $ _SERVER ['HTTP_US__AGENT'];); यह निश्चित रूप से बुलेटप्रूफ नहीं है, लेकिन इसकी शुरुआत है। एक और अधिक आसान और सुरक्षित तरीका एक अद्वितीय हैश के साथ कुकी स्थापित करना है। उस कुकी का उपयोग करते समय हर बार आप सुनिश्चित होते हैं कि कौन सा उपयोगकर्ता आपकी वेबसाइट से जुड़ रहा है।
बेयरवुल्फ

24

क्लाइंट (सर्वर जो HTTP रिक्वेस्ट जारी करता है) के मैक एड्रेस को क्लाइंट और सर्वर के बीच हर राउटर द्वारा ओवरराइट किया जाता है।

क्लाइंट आईपी को स्क्रिप्ट में आसानी से प्रदान किया जाता है $_SERVER['REMOTE_ADDR']। कुछ स्थितियों में, विशेष रूप से अगर अपने वेब सर्वर एक प्रॉक्सी (यानी एक कैशिंग प्रॉक्सी) के पीछे है $_SERVER['REMOTE ADDR']के आईपी वापस आ जाएगी प्रॉक्सी , और एक अतिरिक्त मूल्य, अक्सर नहीं होगा $_SERVER['HTTP_X_FORWARDED_FOR'], कि मूल अनुरोध क्लाइंट का IP शामिल हैं।

कभी-कभी, विशेष रूप से जब आप एक अनाम प्रॉक्सी के साथ काम कर रहे होते हैं जिसे आप नियंत्रित नहीं करते हैं, तो प्रॉक्सी असली आईपी पते को वापस नहीं करेगा, और आप सभी के लिए उम्मीद कर सकते हैं कि यह प्रॉक्सी का आईपी पता है।


9

मुझे नहीं लगता कि आप PHP में मैक एड्रेस प्राप्त कर सकते हैं, लेकिन आप $_SERVER['REMOTE_ADDR']वेरिएबल से आईपी प्राप्त कर सकते हैं ।


आप मैक एड्रेस प्राप्त कर सकते हैं, मुझे लगता है :)
जितेश सोजित्रा

मैक एड्रेस केवल स्थानीय नेटवर्क के लिए दिखाई देता है, आप अपने स्थानीय नेटवर्क से किसी भी डिवाइस के मैक पते तक पहुंच सकते हैं, उदाहरण के लिए आपका मैक एड्रेस आपके स्थानीय वाईफाई राउटर में संग्रहीत और दिखाई देगा, और इसके बाहर, आपके नेटवर्क में सभी डिवाइस होंगे उपयोग किया जा रहा है और एक ही आईपी पते के साथ संचार किया जाएगा, जो राउटर मैक पते पर वापस अनुवाद करेगा और इसे आंतरिक रूप से भेज देगा।
धीरज थेडिजे

7

विंडोज़ सर्वर के लिए मुझे लगता है कि आप इसका उपयोग कर सकते हैं:

<?php
echo exec('getmac');
?>

2
<; php इको एक्ज़ीक्यूट ('गेटमैक'); ;> यह केवल LAN पर काम करता है, लेकिन यह सभी मैक एड्रेस को दिखाता है <php सिस्टम ('getmac'); ?>
जियोर्गी गोगिटिड्ज़

और windows10 भी। इसके अलावा, आपको execकेवल `प्रतिध्वनिgetmac
SaidbakR

6

तुम सब करने की ज़रूरत है अलग समूह में 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*

और क्योंकि अपाचे उपयोगकर्ता www-data के तहत चलने वाला एक डेमॉन है, अब यह इस कमांड को निष्पादित करने में सक्षम है।

तो अगर आप अब PHP स्क्रिप्ट का उपयोग करते हैं, जैसे:

<?php
$mac = system('arp -an');
echo $mac;
?>

आपको linux arp -anकमांड का आउटपुट मिलेगा ।


6
यह आपको केवल आपके स्थानीय नेटवर्क पर उपकरणों के मैक पते देगा।
डस्कवफ-एक्टिव-

1
arpबाइनरी के समूह को बदलना बेमानी है, फिर www-dataभी otherumode से अनुमतियों को निष्पादित करता है।
डेढ़ ०२३

2

इस वर्ग का उपयोग करें (https://github.com/BlakeGardner/php-mac-address)

यह यूनिक्स, लिनक्स और मैक ओएस एक्स ऑपरेटिंग सिस्टम के शीर्ष पर मैक एड्रेस हेरफेर के लिए एक PHP वर्ग है। यह मुख्य रूप से वायरलेस सुरक्षा ऑडिट के लिए स्पूफिंग में मदद करने के लिए लिखा गया था।


1

विंडोज़ में, यदि उपयोगकर्ता आपकी स्क्रिप्ट का स्थानीय रूप से उपयोग कर रहा है, तो यह बहुत सरल होगा:

<?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); 
?>

0

आप अपनी समस्या को हल करने के लिए निम्नलिखित समाधान का उपयोग कर सकते हैं:

$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;

0

हम इस तरीके से php में उबंटू में MAC एड्रेस प्राप्त कर सकते हैं

$ipconfig =   shell_exec ("ifconfig -a | grep -Po 'HWaddr \K.*$'");  
    // display mac address   
 echo $ipconfig;

0

मैक का उपयोग करके मैक एड्रेस प्राप्त करना: (Ubuntu 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"
}

0

शायद इंटरनेट पर क्लाइंट की मशीन को सत्यापित करने के लिए मैक एड्रेस प्राप्त करना सबसे अच्छा तरीका नहीं है। इसके बजाय टोकन का उपयोग करने पर विचार करें जो क्लाइंट के ब्राउज़र में एक व्यवस्थापक लॉगिन द्वारा संग्रहीत है।

इसलिए क्लाइंट के पास केवल यह टोकन हो सकता है यदि व्यवस्थापक इसे अपने ब्राउज़र के माध्यम से देता है। यदि टोकन मौजूद या मान्य नहीं है, तो क्लाइंट की मशीन अमान्य है।


-1

आप इस कोड का उपयोग करके मैक एड्रेस या भौतिक पता प्राप्त कर सकते हैं

$d = explode('Physical Address. . . . . . . . .',shell_exec ("ipconfig/all"));  
$d1 = explode(':',$d[1]);  
$d2 = explode(' ',$d1[1]);  
return $d2[1];

मैंने कई बार विस्फोट किया क्योंकि शेल_एक्स्ट ("ipconfig / all") सभी नेटवर्क का पूरा विवरण देता है। इसलिए आपको एक-एक करके अलग होना होगा। जब आप इस कोड को चलाते हैं तो आपको
अपना MAC पता 00 - ## - ## - CV-12 // मिलेगा यह केवल शो के लिए नकली पता है।


-2
// 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कि विंडोज सिस्टम कमांड है।


5
यदि यह उत्तर आपको कुछ भी सिखाता है, तो यह उम्मीद करता है कि आप कोड / पेस्ट कोड को नहीं समझेंगे। यह वह नहीं करता है जो ओपी ने पूछा था।
ट्रिपलए

-2

iptables का उपयोग करके लिनक्स के तहत आप मैक एड्रेस और आईपी के साथ वेब सर्वर के लिए प्रत्येक अनुरोध पर एक फ़ाइल में लॉग इन कर सकते हैं। IP पते के साथ php लुकअप अंतिम आइटम और मैक एड्रेस प्राप्त करें।

जैसा कि कहा गया है कि मैक एड्रेस ट्रेस पर अंतिम राउटर से है।


-4

आप इसे आसानी से ओपन डब्ल्यूआरटी का उपयोग करके कर सकते हैं। यदि आप एक कैप्टिव पोर्टल का उपयोग करते हैं, तो आप php और openWRT को मिला सकते हैं और आईपी और मैक के बीच संबंध बना सकते हैं।

आप एक सरल PHP कोड का उपयोग कर लिख सकते हैं:

 $localIP = getHostByName(getHostName()); 

बाद में, OpenWRT का उपयोग करके आप जा सकते हैं /tmp/dhcp.leases, आपको फॉर्म के साथ कुछ मिलेगा:

 e4:a7:a0:29:xx:xx 10.239.3.XXX DESKTOP-XXX 

वहां, आपके पास मैक, आईपी एड्रेस और होस्टनाम है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.