Просмотр полной версии : Информер на Php
Здравствуйте!
Решил написать информер на PHP.
В итоге скрипт должен уметь:
1) Определять IP
2) Определять страну
3) Определять OS и браузер
4) Всё должно выводиться в графическом виде
5) Информер должен быть распростроняемым чтобы можно было сделать на него ссылку вида: host.ru/informer.png
Я столкнулся с некоторыми трудностями:
1) не знаю как определить страну
2) Не знаю как определить OS
3) как сделать его распространяемым
Если у кого есть готовые выложите плз!
За дельные советы с меня +
http://lib.protoplex.ru/lib_show/251.html
Тут какая-то инфа)
Хочу получить что-то в этом роде
http://2ip.ru/sbar/
http://2ip.ru/bar/
1) не знаю как определить страну
2) Не знаю как определить OS
3) как сделать его распространяемым
1. geoip.dat (можешь взять из любого сплойт пака)
2. парсить $HTTP_USER_AGENT
3. изменить .htaccess, чтобы .png обрабатывалось как php, если ты об этом
насчёт пункта "3" выход только такой? Я правильно понял?
А насчёт $http_user_agent можо поподробнее
Alekzzzander
13.01.2008, 15:42
если я не ошибаюсь http://forum.antichat.ru/thread20996.html это то что тебе нужно
Как напишеш етот скрипт плиз мне дай, скинь его в тему :)
.:EnoT:.
14.01.2008, 01:47
Не нашёл я в той статье определения ОС, может и просмотрел но всё же вот один из способов:
<?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 или НТ. Других кодов я не знаю, но это можно определить опытным путём или погуглив.
А ещё почему-то никто не вспомнил про:
$os = htmlspecialchars(getenv("OS"));
echo "$os";
Но она как и браузер показывает семейство ОС а не конкретно твою. Т.е 2000 и ХР относятся к семейству NT, поэтому будет показываться Windows_NT...
<?
/*
Файл : 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
если ошибаюсь поправьте но вроде так тоже возможно
$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;
}
И чего вы юзаете $http_user_agent, а не $_server['http_user_agent']? И не забываейте, что юзер-агента можно подделать
Alekzzzander
14.01.2008, 13:10
если хорошо постараться то можно подделать всё)))
Вот написал:
http://www.ssb1981.sid.su/Files/download.php?file=0
Информер показывает: IP, Браузер, Windows
Информер распространяемый!
Было задумано 5 пунктов, из которых 4 осуществлены.
Пример:
http://www.ssb1981.sid.su/temp/default.png
Это все уже есть в паблике...
Не видел скрипта определения города(!)
Isis, скрипт маднета определяет - http://madnet.name/tools/userinfo/
Определение города заработает в ближайшеее время, причём если пользователь из России то будет отображаться город, край и регион.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot