• September 15, 2018

    ตรวจสอบ 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 เป็นหลัก โดยถ้าเราใช้ [/b]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



เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories


Uncategorized