Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Информер на Php (https://forum.antichat.xyz/showthread.php?t=58452)

SSB1981 13.01.2008 14:24

Информер на Php
 
Здравствуйте!

Решил написать информер на PHP.
В итоге скрипт должен уметь:
1) Определять IP
2) Определять страну
3) Определять OS и браузер
4) Всё должно выводиться в графическом виде
5) Информер должен быть распростроняемым чтобы можно было сделать на него ссылку вида: host.ru/informer.png

Я столкнулся с некоторыми трудностями:
1) не знаю как определить страну
2) Не знаю как определить OS
3) как сделать его распространяемым

Если у кого есть готовые выложите плз!
За дельные советы с меня +

FeraS 13.01.2008 14:27

http://lib.protoplex.ru/lib_show/251.html
Тут какая-то инфа)

SSB1981 13.01.2008 14:32

Хочу получить что-то в этом роде
http://2ip.ru/sbar/
http://2ip.ru/bar/

Piflit 13.01.2008 15:08

Цитата:

1) не знаю как определить страну
2) Не знаю как определить OS
3) как сделать его распространяемым
1. geoip.dat (можешь взять из любого сплойт пака)
2. парсить $HTTP_USER_AGENT
3. изменить .htaccess, чтобы .png обрабатывалось как php, если ты об этом

SSB1981 13.01.2008 15:17

насчёт пункта "3" выход только такой? Я правильно понял?

А насчёт $http_user_agent можо поподробнее

Alekzzzander 13.01.2008 15:42

если я не ошибаюсь http://forum.antichat.ru/thread20996.html это то что тебе нужно

SSB1981 13.01.2008 15:47

СПАСИБО!
Читаю!

ZEXEL 13.01.2008 15:58

Как напишеш етот скрипт плиз мне дай, скинь его в тему :)

SSB1981 13.01.2008 16:46

ОК

.:EnoT:. 14.01.2008 01:47

Не нашёл я в той статье определения ОС, может и просмотрел но всё же вот один из способов:

PHP код:

<?php
$agent 
htmlspecialchars(getenv("HTTP_USER_AGENT"));
if (
strpos($agent"NT 5.1") == true
{echo
"Windows XP";}
elseif (
strpos($agent"NT 5.0") == true
{echo
"Windows 2000(NT)";}
else
{echo
"unknown";}
?>

То есть ищешь соответствие ОС в юзер агенте. 5.1 это ХРюша, 5.0 это 2000 или НТ. Других кодов я не знаю, но это можно определить опытным путём или погуглив.
А ещё почему-то никто не вспомнил про:
PHP код:

$os htmlspecialchars(getenv("OS"));  
echo 
"$os"

Но она как и браузер показывает семейство ОС а не конкретно твою. Т.е 2000 и ХР относятся к семейству NT, поэтому будет показываться Windows_NT...

Piflit 14.01.2008 02:03

PHP код:

<?

/*

Файл : sniffer.php

Назначение: Идентификация типа/версии браузера и платформы

Автор: В. Дж. Гилмор

Дата : 24 августа 2000 г.

*/

// Функция: browser_info

// Назначение: Возвращает тип и версию браузера

function browser_info ($agent) {

// Определить тип браузера

// Искать сигнатуру Internet Explorer

if (ereg('MSIE ([0-9].[0-9]{1,2})'$agent$version))

$browse_type "IE";

$browse version $version[1];

// Искать сигнатуру Opera

elseif (ereg'Opera ([0-9].[0-9]{1,2})'$agent$version)):

$browse_type "Opera":

$browse_version $version[1]:

// Искать сигнатуру Netscape. Проверка браузера Netscape

// *должна* выполняться после проверки Internet Explorer и Opera,

// поскольку все эти браузеры любят сообщать имя

// Mozilla вместе с настоящим именем.

elseif (ereg'Mozilla/([0-9].[0-9]{1,2})'$agent$version)) :

$browse_type "Netscape";

$browse_version $version[1];

// Если это не Internet Explorer, Opera или Netscape.

// значит, мы обнаружили неизвестный браузер,

else :

$browse_type "Unknown";

$browse_version "Unknown";

endif:

// Вернуть тип и версию браузера в виде массива

return array ($browse_type$browse_version);

// Конец функции browser_info

// Функция: opsys_info

// Назначение: Возвращает информацию об операционной системе пользователя

function opsys_info($agent) {

// Идентифицировать операционную систему

// Искать сигнатуру Windows

if ( strstr ($agent'win') ) :

$opsys "windows";

// Искать сигнатуру Linux

elseif ( strstr($agent'Linux') ) :

$opsys "Linux";

// Искать сигнатуру UNIX

elseif ( strstr (Sagent'Unix') ) :

$opsys "Unix";

// Искать сигнатуру Macintosh

elseif ( strstr ($agent'Mac') ) :

$opsys "Macintosh";

// Неизвестная платформа else :

$opsys "Unknown";

endif;

// Вернуть информацию об операционной системе

return $opsys;

// Конец функции opsys_info

// Сохранить возвращаемый массив в списке

list ($browse_type$browse_version) = browser_info ($HTTP_USER_AGENT); Soperating_sys opsysjnfo ($HTTP_USER_AGENT);

print 
"Browser Type: $browse_type <br>";

print 
"Browser Version: $browse_version <br>";

print 
"Operating System: $operating_sys <br>":

?>


Alekzzzander 14.01.2008 12:45

если ошибаюсь поправьте но вроде так тоже возможно
PHP код:

$user_agent $HTTP_USER_AGENT;

function 
detect_os()
{
global 
$user_agent;

        
    if     (
strstr($user_agent"Windows 95"))     $os "Windows 95";
    elseif (
strstr($user_agent"Windows NT 4"))   $os "Windows NT 4";
    elseif (
strstr($user_agent"Windows 98"))     $os "Windows 98";
    elseif (
strstr($user_agent"Win 9x 4.9"))     $os "Windows ME";
    elseif (
strstr($user_agent"Windows NT 5.0")) $os "Windows 2000";
    elseif (
strstr($user_agent"Windows NT 5.1")) $os "Windows XP";
    elseif (
strstr($user_agent"Windows NT 5.2")) $os "Windows 2003";
    elseif (
strstr($user_agent"Windows NT 6.0")) $os "Windows Vista";
    elseif (
strstr($user_agent"Linux"))          $os "Linux";
    elseif (
strstr($user_agent"Mac OS"))         $os "Mac OS";
    else                                           
$os "Other";
    
    return 
$os;
}


function 
detect_browser()
{
    global 
$user_agent;        
    if (
eregi("(opera) ([0-9]{1,2}.[0-9]{1,3}){0,1}"$user_agent$bv) or 
        
eregi("(opera/)([0-9]{1,2}.[0-9]{1,3}){0,1}"$user_agent$bv))
        {
            
$type    "Opera";
            
$browser "Opera" " " $bv[2];
        }
        elseif (
eregi("(konqueror)/([0-9]{1,2}.[0-9]{1,3})"$user_agent$bv))
        {
            
$type    "Konqueror";
            
$browser "Konqueror" " " $bv[2];
        }
        elseif (
eregi("(lynx)/([0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2})"$user_agent$bv))
        {
            
$type    "Lynx";
            
$browser "Lynx" " " $bv[2];
        }
        elseif (
eregi("(links) \\(([0-9]{1,2}.[0-9]{1,3})"$user_agent$bv))
        {
            
$type    "Links";
            
$browser "Links" " " $bv[2];
        }
        elseif (
eregi("(msie) ([0-9]{1,2}.[0-9]{1,3})"$user_agent$bv))
        {
            
$type    "Internet Explorer";
            
$browser "Internet Explorer" " " $bv[2];
        }
        elseif (
eregi("(netscape6)/(6.[0-9]{1,3})"$user_agent$bv))
        {
            
$type    "Netscape";
            
$browser "Netscape" " " $bv[2];
        }
        elseif (
eregi("(firefox)/([0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2})"$user_agent$bv) or
                
eregi("(firefox)/([0-9]{1,2}.[0-9]{1,2})"$user_agent$bv))
        {
            
$type    "Firefox";
            
$browser "Firefox" " " $bv[2];
        }        
        elseif (
eregi("(mozilla)/([0-9]{1,2}.[0-9]{1,3})"$user_agent$bv))
        {
            
$type    "Mozilla";
            
$browser "Mozilla" " " $bv[2];
        }
        else
        {
            
$type    "Other";
            
$browser "Other";
        }    
    
    return 
$browser;
}

function 
win_uni ($in) {
  
$in convert_cyr_string($in ,"w","i");
  
$out "";
  for (
$i=0$i strlen($in); $i++) {
    
$char ord($in[$i]);
    
$out .= ($char 175)?"&#".(1040+($char-176)).";":$in[$i];
  }
  return 
$out;



krypt3r 14.01.2008 12:56

И чего вы юзаете $http_user_agent, а не $_server['http_user_agent']? И не забываейте, что юзер-агента можно подделать

Alekzzzander 14.01.2008 13:10

если хорошо постараться то можно подделать всё)))

SSB1981 27.01.2008 15:23

Вот написал:
http://www.ssb1981.sid.su/Files/download.php?file=0
Информер показывает: IP, Браузер, Windows
Информер распространяемый!
Было задумано 5 пунктов, из которых 4 осуществлены.

Пример:

http://www.ssb1981.sid.su/temp/default.png

Isis 27.01.2008 15:27

Это все уже есть в паблике...
Не видел скрипта определения города(!)

NOmeR1 27.01.2008 15:45

Isis, скрипт маднета определяет - http://madnet.name/tools/userinfo/

SSB1981 27.01.2008 16:15

Определение города заработает в ближайшеее время, причём если пользователь из России то будет отображаться город, край и регион.


Время: 19:23