2011-10-15 14 views
8

Potrzebuję pobrać adres IP strony internetowej za pomocą php, czyli adresu IP serwera, na którym hostowana jest strona.pobierz stronę internetową ip używając php

Do tego użyłem gethostbyname('**example.com*'). Działa dobrze, gdy strona nie jest przekierowywana. na przykład jeśli użyłem tej funkcji, aby uzyskać google.com, podana jest "74.125.235.20".

Kiedy wypróbowałem to dla "lappusa.com", podaje "lappusa.com". Potem próbowałem tego w przeglądarce przekierowując na "http://lappusa.lappgroup.com/". Sprawdziłem kod statusu HTTP, który pokazuje 200.

Ale muszę uzyskać adres IP, nawet jeśli strona została przekierowana, tak jak lappusa.com jest przekierowywany na lappusa.lappgroup.com, a następnie muszę uzyskać adres IP przekierowanego adresu URL.

Jak powinienem to zdobyć? każda pomoc bardzo ceniona, dzięki !.

+0

Strona 'lappusa.com' nie jest przekierowywana. Po prostu nie istnieje. – hakre

Odpowiedz

11

Problem nie jest przekierowaniem HTTP (powyżej poziomu gethostbyname działa), ale to lappusa.com nie rozwiąże żadnego adresu IP i dlatego nie można go załadować w żadnej przeglądarce. To, co zrobiła twoja przeglądarka, automatycznie próbowało poprzedzać www..

Możesz odtworzyć to zachowanie w swoim kodzie. Należy również pamiętać, że wiele adresów IP (wersja 4 i 6) mogą być związane z jednej domeny:

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

Zadziałało. Próbowałem poprzedzić "www", aby uzyskać nazwę hosta, co daje taki sam efekt wyjściowy, jaki ma twoja funkcja. ale możesz wyjaśnić nieco więcej, proszę ... dodaj również tag zamykający do odpowiedzi ... Dzięki. – VKGS

+0

@Sekar Nie ma potrzeby zamykania znacznika php, jeśli nie ma już więcej treści w pliku (jeśli go zamkniesz, wielu redaktorów nalega na jeszcze jedną pustą linię, która zostanie wydrukowana przez php). ['get_dns_record'] (http://php.net/get_dns_record) pozwala nie tylko uzyskać adresy IPv4, ale także IPv6. Jeśli nie jesteś tym zainteresowany, możesz zastąpić funkcję 'getAddresses' funkcją [' gethostbynamel'] (http://php.net/gethostbynamel). – phihag

+1

ok, dziękuję za twoje wysiłki również za udzielenie funkcji gethostbynamel link.it było miłe. – VKGS

0

Czy próbowałeś wysłać HttpRequest do określonej strony, a następnie analizować nagłówki odpowiedzi? Nie jestem pewien, ale powinien zawierać pewne informacje o IP lub hoście ...

+0

tak, próbowałem curl, aby sprawdzić "lokalizacja" istnieje, czy nie czasami widzimy przekierowany adres URL, ponieważ ten adres URL nawet tej właściwości nie istnieje .. – VKGS

+0

teraz znalazłem curl nie łapie przekierowań javascript. więc w jaki sposób sprawdzić dany adres URL jest przekierowywany lub nie ... – VKGS

0

przekierowaniu użyciu tagu META w kodzie HTML. Aby to złapać, musisz przeanalizować rzeczywisty kod źródłowy.

Powiązane problemy