Php - Определение Ip

Discussion in 'PHP' started by OdaN, 17 Mar 2008.

  1. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    Может кто-нибудь подсказать, реально ли через Php`овый скрипт определить серый Ip пользователя, сидяшего через Nat?

    $_server["remote_addr"] и
    $_server["http_x_forwarded_for"]

    Несколько не то...
     
  2. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    нельзя )
    Если конечно лишний заголовок не прилепляется )
     
  3. imajo.ati

    imajo.ati Banned

    Joined:
    21 Feb 2008
    Messages:
    232
    Likes Received:
    62
    Reputations:
    8
    только через java и подобные языки
     
  4. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Да, другим словом, через скрипты\аплеты , выполняющиеся на стороне пользователя...(java, flash и т.д)
     
  5. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    Спасибо... Буду ковырять Java...
     
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Попробуй так:


    if (isSet($_SERVER))
    {
    if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"]))
    {
    $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    }
    elseif (isSet($_SERVER["HTTP_CLIENT_IP"]))
    {
    $realip = $_SERVER["HTTP_CLIENT_IP"];
    }
    else
    {
    $realip = $_SERVER["REMOTE_ADDR"];
    }
    }
    else
    {
    if ( getenv( 'HTTP_X_FORWARDED_FOR' ) )
    {
    $realip = getenv( 'HTTP_X_FORWARDED_FOR' );
    }
    elseif ( getenv( 'HTTP_CLIENT_IP' ) )
    {
    $realip = getenv( 'HTTP_CLIENT_IP' );
    }
    else
    {
    $realip = getenv( 'REMOTE_ADDR' );
    }
    }
    $user_reg_id = $realip;
    $user_reg_host = gethostbyaddr($realip);
     
  7. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    только таким образом спокойно можно подделать айпи лишним заголовком ;)
     
  8. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    Pashkela, не, не помогло... Моя тут озадачился... Вот идет пакет от узверя, через маршрутизатор. Маршрутизатор его натит на серв. Серв отвечает, маршрутизатору приходит ответ. У маршрутизатора 254 клиента. Которому слать? А он ведь знает... Значит где-то в хедерах оно есть. Притом не в пакете, иначе серв-бы клал-бы на это содержимое, а именно в заголовках. Просто по логике его не может не быть, иначе обратный нат получается невозможным. Следовательно ежели он есть, его можно выцепить. Я слабо знаком с php и не уверен, могет ли он енто делать, но по логике должен. Но в любом случае, на серве это выцепить можно, и не обязательны скрипты, запускающиеся на стороне пользователя. Кстати джава под никсами будет безполезна, потомучто смертный пользователь, от которого запущен браузер просто не сможет посмотреть ip. Тупо не хватит прав... Гугления чет мне особо ничего не дали =( но моя продолжает упорно ковырять, ибо скрипт нужен...

    Можно и Пентагон взломать, тут дело в другом. Есть много деревянных пользователей, за которыми нужен учет...
     
    #8 OdaN, 19 Mar 2008
    Last edited: 19 Mar 2008
  9. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Попробуй
    Code:
    $_SERVER['HTTP_CLIENT_IP']
    Code:
    $_SERVER['HTTP_X_REAL_IP']
     
  10. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    Гм... странно эти переменные вообще не определились... php возвращает false...

    ======
    Мож конечно я че накосячил, повторюсь, с php работаю недавно...
    PHP:
    <?php
    $ip1 
    $_SERVER['HTTP_CLIENT_IP'];
    $ip2 $_SERVER['HTTP_X_REAL_IP'];
    if (!
    $ip1) echo 'f1';
    else
    echo 
    "$ip1";
    if (!
    $ip2) echo 'f2';
    else
    echo 
    "$ip2";
    ?>
    Вот енто выводит 'f1f2'...
     
    #10 OdaN, 19 Mar 2008
    Last edited: 19 Mar 2008
  11. Terray

    Terray New Member

    Joined:
    22 Mar 2008
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    4OdaN, Ты фигурные скобки забыл после if () и else ()
     
  12. ~X3RiX~

    ~X3RiX~ Banned

    Joined:
    14 Mar 2008
    Messages:
    22
    Likes Received:
    7
    Reputations:
    -5
    необязательно!
     
  13. Zedobat

    Zedobat Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    145
    Likes Received:
    34
    Reputations:
    10
    КЛиент открывает порт, подает запрос, сервер отвечает, клиент закрывает порт.
    Пока соединение не закрыто, клиент может спокойно принимать любые данные.
    Code:
    GET /cgi-bin/params.pl HTTP/1.1
    Host: old.antichat.ru
    Accept: */*
    Accept-Encoding: gzip
    Connection: keep-alive
    
    HTTP/1.x 200 OK
    Date: Sat, 22 Mar 2008 15:45:38 GMT
    Server: Power MOD by web4host.net
    Keep-Alive: timeout=15, max=297
    Connection: Keep-Alive
    Transfer-Encoding: chunked
    Content-Type: text/html; charset=windows-1251
    Content-Language: ru
    
    Как видишь в HTTP заголовке никаких данных о клиенте нету.
     
  14. OdaN

    OdaN Elder - Старейшина

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    Лан, с натом я более-менее разобрался, с серверной стороны енто не выцепить, или по крайней мере это вне моего разумения. Тогда возникает вопрос, сталкивался ктонить с подобными задачами, но если уже использовать скрипты на стороне пользователя? Javascript, или аплеты? или мож еще чегонить, с чем я не знаком? или мож хотя-бы есть ссылки на адекватные статьи?
     
  15. Bolshevik

    Bolshevik New Member

    Joined:
    1 Mar 2008
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Неправильное понимание принципов маршрутизации, серый адрес хранится где-то в памяти роутера, связаный с соединением с твоим сервером. Из вне его никак не узнать.

    Пробуем так(javascript):
    HTML:
    window . onerror = null;  
    hostaddress = hostname = "(unknown)"; 
    localhost = java . net . InetAddress . getLocalHost ();
    hostaddress = localhost . getHostAddress ();    
    hostname = localhost . getHostName ();
    А дальше асинхронный запрос к твоему сервером с оповещением серого адреса.
     
    #15 Bolshevik, 25 Mar 2008
    Last edited: 25 Mar 2008