هذا الموضوع منقوول من منتديات الوافي التطويريه
وانا نقلته لانه فيه فائده عظمة خاصه لاصحاب المنتدي نشووف الشرح ....
السلام عليكم ورحمة الله وبركاته
عند تركيبك لمنتديات vbulletin واستخدامها ستجد ان الأيبي الذي يظهر في المشاركات لبعض الأعضاء غير صحيح والسبب هو أن تحديد منتديات الـ vbulletin يعتمد في الأساس على أيبي الجهه وليس الأيبي الحقيقي للعضو .
مثال على ذلك الأعضاء الموجودين بالسعوديه إذا قام بالدخول على منتدى معين سيجد المشرف بأن الأيبي للعضو الأتي من السعوديه هو أيبي بروكسي مدينة الملك عبدالعزيز وليس الأيبي الصحيح للعضو !! وعلى ذلك سيجد المشرف بأن أعضاء كثر من السعوديه دخلوا لمنتداه بنفس الأيبي وهو بروكسي مدينة الملك عبدالعزيز لأن عنوان البروكسي مشترك بين المتصفحين القادمين من السعوديه .
إذن هذه مشكله موجوده في منتديات الـ vbulletin لذلك قمت بالبحث في النسخه ووجدت طريقة تحديد الأيبي موجوده في ملف init.php وقمت بإعادة طريقة البرمجه بحيث يصبح تحديد الأيبي معتمداً على الأيبي الحقيقي وليس أيبي البروكسي .
// ################################################## ###########################
// establish client IP address
define('IPADDRESS', $_SERVER['REMOTE_ADDR']);
// check several settings for the ip; good for not grabbing proxy IPs, but can still be problematic
if ($_SERVER['HTTP_CLIENT_IP'])
{
define('ALT_IP', $_SERVER['HTTP_CLIENT_IP']);
}
else if ($_SERVER['HTTP_X_FORWARDED_FOR'] AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3 }#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches))
{
// make sure we dont pick up an internal IP defined by RFC1918
foreach ($matches[0] AS $ip)
{
if (!preg_match("#^(10|172\.16|192\.168)\.#", $ip))
{
define('ALT_IP', $ip);
break;
}
}
}
else if ($_SERVER['HTTP_FROM'])
{
define('ALT_IP', $_SERVER['HTTP_FROM']);
}
else
{
define('ALT_IP', $_SERVER['REMOTE_ADDR']);
}
3- قم باستبدالها بالأسطر التاليه :
كود:
// ################################################## ###########################
// establish client IP address
// check several settings for the ip; good for not grabbing proxy IPs, but can still be problematic
if ($_SERVER['HTTP_X_FORWARDED_FOR'] AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3 }#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches))
{
// make sure we dont pick up an internal IP defined by RFC1918
foreach ($matches[0] AS $ip)
{
if (!preg_match("#^(127|10|172\.16|192\.168)\.#", $ip))
{
define('IPADDRESS', $ip);
define('ALT_IP', $_SERVER['HTTP_CLIENT_IP']);
define('ALT_IP2', $_SERVER['REMOTE_ADDR']);
break;
}
}
}
else if ($_SERVER['HTTP_CLIENT_IP'])
{
define('IPADDRESS', $_SERVER['HTTP_CLIENT_IP']);
define('ALT_IP', $_SERVER['REMOTE_ADDR']);
define('ALT_IP2', 'N/A');
}
else if($_SERVER['REMOTE_ADDR'])
{
define('IPADDRESS', $_SERVER['REMOTE_ADDR']);
define('ALT_IP', 'N/A');
define('ALT_IP2', 'N/A');
}
else if($_SERVER['HTTP_FROM'])
{
define('ALT_IP', $_SERVER['REMOTE_ADDR']);
define('ALT_IP2', 'N/A');
define('IPADDRESS', $_SERVER['HTTP_FROM']);
}else{
define('IPADDRESS', 'Anonymous');
define('ALT_IP2', 'Anonymous');
define('ALT_IP', 'Anonymous');
}
if(!defined('IPADDRESS') || !defined('ALT_IP')){
define('IPADDRESS', 'Anonymous');
define('ALT_IP', 'Anonymous');
define('ALT_IP2', 'Anonymous');
}
4- قم بالبحث عن الأسطر التاليه
كود:
define('SESSION_IDHASH', md5($_SERVER['HTTP_USER_AGENT'] . ALT_IP )); // this should *never* change during a session
define('SESSION_HOST', substr(IPADDRESS, 0, 15));
define('USER_AGENT', $_SERVER['HTTP_USER_AGENT']);
define('REFERRER', $_SERVER['HTTP_REFERER']);
5- استبدلها بالأسطر التاليه :
كود:
define('SESSION_IDHASH', md5($_SERVER['HTTP_USER_AGENT'] . substr(IPADDRESS, 0, 15) )); // this should *never* change during a session
define('SESSION_HOST', substr(IPADDRESS, 0, 15));
define('USER_AGENT', $_SERVER['HTTP_USER_AGENT']);
define('REFERRER', $_SERVER['HTTP_REFERER']);
6- إحفظ الملف وقم برفعه .
الان قم بالدخول على المتواجدون الان لو كنت مشرفاً عاماً على منتداك وراقب الأيبي الخاصه بالأعضاء وبالزوار كذلك وستجد أن الأيبي الحقيقي أصبح يظهر بدلاً من أيبي البروكسي .
عزيزي ked
الكل يعرف ان الاسلوب الذي يعرض به IP Adress في الـvb عن طريق المتغير
كود:
$REMOTE_ADDR
،، ولكن هذا المتغير لا يعرض الـIP الحقيقي للمستخدم اذا كان اتصاله غير مباشر بالانترنت ،، اذا كان متصل بواسطة xDSL او يوجد بروكسي في المزود الرئيسي فهذا المتغير يعرض لنا الـip الخاص بالمزود ،، وثلا في السودان ولمستخدمي الـxDSL بيظهر لنا الـIP :-
212.0.138.14 ،،،، وهذا ليس الـIP الحقيقي للمستخدم ، والحل نجده في هذا المتغير
كود:
HTTP_CLIENT_IP$
،، ولعل هذا هو التغير الذي تم في الملف INIT.PHP بس
الغالي ked لك اجزل الشكر والتقدير للموضوع المهم