ตรวจสอบ IP Address และ Hostname

ตรวจสอบ IP Address และ Hostname

ตรวจสอบ IP Address และ Hostname
ในบางครั้งเราต้องการตรวจสอบว่าผู้ที่เข้ามาเยี่ยมชมเว็บไซต์ของเราหรือผู้ที่มาโพสข้อความในเวบบอร์ดของเรานั้นมาจากที่ใด ซึ่งวิธีการที่ง่ายและเป็นที่นิยมใช้กันก็คือการตรวจสอบ IP Address ของเครื่องผู้ชมที่เปิดดูเว็บไซต์ของเรานั่นเอง โดยหลักการในการตรวจสอบ IP Address นี้ทำได้โดยการตรวจจาก Predefined Variable ของเว็บเซิร์ฟเวอร์ที่เราใช้งานอยู่ ซึ่ง Predefined Variable นี้จะเป็นตัวแปรที่สร้างขึ้นมาโดยอัติโนมัติทุกครั้งที่มีการรันสคริปของPHP

Predefine Variable ที่เก็บค่า IP Address ของผู้ใช้ไว้ก็คือ REMOTE_ADDR ดังนั้นเมื่อเราต้องการตรวจสอบค่า IP Address ของผู้ใข้ เราจะใช้ฟังก์ชัน getenv ในการดึงเอาค่าของ Predefined Variable นี้มาเก็บไว้ในตัวแปร $ip ดังนี้

<?
    $ip=getenv(REMOTE_ADDR);
    print  "Your IP Address is $ip";
?>

ผลลัพธ์ที่ได้คือ

Your IP Address is 127.0.0.1

จะเห็นได้ว่าโปรแกรมนี้สามารถตรวจสอบ IP Address ของผู้ใช้ได้ในระดับหนึ่ง แต่จะมีปัญหาในกรณีที่เครื่องผู้ใช้ได้ทำการปรับแต่งเครื่องให้ใช้ Proxy Server ซึ่งแทนที่เราจะได้ IP Address ของเครื่องผู้ใช้ เราก็จะได้รับ IP Address ของ Proxy Server แทน หรือในบางกรณีเราอาจจะได้ IP Address ของ Cache Server ของ ISP ที่ผู้ใช้ได้ใช้บริการอยู่ ดังนั้น ในกรณีที่เกิดเหตุการณ์นี้ตัวแปร REMOTE_ADDR จะไม่ได้เก็บ IP Address ที่แท้จริงของเครื่องผู้ใช้แต่จะเก็บ IP Address ของ Proxy Server หรือ Cache Server และจะเกิดตัวแปร HTTP_X_FORWARDED_FOR ขึ้นมา ซึ่งจะเป็นตัวแปรที่เก็บ IP Address ที่แท้จริงของเครื่องผู้ใช้แทน ดังนั้นเราจะทำการแก้โปรแกรมข้างต้นของเราเพื่อให้เก็บ IP Address ได้อย่างถูกต้อง ดังนี้

<?php
    if (getenv(HTTP_X_FORWARDED_FOR))
        $ip=getenv(HTTP_X_FORWARDED_FOR);
    else
        $ip=getenv(REMOTE_ADDR);

    print "Your IP Address is $ip";
?>


ในโปรแกรมของเรานั้นเริ่มต้น เราจะทำการเช็คดูก่อนว่าตัวแปร HTTP_X_FORWARDED_FOR นั้นมีการเซ็ตไว้หรือเปล่า ถ้ามีการเซ็ตไว้แสดงว่ามีการใช้ Proxy Server หรือ Cache Server ดังนั้นตัวแปร HTTP_X_FORWARDED_FOR ก็จะเก็บ IP Address ที่แท้จริงไว้ ดังนั้นเราก็จะใช้ค่าจากตัวแปรนี้ แต่ถ้าไม่มีการเซ็ตตัวแปรนี้ไว้ เราก็จะเก็บค่า IP Address จากตัวแปร REMOTE_ADDR ตามปกติ

สำหรับชื่อของ Predefined Variable ที่เราใช้ในที่นี้คือ REMOTE_ADDR และ HTTP_X_FORWARDED_FOR อาจจะมีชื่อที่แตกต่างกันไปได้ ขึ้นอยู่กับว่าเราใช้เว็บเซิร์ฟเวอร์อะไร โดยในที่นี้เราจะอ้างอิงจาก Apache Webserver เป็นหลัก โดยถ้าเราใช้ Web Server อื่นนอกจาก Apache และต้องการตรวจสอบว่ามี Predefined Variable อะไรบ้างก็สามารถตรวจสอบได้ โดยใช้ฟังก์ชัน phpinfo() เพื่อตรวจสอบดังนี้

<?
    phpinfo();
?>


โดยฟังก์ชันนี้จะแสดงตัวแปรที่เป็น Predefined Variable ทั้งหมดออกมา

ลำดับต่อไปเมื่อเราได้หมายเลข IP Address มาแล้ว เช่น 203.151.206.76 แล้วเราจะรู้ได้อย่างไรว่า IP Address หมายเลขนี้นี้มีชื่อโฮสต์ว่าอะไร หรือว่าบางท่านอยากจะทราบว่าเวบไซต์ http://www.cnn.com เนี่ย มีหมายเลข IP เป็นอะไร ซึ่ง PHP นั้นก็มีฟังก์ชันที่ช่วยอำนวยความสะดวกให้กับผู้ใช้ในการตรวจสอบหมายเลข IP Address จากชื่อโอสต์หรือแม้กระทั่งตรวจสอบชื่อโอสต์จากหมายเลข IP Address ที่กำหนดมาให้

ในการตรวจสอบชื่อโฮสต์จาก IP Address ที่กำหนดให้ เราจะใช้ฟังก์ชัน gethostbyaddr() ซึ่งฟังก์ชันนี้จะรับ IP Address เป็นพารามิเตอร์และจะ return ชื่อโฮสต์กลับมา แต่ถ้าไม่สามารถตรวจสอบชื่อโฮสต์ได้ก็จะ return ค่า IP Address นั้นกลับมาคืน ตัวอย่างการใช้งานมีดังนี้

<?
    $ip = "203.151.206.76";
    $host = gethostbyaddr($ip);
    print "Host name for $ip is $host";
?>

ผลลัพธ์ที่ได้ คือ

Host name for 203.151.206.76 is host76.pantip.com


ในการตรวจสอบ IP Address จากชื่อโฮสต์ที่กำหนดให้ เราจะใช้ฟังก์ชัน gethostbyname() ซึ่งฟังก์ชันนี้จะรับชื่อโฮสต์ เป็นพารามิเตอร์และจะ return IP Address กลับมา แต่ถ้าไม่สามารถตรวจสอบ IP Address ได้ก็จะ return ชื่อโฮสต์นั้นกลับมาคืน ตัวอย่างการใช้งานมีดังนี้

Code:
<?
    $host = "www.yahoo.com";
$ip = gethostbyname($host);
    print "IP Address for  $host is $ip";
?>

ผลลัพธ์ที่ได้ คือ

Code:
IP Address for www.yahoo.com is 66.218.71.95


บางโฮสต์อาจจะมี IP Address ที่อ้างถึงมากกว่านี้ ดังนั้นวิธีการตรวจสอบว่าโอสต์นี้มี IP Address ทั้งหมดเท่าไหร่นั้น เราจะใช้ฟังก์ชัน gethostbynamel() มาช่วยแทน โดยฟังก์ชันนี้จะทำการเก็บ IP Address ที่มีทั้งหมดไว้ใน array ซึ่งตัวอย่างการใช้งานมีดังนี้


Code:
<?
    $host="www.microsoft.com";
    $ip = gethostbynamel($host);
    for ($i=0; $i<count($ip); $i++)
    {
        print $ip<$i>."<BR>";
    }
?>

ผลลัพธ์ที่ได้คือ

207.46.249.27
207.46.134.190
207.46.249.190
207.46.134.155
207.46.249.222


ID=1307,MSG=1463


⭐️ เราให้คำแนะนำปรึกษา รักษาผลประโยชน์ให้ลูกค้า ของเรา
⭐️ เราอยู่เคียงข้างลูกค้าของเรา ช่วยเหลือ ดูแลบริการ
⭐️ เรารองรับช่องทางติดต่อมากมาย สะดวก เข้าถึงง่าย
⭐️ เราดำเนินธุรกิจยาวนานกว่า20 ปี คุณจึงมั่นใจได้
⭐️ คุณมีสามารถรับบริการทั้งจากบริษัทประกันเจ้าของสินค้า และ เรา (ตัวกลาง)

ไทย มีราว 80 บริษัทประกันภัย สินค้าที่แตกต่าง ทั้ง เงื่อนไข ราคา เคลม ความมั่นคง นโยบาย ฯลฯ
ขายผ่านตัวกลาง กว่า 500,000 ราย : ตัวแทน นายหน้า ธนาคาร บิ๊กซี โลตัส ค่ายรถยนต์ เฮ้าส์แบรนด์ ของประกันภัย หรือ ซื้อตรงกับบริษัทเจ้าของสินค้า
⭐️ ตัวอย่าง การบริการ กดดูที่ลิงค์นี้

"สิ่งที่ต้องคำนึงอันดับแรกในการซื้อประกัน คือ ตัวกลางประกันภัย ซึ่งจะเป็นที่ปรึกษา ช่วยเหลือ ดูแลเรา ตลอดอายุกรมธรรม์"

โปรดรอ

display:inline-block; position:relative;
โทร.(จ-ศ : 9-16) เว้นวันหยุดฯ , ลูกค้าเรา บริการ 24/7/365 , Thursday เวลา 03:23:10pm ซื้อประกัน 085-911-3737
Copyright © 2018 Cymiz.com., All rights reserved.นโยบาย,ข้อตกลงcymiz.com