2011-10-15 67 views
8

Tôi cần tìm nạp địa chỉ IP trang web đã cho bằng cách sử dụng php, đó là địa chỉ ip của máy chủ mà trang web được lưu trữ trên máy chủ.lấy trang web ip bằng cách sử dụng php

Vì điều đó tôi đã sử dụng gethostbyname('**example.com*'). Nó hoạt động tốt khi trang web không được chuyển hướng. ví dụ: nếu tôi đã sử dụng chức năng này để nhận được google.com, nó sẽ cung cấp "74.125.235.20".

Khi tôi đã thử nó cho "lappusa.com", nó cung cấp cho "lappusa.com". Sau đó, tôi đã cố gắng này trong trình duyệt nó được chuyển hướng đến "http://lappusa.lappgroup.com/". Tôi đã kiểm tra mã trạng thái http hiển thị 200.

Nhưng tôi cần phải nhận địa chỉ IP ngay cả khi trang web được chuyển hướng, như lappusa.com được chuyển hướng đến lappusa.lappgroup.com thì tôi cần nhận ip cho url được chuyển hướng.

Tôi nên làm như thế nào? giúp đỡ rất nhiều đánh giá cao, Cảm ơn !.

+0

Trang web 'lappusa.com' không được chuyển hướng. Tôi chỉ không tồn tại. – hakre

Trả lời

11

Sự cố không phải là chuyển hướng HTTP (cao hơn mức gethostbyname hoạt động), nhưng lappusa.com không giải quyết cho bất kỳ địa chỉ IP nào và do đó không thể tải trong bất kỳ trình duyệt nào. Những gì trình duyệt của bạn đã làm được tự động thử thêm www..

Bạn có thể tạo lại hành vi đó trong mã của mình. Cũng xin lưu ý rằng nhiều IP (phiên bản 4 và 6) có thể được liên kết với một tên miền:

<?php 
function getAddresses($domain) { 
    $records = dns_get_record($domain); 
    $res = array(); 
    foreach ($records as $r) { 
    if ($r['host'] != $domain) continue; // glue entry 
    if (!isset($r['type'])) continue; // DNSSec 

    if ($r['type'] == 'A') $res[] = $r['ip']; 
    if ($r['type'] == 'AAAA') $res[] = $r['ipv6']; 
    } 
    return $res; 
} 

function getAddresses_www($domain) { 
    $res = getAddresses($domain); 
    if (count($res) == 0) { 
    $res = getAddresses('www.' . $domain); 
    } 
    return $res; 
} 

print_r(getAddresses_www('lappusa.com')); 
/* outputs Array (
    [0] => 66.11.155.215 
) */ 
print_r(getAddresses_www('example.net')); 
/* outputs Array (
    [0] => 192.0.43.10 
    [1] => 2001:500:88:200::10 
) */ 
+0

Nó hoạt động. tôi đã thử prepending "www" để gethostbyname nó kết quả đầu ra tương tự mà chức năng của bạn không. nhưng có thể giải thích thêm một chút xin vui lòng .. cũng thêm đóng thẻ php để bạn trả lời ... Cảm ơn. – VKGS

+0

@Sekar Bạn không cần phải đóng thẻ php nếu không có thêm nội dung trong tệp (Nếu bạn đóng nó, nhiều người chỉnh sửa sẽ nhấn mạnh vào một dòng trống hơn, sẽ được xuất bởi php). ['get_dns_record'] (http://php.net/get_dns_record) cho phép bạn không chỉ nhận địa chỉ IPv4, mà còn cả địa chỉ IPv4. Nếu bạn không quan tâm đến điều đó, bạn có thể thay thế hàm 'getAddresses' bằng [' gethostbynamel'] (http://php.net/gethostbynamel). – phihag

+1

ok, cảm ơn những nỗ lực của bạn cũng cho việc liên kết chức năng gethostbynamel. – VKGS

0

Bạn đã thử gửi HttpRequest đến trang nhất định rồi phân tích cú pháp tiêu đề phản hồi chưa? Tôi không chắc chắn, nhưng nó phải chứa một số thông tin IP hoặc máy chủ ...

+0

vâng, tôi đã thử cuộn tròn để kiểm tra "vị trí" tồn tại hay không đôi khi chúng tôi thấy url được chuyển hướng, cho url này ngay cả thuộc tính đó không tồn tại .. – VKGS

+0

bây giờ tôi thấy curl couln't bắt chuyển hướng javascript. vậy làm cách nào để kiểm tra url đã cho có được chuyển hướng hay không ... – VKGS

0

Chúng chuyển hướng bằng cách sử dụng thẻ META trong nguồn HTML. Bạn sẽ cần phải phân tích cú pháp mã nguồn thực tế để nắm bắt điều này.

Các vấn đề liên quan