PDA

View Full Version : سوال: در خواست کد دریافت IP



Tarragon
دوشنبه 17 بهمن 1390, 14:45 عصر
سلام به همه من PHP رو چند وقتی هست یاد گرفتم و با اسکریپت ها کار می کنم چند وقت پیش برای یه بازی یک پنل ادمین ساختم و نمی دونم چطوری ازش محافظت کنم من با اسکریپت اماده ی یکی از دوستان براش رمز عبور گذاشتم اما دیدم چند نفر با پیدا کردن رمز تو ی اسکریپت دست می برند حالا تصمیم گرفتم کاری کنم که پنل ادمینم با IP کار کنه واسه همین من یه کد می خوام که توش IP بعنوان یه متغیر گذاشته شده باشه و توی دستور شرطی بتونم ازش استفاده کنم ممنون

MMSHFE
دوشنبه 17 بهمن 1390, 16:59 عصر
با سلام، دوست گرامی، اگه منظورتون دریافت IP کسی هست که سایت رو باز میکنه، با استفاده از ['SERVER['REMOTE_ADDR_$ میتونید بهش دسترسی پیدا کنید. البته اگه فرد با پراکسی یا V*P*N و...به اینترنت متصل شده باشه، این روش به شما IP اصلی رو اعلام نمیکنه. در چنین مواردی برای بدست آوردن IP واقعی فرد، از این کد استفاده کنید:


<!doctype html>
<html>
<head>
<title>Your IP</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<?php
function validip($ip) {
if (!empty($ip) && ip2long($ip) != -1) {
$reserved_ips = array(
array('0.0.0.0','2.255.255.255'),
array('10.0.0.0','10.255.255.255'),
array('127.0.0.0','127.255.255.255'),
array('169.254.0.0','169.254.255.255'),
array('172.16.0.0','172.31.255.255'),
array('192.0.2.0','192.0.2.255'),
array('192.168.0.0','192.168.255.255'),
array('255.255.255.0','255.255.255.255')
);
foreach($reserved_ips as $r) {
$min = ip2long($r[0]);
$max = ip2long($r[1]);
if(ip2long($ip) >= $min && ip2long($ip) <= $max) {
return false;
}
}
return true;
}
else {
return false;
}
}

function getip() {
if(isset($_SERVER['HTTP_CLIENT_IP']) && validip($_SERVER['HTTP_CLIENT_IP'])) {
return $_SERVER['HTTP_CLIENT_IP'];
}
$ips = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']) : array();
foreach($ips as $ip) {
if(validip(trim($ip))) {
return $ip;
}
}
if(isset($_SERVER['HTTP_X_FORWARDED']) && validip($_SERVER['HTTP_X_FORWARDED'])) {
return $_SERVER['HTTP_X_FORWARDED'];
}
elseif(isset($_SERVER['HTTP_FORWARDED_FOR']) && validip($_SERVER['HTTP_FORWARDED_FOR'])) {
return $_SERVER['HTTP_FORWARDED_FOR'];
}
elseif(isset($_SERVER['HTTP_FORWARDED']) && validip($_SERVER['HTTP_FORWARDED'])) {
return $_SERVER['HTTP_FORWARDED'];
}
else {
return $_SERVER['REMOTE_ADDR'];
}
}
?>
</head>
<body bgcolor="#aaaaff">
<?php
echo '<font face="tahoma">Your IP :<br/>'."\n";
echo getip().'</font><br/>'."\n";
?>
</body>
</html>

موفق باشید.

Tarragon
دوشنبه 17 بهمن 1390, 19:12 عصر
ببخشید من این رو توی wamp server امتحان کردم این ارور ها رو داد

Your IP :
Notice: Undefined index: HTTP_CLIENT_IP in C:\wamp\www\bigdump.php on line 36

Notice: Undefined index: HTTP_X_FORWARDED_FOR in C:\wamp\www\bigdump.php on line 39

Notice: Undefined index: HTTP_X_FORWARDED in C:\wamp\www\bigdump.php on line 45

Notice: Undefined index: HTTP_FORWARDED_FOR in C:\wamp\www\bigdump.php on line 48

Notice: Undefined index: HTTP_FORWARDED in C:\wamp\www\bigdump.php on line 51

Notice: Undefined index: HTTP_X_FORWARDED in C:\wamp\www\bigdump.php on line 54
127.0.0.1

Tarragon
دوشنبه 17 بهمن 1390, 19:24 عصر
داداش من با کد پایینی آی پی رو می خواستم ببینم ولی نوشت 127.0.0.1 ولی من آی پی کامپیوتر خودم رو می خوام ممنون


<?php
echo $_SERVER['REMOTE_ADDR'];
?>

رضا قربانی
دوشنبه 17 بهمن 1390, 22:26 عصر
if (!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}

$ip_f = array();
list($ip_f[0],$ip_f[1],$ip_f[2],$ip_f[3],) = explode(".", $ip);

$r_ip = $ip_f[0].'.'.$ip_f[1].'.'.$ip_f[2];


echo $ip; //// نمایش آی پی اصلی
echo $r_ip; //// نمایش رنج آی پی

Tarragon
دوشنبه 17 بهمن 1390, 22:30 عصر
ببخشید می خواستم بدونم آی پی من که 127.0.0.1 نیست پس چرا تو این کد آی پیم رو این می نویسه

رضا قربانی
دوشنبه 17 بهمن 1390, 22:44 عصر
آخه توی لوکال سیستمون تست گرفتید. آی پی پیشفرض لوکال هاست : 127.0.0.1

این رو باید روی هاست تست بگیرید تا آی پی شمارو نمایش بده

MMSHFE
دوشنبه 17 بهمن 1390, 23:23 عصر
ببخشید من این رو توی wamp server امتحان کردم این ارور ها رو داد

Your IP :
Notice: Undefined index: HTTP_CLIENT_IP in C:\wamp\www\bigdump.php on line 36

Notice: Undefined index: HTTP_X_FORWARDED_FOR in C:\wamp\www\bigdump.php on line 39

Notice: Undefined index: HTTP_X_FORWARDED in C:\wamp\www\bigdump.php on line 45

Notice: Undefined index: HTTP_FORWARDED_FOR in C:\wamp\www\bigdump.php on line 48

Notice: Undefined index: HTTP_FORWARDED in C:\wamp\www\bigdump.php on line 51

Notice: Undefined index: HTTP_X_FORWARDED in C:\wamp\www\bigdump.php on line 54
127.0.0.1

کد رو اصلاح کردم. موفق باشید.

Tarragon
سه شنبه 18 بهمن 1390, 06:56 صبح
MMSHFE جان تو کد شما IP بصورت متغیر نیست من بعنوان یک متغیر می خواستمش ممنون می شم اگر این کار رو هم برام بکنید

yones_safari
سه شنبه 18 بهمن 1390, 12:32 عصر
MMSHFE جان تو کد شما IP بصورت متغیر نیست من بعنوان یک متغیر می خواستمش ممنون می شم اگر این کار رو هم برام بکنید
اینم متغییر:

$ip=getip();

ravand
دوشنبه 24 بهمن 1390, 08:44 صبح
ببخشيد منظور شما از ip واقعي چيه؟
منظورتون اينه كه اگه كسي برنامه ي تغيير ip نصب كرد و آي پيش عوض شد با اين كدها ip اصليش مياد؟ يا اينكه يا اينكه منظورتون اين هست كه هر كاربري فقط يك آي پي داره و با قطع و وصل شدن به اينترنت اون آي پي اصلي تغييري نميكنه؟
برخي شركت هاي isp هستن كه كاري ميكنند كه هر كاربر با قطع و وصل شدن به اينترنت آي پيش عوض شه. من چجوري تشخيص بدم كه اين ip متعلق به اون فرد هست يا نه؟ چون هر بار تغيير ميكنه.

MostafaEs3
دوشنبه 24 بهمن 1390, 11:42 صبح
//////////

MMSHFE
دوشنبه 24 بهمن 1390, 12:17 عصر
با PHP*roxy کار نکرد. دارم تستش میکنم. باید روی کد PHP*roxy کار کنم ببینم راه نفوذ بهش چیه تا کد رو اصلاح کنم. موفق باشید.

MostafaEs3
دوشنبه 24 بهمن 1390, 12:37 عصر
//////////

MMSHFE
دوشنبه 24 بهمن 1390, 15:50 عصر
راههای زیادی هست. مثلاً اینکه آدرس واردشده در مرورگر رو چک کنه ببینه اگه مربوط به دامین خودشون نبود، صفحه بارگذاری نشه. فکر میکنم بشه با cURL کارهایی کرد ولی امتحان نکردم. موفق باشید.

MostafaEs3
دوشنبه 24 بهمن 1390, 16:41 عصر
//////////

eshpilen
دوشنبه 24 بهمن 1390, 21:14 عصر
اگر یکی از پراکسی های سر راه IP کاربر رو رد نکنه دیگه شما چطوری میخوای IP واقعی کاربر رو بدست بیاری؟
اون هدرهایی که شما استفاده میکنی خود پراکسی ها ست میکنن و اجازه میدن به این شکل IP کلاینت بصورت دیتا منتقل بشه. و میتونن این کار رو نکنن. هیچ اجبار و محدودیت فنی در این زمینه وجود نداره.
وقتی یه برنامه این کار رو نکنه، که به گمانم Anonymizer ها همینطور هستن، دیگه شما IP واقعی کاربر رو ندارید. ضمنا فکر نکنید اگر یه چیزی هم گرفتید واقعا IP کلاینت اصلی هست. یاد اون قضیه بدست آوردن MAC میفتم. تاحالا چند نفر کد گذاشتن که MAC خود سرور رو میداد!! بعد یکی دیگه هم یه چیزی خونده بود فکر میکرد هرچی به اسم MAC بگیره یعنی MAC کاربر!! یه دوتا تست ساده و اولیه رو هم محض رضای خدا انجام نمیدن مطمئن بشن.
در مسیر اینترنت بین سایت شما و کلاینت ممکنه خیلی رایانه ها و واسطه ها باشن و هرکدام برای دیگری در نقش کلاینت و سرور و پراکسی، و هرکدام ممکنه یکسری هدر رو اضافه کنن. اگر یکی یک هدر رو اضافه نکنه یعنی بخشی از اطلاعات قبل از خودش از بین میره. اگر یکی یک هدر رو اضافه کنه بستگی داره اون هدر در اصل از کجا بوده (حتی میتونه جعلی باشه).

Net So
دوشنبه 24 بهمن 1390, 22:38 عصر
برای اولین بار Seconded به eshpilen (http://barnamenevis.org/member.php?148005-eshpilen)
+
@MostafaEs3 (http://barnamenevis.org/member.php?240106-MostafaEs3)
WebPr0xy ها معمولا از cgi استفاده میکنن و Page رو کامل Load میکنن و فقط حالت کپچر شده ی اون رو نشون میدن. برای Data Transfer هم گاها از curl استفاده میکنن و خیلی وقت ها میبینی که تو باز کردن پورت 443 میمونن.
نمونش : mili1000-ir02.l.to

MostafaEs3
دوشنبه 24 بهمن 1390, 22:49 عصر
//////////